日期:2014-05-16  浏览次数:20796 次

【高分】aecss 如何随机查询,急问,在线等....
acess 如何利用SQl语句随机查询一条记录,而在每一次查询结果都不一样???

差了很多资料,都只能查询一次,以后都一样了。。。。。

请问谁有好的办法??先谢过了!

急问,有答案即结贴!

------解决方案--------------------
最简单的办法:表中增加一个自动编号字段,然后用Hour、Minute、Second函数分别获得查询时间的数字,分钟*60,小时*3600,然后相加。目的是要得到当前查询时间是当天的哪一秒,然后查找和当前秒数对应的自动编号就行了。如果记录非常多也可以把日期转化成数字加起来查询。
这样只要不是在同一秒查询结果就不一样。
------解决方案--------------------
很简单..
你如果使用 ADO 技术读取 过记录集,那么问题就不难了.

你所谓的随机查询,就是下一次出现的记录 与当前已经显示的一条记录不同(也可能相同,相比之下机率要小得多).

//////////////////////////////////////////////

ADO 有一个对于你来讲很有用的方法,即 标记记录位置的移动方法 "Move 方法" 或 "MoveFirst、MoveLast、MoveNext 和 MovePrevious 方法" 


简单说明:

使用 MoveFirst 方法将当前记录位置移动到 Recordset 中的第一个记录.
使用 MoveLast 方法将当前记录位置移动到 Recordset 中的最后一个记录。
使用 MoveNext 方法将当前记录位置向前移动一个记录(向 Recordset 的底部移动)
使用 MovePrevious 方法将当前记录位置向后移动一个记录(向 Recordset 的顶部移动)



使用 Move 方法 在 Recordset 对象中移动当前记录的位置。
语法:
recordset.Move NumRecords, Start

如果 NumRecords 参数大于零,当前记录位置向前移动(向 Recordset 的结尾移动)。如果 NumRecords 小于零,当前记录位置向后移动(向 Recordset 的开始移动)。

Start 代表 开始位置

/////////////////////////////////////////////////

上面只是给出了相关的提示,并没有给出 具体的实现方法.
并且涉及到 随机问题 必然会使用 随机种子的函数, 都是弄程序的人这个就不用我再说了.

总体思想就 打开记录集 用循环语句开始循环移动当前记录所在记录集中的位置,当位置与随机的种子计算表达式的值相等时,跳出循环并显示当前的记录......
------解决方案--------------------
select top 1 * from yourTable order by rnd(字段1)
------解决方案--------------------
怎么还顶,试过我的办法不行吗?
------解决方案--------------------
SQL code
SELECT TOP 5 * FROM TB ORDER BY NEWID()

------解决方案--------------------
还没结吗????
------解决方案--------------------
http://topic.csdn.net/u/20090705/12/ec85d3f3-5e34-4168-a8ec-5e17f9d313af.html
去 看 看 ~~ 我 前几天 也遇到这个问题~~!
------解决方案--------------------
可以随机产生一个数字,然后查询这个数字的记录
------解决方案--------------------
支持设置时间来解决
------解决方案--------------------
路过 顶一下
------解决方案--------------------
咋?? 还没有结贴??

如果只用 SQL 语句, 那么 ACMAIN_CHM 给出的语句最经典!!
select top 1 * from yourTable order by rnd(字段1)

ACMAIN_CHM 在上面只是给出了一个 语句 模板,你可自己套用就行了;例如我们随机查询的是 采购订单表中的一条记录,套用上述语句模板后如下所示:

SELECT top 1 采购订单.*
FROM 采购订单
order by rnd(序号);

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

当然你如果对VB 或 VC 等比较熟悉,也可以使用我说过的采用 ADO 技术移动记录指针随机指向任意记录位置的办法;不过需要写一段代码,但也不难.


如果对比所付出劳动时间,不难看出 ACMAIN_CHM 给出的 SQL 语句 容易接受.....


-.- 我写了这么多 你若还是理解不了....我只能挂掉了...

你还可以登录 http://www.accessbbs.cn 论坛 ,上传实例来交流,那里会有很多热心的朋友帮助你.
------解决方案--------------------
SELECT TOP 5 * FROM TB ORDER BY NEWID()
------解决方案--------------------
1. 随机查询,就是下一次出现的记录 与当前已经显示的一条记录不同

2. select top 3* from tablename where field 

3. 把这个写进一个简单的操作中就可以了

------解决方案--------------------
探讨
怎么还顶,试过我的办法不行吗?

------解决方案--------------------