2014-05-03 32 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(都不帶參數)應該給你隨機數。