【发布时间】:2023-04-08 16:09:01
【问题描述】:
我在拆分表单上有一个按钮,该按钮打开一个更新查询,它更新我的名为 Items 的表的 Random ID 字段,然后按 Random ID 对表进行排序。它使用“Rnd([ID])*Rnd(Now())”更新该字段,使值看起来足够随机。它似乎工作得很好,直到我意识到出了什么问题。
每次打开 Access,加载数据库表单,然后单击按钮,我都会得到相同系列的随机值。例如,第一次单击按钮时,顶部的项目是项目 X,随机 ID 已设置为 1.53779983520508E-05。如果我再次单击它,项目 Y 现在位于顶部,其随机 ID 为 9.06816168821933E-08。第三次,项目 Z 位于顶部,随机 ID 为 1.8881419094896E-08。
我可以整天按住按钮并获得全新的订单和号码,这很适合我。问题是当我必须重新打开数据库时。
无论表格以什么顺序开始,即使我将其完全恢复为使用另一个字段作为排序顺序,当我在打开数据库后第一次单击“随机化”按钮时,项目 X 始终位于顶部,始终带有值 9.06816168821933E-08。在第二次单击时,项目 Y 为 1.53779983520508E-05。第三次单击,项目 Z 为 1.8881419094896E-08。每次连续点击总是返回与我在上一个会话中最后一次到达该点时相同的一组随机 ID 值。
我尝试将 Randomize 按钮添加到 RunCode 并调用 RandomizeFunc(),这是我这样编写的函数:
Option Compare Database
-----
Public Function RandomizeFunc()
Randomize
End Function
我知道调用 Randomize 会重置随机种子。但这没有任何区别。值的顺序始终相同。
谁能告诉我我到底做错了什么?
编辑:
这是分配随机 ID 查询
Assign Random ID
-----
Field: Random ID
Table: Items
Update To: Rnd([ID])*Rnd(Now())*Rnd([ID]*Now())
(我徒劳地添加了一些无关的 Rnd,试图让这些值停止重复......)
这是嵌入的随机按钮宏的样子
Randomize : On Click
-----
RunCode
Function Name RandomizeFunc()
OpenQuery
QueryName Assign Random ID
View Datasheet
Data Mode Read Only
SetOrderBy
OrderBy [Random ID]
Control Name
【问题讨论】:
-
代码如何使用
Rnd?而且,RandomizeFunc在哪里/何时被调用? -
我添加了来自查询和嵌入宏的代码