如何解决ms Access中的rnd函数返回相同的值
SELECT * from mytable WHERE chaptId IN (SELECT Top 1 chaptId FROM (SELECT chaptId,Rnd(RowID) AS RandomValue FROM mytable) ORDER BY RandomValue)
基本上,它从表中获取一个随机的唯一chaptID值,并为此值提取具有该chaptID值的所有行。
它通过ms访问完美运行。当我尝试从VB6(ADO DB)中运行它时,它总是返回相同的chaptID,从而返回相同的章节。搜索后,我发现必须使用Randomize函数。我不知道如何在查询中包括它。因此,我尝试将其包装为:Rnd(Randomize(RowID))
。我不知道该怎么用。
我收到的消息是Undefined function Randomize in epxression
我该如何解决这个问题?
谢谢。
解决方法
如发现的那样,在通过ODBC / ADO使用Rnd
时不可能随机化。
这意味着我们必须以某种方式引入随机性。
一个明显的选择是使用系统计时器:
SELECT * from mytable WHERE chaptId IN (SELECT Top 1 chaptId FROM (SELECT chaptId,Rnd(-1 * (RowID + Timer() * 100)) AS RandomValue FROM mytable) ORDER BY RandomValue)
,
您可以在 rownumbers VBA.RowNumbers上研究我的项目,该项目还处理伪随机排序-请参见第4段,格式为“ Form_RandomProducts.cls”。
有关真正的随机数,请参见我的项目VBA.Random。更多代码,但易于实现。
如果您只能运行本机Access SQL,则此基本查询应该可以执行(作为您的子查询):
SELECT
*,Rnd(-Timer()*[RowID]) AS [Rnd Generator]
FROM
mytable
ORDER BY
Rnd(-Timer()*[RowID]);
,
由于您的目标是每次获得一个随机的章节,所以为什么不运行查询之前先获得一个随机的章节:
Dim FirstChapter as Integer
Dim LastChapter as Integer
Dim RandomChapter as Integer
FirstChapter = DMin("ChaptId","mytable")
LastChapter = DMax("ChaptId","mytable")
Randomize
RandomChapter = Int((LastChapter - FirstChapter + 1) * Rnd + FirstChapter)
'run vba ADO code for the following SQL
"SELECT * from mytable WHERE chaptId IN (" & RandomChapter & ")"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。