使用VB+Access做一个数据库查询的问题,请大侠指教!~ 有一个Access数据库,有4个字段,ID、question、answer、flag(默认为0)用VB连接数据库我想做一个随机查询,但要有一个限制,就是flag字段为1的时候,自动排除该行,不纳入随机查询的范围。我本来想用sql查询语句来写的,可是细细想想,怎么都没有办法实现啊……所以特来向大侠请教了…… 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 select top 10 * from tablename where flag<>1 select * from 表名 where flag<>1这样查询出来的数据就不存在flag=1的了 select * from 表名 where flag<>1这样虽然能实现排除flag=1的时候,但是那样就不能实现随机查询了…… 我的意思各位大侠可能没看明白我是想做一个随机的查询,从表中随机抽出一组数据来,但是随机查询的过程中要排除flag字段=1的那行数据!~ 语句没错啊,怎么实现随机与这个哪有关系?根据什么来随的机呢?ID吧某ID的flag=1就skip呗,或者根本就没明白你的意思?? 比如我现在有一个这样的表ID QUESTION ANSWER FLAG1 问题1 答案1 02 问题2 答案2 03 问题3 答案3 14 问题4 答案4 05 问题5 答案5 0在这个表里面随机抽出一组数据,但是抽出的数据FLAG不能为1。这样的功能要怎么实现哦?请教大侠!~ 这样可否?"select * from 表 where ID=" & Int((ID_max * Rnd) + 1) & "'" and flag<>1"如果记录为0.do it again... 我不是程序员,谈谈我的想法首先查询出所有flag不等于1的记录,再用随机函数算一个小于记录总数的数字,再移到这个记录上即可。我不记得语法了,不好意思。 先得一个随机数,在id范围内.然后看这个ID的记录的flag是否=1,是的话,重新取一次...你说的反一下就可以了,这样最简单. 以上的执行效率怎么样?小心问一句,如果运气很不好,老是抽到FLAG=1的怎么办?以上的办法我早就想到了,来论坛里询问,就是想要一个更好的解决方案~~ 也得遵循你的第一要求就是flag<>1因此就很简单的理解了,先查询出符合以上要求的记录后,再作随机查询.. 图简洁就那样..可运气不好也是问题.那只把先把flag=0的id拿出来.幅值给一个动态数组了.然后根据这个数组在大小确定随机数产生的范围.得到随机数,回头拿这个id的记录. 或着在初始化时select ID from 表名 where flag<>1把ID存到存到一个数组X()然后随机产生数组的下标i,再"select * from 表 where ID=" + X(i) 那如果我想抽取出来以后,就把那个记录的flag标记改为1,然后下一轮的抽取的时候就把它去掉,不纳入随机抽取的范围内这样的话,用动态数组能实现吗?(就是说每抽一个,下一次抽取的范围里面就少一个……)再次感谢各位大侠,等结帖的时候,我一定会给你们分的,虽然很少,但是是我的一点心意…… 数据设计时做两个字段:flag1(等同于你上面的flag) flag2 dim a integer dim sqlstr as string dim rs as new recordset a=Int((ID_max * Rnd) + 1) sqlstr = " sqlstr = "select * from 表" set rs = cw_dataenvi.conn.execute(sqlstr) with rs if not rs.eof then if rs.fields("flag2")<>1 then '判断更新的那个标志是否为1 sqlstr = "select * from 表 where ID=" & a & "'" and flag1<>1" set rs = cw_dataenvi.conn.execute(sqlstr) with rs if not rs.eof then if rs.fields("flag1")<>1 then update ....... '更新表中的flag1 , flag 2! end if end if end with end if end if end with 我支持这个 "select * from 表 where ID=" & Int((ID_max * Rnd) + 1) & "'" and flag<>1" "select * from 表 where ID=" & Int((ID_max * Rnd) + 1) & "'" and flag<>1"这个我觉得有些矛盾吧,如果随机选择的ID恰好那行记录是flag=1,那怎么办?那样出来的是空的记录哦……什么都没有的 请问那位高手帮忙txt文件变成EXCEL文件 关于一个过程的问题,看不懂,请求提示 怎样跳出多重循环!不是exit for 怎样把Excel单元格中的换行(Alt+Enter)在Textbox中显示出来? 怎么做能使程序像记事本那样双击.txt文件就可以打开? 怎樣可以用代碼來指定一個按鈕控件屬于Frame控件內。 谁帮我写段代码实现split函数的功能? !!!新春有礼!送大家一个自己写的简易手写识别系统!!! 如何解决这个难题? 斑竹!!!!printer问题..请来看看啊!!!!!!!!!! 请问有人用过eqCustom声音控件吗? 有关打印的问题?在线等!!!
这样虽然能实现排除flag=1的时候,但是那样就不能实现随机查询了……
1 问题1 答案1 0
2 问题2 答案2 0
3 问题3 答案3 1
4 问题4 答案4 0
5 问题5 答案5 0
在这个表里面随机抽出一组数据,但是抽出的数据FLAG不能为1。
这样的功能要怎么实现哦?请教大侠!~
首先查询出所有flag不等于1的记录,再用随机函数算一个小于记录总数的数字,再移到这个记录上即可。
我不记得语法了,不好意思。
因此就很简单的理解了,先查询出符合以上要求的记录后,再作随机查询..
那只把先把flag=0的id拿出来.幅值给一个动态数组了.
然后根据这个数组在大小确定随机数产生的范围.
得到随机数,回头拿这个id的记录.
select ID from 表名 where flag<>1
把ID存到存到一个数组X()
然后随机产生数组的下标i,再
"select * from 表 where ID=" + X(i)
再次感谢各位大侠,等结帖的时候,我一定会给你们分的,虽然很少,但是是我的一点心意……
a=Int((ID_max * Rnd) + 1)
sqlstr = " sqlstr = "select * from 表" set rs = cw_dataenvi.conn.execute(sqlstr) with rs if not rs.eof then
if rs.fields("flag2")<>1 then '判断更新的那个标志是否为1
sqlstr = "select * from 表 where ID=" & a & "'" and flag1<>1" set rs = cw_dataenvi.conn.execute(sqlstr)
with rs
if not rs.eof then if rs.fields("flag1")<>1 then
update ....... '更新表中的flag1 , flag 2! end if end if end with
end if end if end with
这个我觉得有些矛盾吧,如果随机选择的ID恰好那行记录是flag=1,那怎么办?那样出来的是空的记录哦……什么都没有的