2014-05-03 31 views
0

我在打开更新查询的分割表单上有一个按钮,该更新查询更新我的表的随机ID字段,然后通过随机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值。

我曾尝试增加了随机化按钮RunCode并调用RandomizeFunc(),这是我写的一个这样的功能:

Option Compare Database 
----- 
Public Function RandomizeFunc() 
Randomize 
End Function 

我明白,只是打电话随机化重置随机种子。但它没有任何区别。值的顺序始终相同。

谁能告诉我我到底在做什么错?

编辑:

这是分配随机ID查询

Assign Random ID 
----- 
Field: Random ID 
Table: Items 
Update To: Rnd([ID])*Rnd(Now())*Rnd([ID]*Now()) 

(我加了一些外来赛第一轮在妄图获取值停止重复...)

这是随机化按钮嵌入的宏看起来像

Randomize : On Click 
----- 
RunCode 
    Function Name RandomizeFunc() 
OpenQuery 
    QueryName Assign Random ID 
    View  Datasheet 
    Data Mode Read Only 
SetOrderBy 
    OrderBy  [Random ID] 
Control Name 
+0

如何使用'Rnd'的代码?并且,何时/何时调用了RandomizeFunc? – user2864740

+0

我添加了来自查询和嵌入式宏的代码 –

回答

0

我没有一个rea l解决方案在这里,但我确实有一些指针。当使用负参数调用时,Rnd函数会重置(在相同主题here上有用的帖子)。当您第一次运行时,您的代码是否有可能以负面的说法开始?

实施例:

Sub jzz() 
Dim i As Long 

Rnd (-1) 

For i = 1 To 10 
    Debug.Print Rnd 
Next i 

End Sub 

这将连连(10相同序列)吐出全部相同的数字。

如果添加随机数,它将生成随机数,但只有在Rnd (-1)语句后调用randomize时才会生成随机数。如果你以前这样做,它将被Rnd的负值所取消。所以:

Sub jzz() 
Dim i As Long 

Rnd (-1) 
Randomize 'make sure you call it without arguments 

For i = 1 To 10 
    Debug.Print Rnd 
Next i 

End Sub 

将提供随机数。因此,也许(但我不考虑你的代码的其余部分),你可以尝试放弃你的rnd函数调用中的[ID]字段。调用randomize然后rnd(都不带参数)应该给你随机数。