MS Access Visual Basic - генерировать случайную строку в текстовом поле

У нас есть это старое программное обеспечение (сделанное одним из первых сотрудников много лет назад) в компании, которая использует Microsoft Access для запуска. Босс попросил меня добавить случайное построение строки в конкретное текстовое поле при щелчке, но я не знаю, как это сделать. У меня нет опыта программирования Microsoft Access, поэтому я прошу вас помочь.

Мне удалось создать кнопку и текстовое поле. Вот где он останавливается. Мне также удалось получить доступ к коду для действия кнопки:

Private Sub command133_Click()

End Sub

Ответ 1

Это один из способов, который будет работать в Access VBA (который является более старым, чем vb.net). Он будет генерировать строку с буквами и цифрами.

Sub test()

    Dim s As String * 8 'fixed length string with 8 characters
    Dim n As Integer
    Dim ch As Integer 'the character
    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

    Debug.Print s

End Sub

Ответ 2

Попробуйте эту функцию:

Public Function GetRandomString(ByVal iLength As Integer) As String
    Dim sResult As String = ""
    Dim rdm As New Random()

    For i As Integer = 1 To iLength
        sResult &= ChrW(rdm.Next(32, 126))
    Next

    Return sResult
End Function

Ответ 3

Работая над кодом @Bathsheba, я сделал это. Он сгенерирует случайную строку с количеством символов, которое вы хотите.

Код:

Public Function GenerateUniqueSequence(numberOfCharacters As Integer) As String

    Dim random As String  ' * 8 'fixed length string with 8 characters
    Dim j As Integer
    Dim ch As Integer   ' each character

    random = ""

    For j = 1 To numberOfCharacters
        random = random & GenerateRandomAlphaNumericCharacter
    Next

    GenerateUniqueSequence = random

End Function

Public Function GenerateRandomAlphaNumericCharacter() As String

    'Numbers : 48 is '0', 57  is '9'
    'LETTERS : 65 is 'A', 90  is 'Z'
    'letters : 97 is 'a', 122 is 'z'

    GenerateRandomAlphaNumericCharacter = ""

    Dim i As Integer

    Randomize
    i = (Rnd() * 2) + 1 'One chance out of 3 to choose one of 3 catégories

    Randomize
    Select Case i
        Case 1 'Numbers
            GenerateRandomAlphaNumericCharacter = Chr(Rnd() * 9 + 48)
        Case 2 'LETTERS
            GenerateRandomAlphaNumericCharacter = Chr(Rnd() * 25 + 65)
        Case 3 'letters
            GenerateRandomAlphaNumericCharacter = Chr(Rnd() * 25 + 97)
    End Select

End Function

Я использую его со случайным количеством символов, например так:

'Generates random Session ID between 15 and 30 alphanumeric characters
SessionID = GenerateUniqueSequence(Rnd * 15 + 15)

Результат:

s8a8qWOmoDvC4jKRjPr5hOY12u 26
TB24qZ4cNfr6EdyY0J 18
6LZRQ9P5WHLNd71LIdqJ 20
KPN0RmlhhJKnVzPTkW 18
R2pNOKWJMKl9KpSoIV2egUNTEb1QC2 30
X8jHuupP6SvEI8Dt2wJi 20

ПРИМЕЧАНИЕ: это все еще не полностью случайно. Это даст большее число чисел, чем обычно, так как приблизительно 1/3 всех сгенерированных символов будут числами.

Обычно распределение будет выглядеть так: 10 цифр плюс 26 строчных букв плюс 26 прописных букв = 62 возможных символа. Числа обычно будут 10/62 части строки или 1/6,2
С кодом я = (Rnd() * 2) + 1 'Один из трех шансов выбрать одну из 3 категорий: число увеличивается до 1/3 (в среднем).

Вероятно, не так уж много беспокойства - если вы не пытаетесь победить АНБ, а затем значительно снизили свой диапазон.