Access 中的唯一随机数生成
Posted
技术标签:
【中文标题】Access 中的唯一随机数生成【英文标题】:unique random number generation in Access 【发布时间】:2021-07-07 22:36:40 【问题描述】:我正在尝试在我的查询中添加一个从 0 开始的唯一随机数 - 列表长度,它用于随机数与中奖号码相关联的彩票。
我拥有的字段是玩家姓名(可以重复,因为他们可以购买多张门票)员工 ID(再次重复)和支付金额。
我试过RND功能:Random Number: Int(Rnd([Employee ID])*20288)+1
但是我得到了重复的数字,当我尝试在数据表中排序时,随机数会自行更新,即使我只是点击记录,它也会发生变化。
玩家姓名 员工ID 支付金额 随机数 比尔比尔 000012 15.00 14756 姓名2 000452 20.00 13916 姓名2 000452 20.00 9512有什么想法吗?
【问题讨论】:
您必须在生成数字时存储它们,然后通过将每个新生成的数字与存储的数字进行比较来检查是否重复。 【参考方案1】:您可以使用此处的函数RandomRowNumber
:VBA.RowNumbers 对数字进行排序。
另一种极其简单的方法是将彩票号码写入具有 GUID 或 随机自动编号 的(临时)表(在表设计器中,Access 将其称为复制 ID)作为主键。然后对其进行排序,并在查询中选择Top N
记录以获取中奖号码。
【讨论】:
GUID + Top N 方法很酷! :)【参考方案2】:试试这个功能:
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)
【讨论】:
以上是关于Access 中的唯一随机数生成的主要内容,如果未能解决你的问题,请参考以下文章