2014-03-25 142 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