Ms access ms access中的rnd函数返回相同的值
我有以下ms access查询: 从mytable中选择*其中chaptId在从SELECT chaptId中选择前1个chaptId,RndRowID作为mytable中的随机值按随机值排序 基本上,它从表中获取一个随机唯一的chaptID值,并为此值提取具有此chaptID值的所有行 它可以通过ms access完美地工作。当我尝试在VB6 ADO DB中运行它时,它总是返回相同的chaptID,从而返回相同的章节。搜索时,我发现我必须使用随机化函数。我不知道如何在查询中包含它。所以我试着这样包装:RndRandomizeRowID。我不知道如何使用它 我得到的消息是EPXpression中未定义的函数随机化 我怎样才能解决这个问题Ms access ms access中的rnd函数返回相同的值,ms-access,Ms Access,我有以下ms access查询: 从mytable中选择*其中chaptId在从SELECT chaptId中选择前1个chaptId,RndRowID作为mytable中的随机值按随机值排序 基本上,它从表中获取一个随机唯一的chaptID值,并为此值提取具有此chaptID值的所有行 它可以通过ms access完美地工作。当我尝试在VB6 ADO DB中运行它时,它总是返回相同的chaptID,从而返回相同的章节。搜索时,我发现我必须使用随机化函数。我不知道如何在查询中包含它。所以我试着这
提前感谢。正如我们所发现的,在使用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)
您可以学习我的关于行数的项目,该项目还涉及伪随机排序——请参见第4段和表单“form_RandomProducts.cls” 要了解真正的随机数,请参阅我的项目。代码多一点,但实现起来很简单 如果您只能运行本机Access SQL,则此基本查询应作为子查询执行: 选择 *, Rnd定时器*[RowID]作为[Rnd生成器] 从…起 空白表 订购人 Rnd定时器*[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 & ")"
两者都依赖于VBA代码,因此不使用ODBC连接/ADO@MirrorMirror尝试编辑,忘记需要乘以-1才能进行种子设定。请注意,如果您依赖计时器进行随机化,则确实需要等待一小段时间才能得到不同的结果。