MS-Access中的静态随机数

MS-Access中的静态随机数,ms-access,vba,Ms Access,Vba,我使用以下公式试图创建一个静态随机数 Random Number: Format(Int((99999999-11111111+1)*Rnd([Numbers]+11111111))) 然而,它返回一个不同的非静态随机数 Random Number: Format(Int((99999999-11111111+1)*Rnd([Numbers]+11111111))) 有什么建议吗?您可以否定提供给函数的数值参数,使函数返回给定种子值的相同随机数(即,随机数和种子值之间存在一对一的映射): 语

我使用以下公式试图创建一个静态随机数

Random Number: Format(Int((99999999-11111111+1)*Rnd([Numbers]+11111111)))
然而,它返回一个不同的非静态随机数

Random Number: Format(Int((99999999-11111111+1)*Rnd([Numbers]+11111111)))

有什么建议吗?

您可以否定提供给函数的数值参数,使函数返回给定种子值的相同随机数(即,随机数和种子值之间存在一对一的映射):

语法

Rnd[(编号)]

返回值

如果号码是

  • 小于零:每次使用相同的数字作为种子。

  • 大于零:序列中的下一个随机数

  • 等于零:最近生成的数字

  • 未提供:序列中的下一个随机数

但是,更好的方法可能是使用静态随机数填充源表中的其他字段,或者构建包含名称和随机数之间映射的单独表

对于您的特定情况,由于您希望生成8位随机数,因此您将使用:

10000000 + Int(90000000 * Rnd(-[Names]))

这将产生一个介于
10000000
9999999
之间的随机数。您可以使用我文章中的函数RandomRowNumber:

包括一个演示供下载


代码也可以在GitHub上找到。:

“我按照您的建议尝试了Rnd[(数字)],但它不起作用。”您使用了什么代码,收到了什么错误?按照建议,您应该对提供给
Rnd
函数的数值参数求反,以使给定种子返回相同的随机数。因此,您的代码将变成如下内容:
Rnd([Names])
(假设
[Names]
是数字数据)。@RebaCat这是因为
-[Names]+11111111
可能会产生一个正数(取决于
Names
字段的大小),因此,您不再向
Rnd
函数传递负数。我已经更新了上面的答案来帮助你。非常欢迎你!如果我的答案充分回答了您的问题,请将答案标记为解决方案(如果您觉得合适,也请进行投票),以便其他浏览该网站的人可以看到该问题已解决。如果不确定如何执行此操作,请参阅。谢谢
' Builds random row numbers in a select, append, or create query
' with the option of a initial automatic reset.
'
' 2018-09-11. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function RandomRowNumber( _
    ByVal Key As String, _
    Optional Reset As Boolean) _
    As Single

    ' Error codes.
    ' This key is already associated with an element of this collection.
    Const KeyIsInUse        As Long = 457

    Static Keys             As New Collection

    On Error GoTo Err_RandomRowNumber

    If Reset = True Then
        Set Keys = Nothing
    Else
        Keys.Add Rnd(-Timer * Keys.Count), Key
    End If

    RandomRowNumber = Keys(Key)

Exit_RandomRowNumber:
    Exit Function

Err_RandomRowNumber:
    Select Case Err
        Case KeyIsInUse
            ' Key is present.
            Resume Next
        Case Else
            ' Some other error.
            Resume Exit_RandomRowNumber
    End Select

End Function