Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access ms access中的rnd函数返回相同的值_Ms Access - Fatal编程技术网

Ms access ms access中的rnd函数返回相同的值

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,从而返回相同的章节。搜索时,我发现我必须使用随机化函数。我不知道如何在查询中包含它。所以我试着这

我有以下ms access查询:

从mytable中选择*其中chaptId在从SELECT chaptId中选择前1个chaptId,RndRowID作为mytable中的随机值按随机值排序

基本上,它从表中获取一个随机唯一的chaptID值,并为此值提取具有此chaptID值的所有行

它可以通过ms access完美地工作。当我尝试在VB6 ADO DB中运行它时,它总是返回相同的chaptID,从而返回相同的章节。搜索时,我发现我必须使用随机化函数。我不知道如何在查询中包含它。所以我试着这样包装:RndRandomizeRowID。我不知道如何使用它

我得到的消息是EPXpression中未定义的函数随机化

我怎样才能解决这个问题


提前感谢。

正如我们所发现的,在使用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才能进行种子设定。请注意,如果您依赖计时器进行随机化,则确实需要等待一小段时间才能得到不同的结果。