Access 中唯一的随机数生成

问题描述

我正在尝试从 0 中添加一个唯一的随机数 - 在我的查询中列出长度,它用于随机数与中奖号码相关联的彩票。

我拥有的字段是玩家姓名(可以重复,因为他们可以购买多张门票)员工 ID(再次重复)和支付金额。

我尝试过 RND 函数Random Number: Int(Rnd([Employee ID])*20288)+1

但是我得到了重复的数字,当我尝试在数据表中排序时,随机数会自动更新,即使我只是点击它改变的记录。

Player Name  Employee ID    Payment Amount  Random Number
Bill Bill      000012          15.00               14756
Name2          000452          20.00               13916
Name2          000452          20.00               9512

有什么想法吗?

解决方法

您可以使用此处找到的函数 RandomRowNumberVBA.RowNumbers 对数字进行排序。

另一种极其简单的方法是将彩票号码写入具有 GUID随机自动编号 的(临时)表(在表设计器中,Access 将其称为复制 ID) 作为主键。然后对其进行排序,并在查询中选择 Top N 记录以获取中奖号码。

,

试试这个功能:

Public Function GetRandomDouble(Optional ByVal iLength As Integer = 3) As Double
    Dim s As String: s = String(iLength," ")     'fixed length string with 8 characters
    Dim n As Integer
    Dim ch As Integer 'the character
      Randomize
    For n = 1 To Len(s) 'don't hardcode the length twice
        Do
            ch = Rnd() * 127 'This could be more efficient.
            '48 is '0',57 is '9',65 is 'A',90 is 'Z',97 is 'a',122 is 'z'.
        Loop While ch < 48 Or ch > 57 'And ch < 65 Or ch > 90 And ch < 97 Or ch > 122
        Mid(s,n,1) = Chr(ch) 'bit more efficient than concatenation
    Next
  
GetRandomDouble = CDbl(s)
End Function

并像这样在您的查询中使用它

Random Number: GetRandomDouble(5)