2014-03-25 99 views
3

我們在使用Microsoft Access運行的公司中擁有舊的軟件(由多年前的第一批員工之一製作)。老闆讓我在點擊的特定文本框中添加隨機字符串生成,但我不知道如何做到這一點。我沒有任何Microsoft Access編程經驗,這就是爲什麼我要求你幫忙。MS Access Visual Basic - 在文本字段中生成隨機字符串

到目前爲止,我設法創建了按鈕和文本字段。那就是停止的地方。我也設法訪問代碼的按鈕動作:

Private Sub command133_Click() 

End Sub 
+0

@Bathsheba字母和數字,可以說8個字符長 – devbull

+0

你要大寫和小寫字母?我給出的答案只適用於大寫字母。 – Bathsheba

+0

@Bathsheba是的,也是小寫字母+數字,如果它不是太多的工作:) – devbull

回答

7

這是一種方式,將在訪問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 
+0

+1,作爲替代,我將使用額外的rand值來確定從哪個範圍生成'ch'。想法是從這裏:http://stackoverflow.com/questions/22506271/randbetween1-11-but-not-6/22506324#22506324 –

+0

嗨@Bathsheba,只是一個反饋。我在Excel中測試您的代碼的隨機字符串長度爲13個字符。在100萬行中,excel創建了13,826個重複字符串,剩下的只有986,174個唯一字符串。在大多數情況下它可能是獨一無二的,但我認爲Rnd()函數存在缺陷。從理論上講,隨機選擇62個字符和數字(0-9 a-z A-Z)組中的13個字符和數字,應該有超過83億個唯一選擇。因此,100萬條記錄中的14k個重複記錄非常重要。儘管?謝謝你的代碼。 –

+0

獨特的隨機是一個完全不同的要求。你是對的,Rnd()的*週期*非常小。 – Bathsheba

1

試試這個功能:

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 
+0

Q關於_訪問VBA_,但不是_VB.NET_ –

+1

是的,但是在提交這個答案後,標籤被編輯了*。它*會*在vb.net中工作,所以+1。 – Bathsheba

0

Workin on @Bathsheba code,I did this。它會生成一個隨機字符串,其中包含您想要的字符數。

代碼:

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
6LZRQ9P5WHLNd71L IdqJ 20
KPN0RmlhhJKnVzPTkW 18
R2pNOKWJMKl9KpSoIV2egUNTEb1QC2 30
X8jHuupP6SvEI8Dt2wJi 20