我有一个添加新用户的表单。我正在尝试自动生成用户名,该用户名必须是唯一的。我有一个函数checkUsername,它接受传递的字符串并检查db表以查看该用户名是否存在。如果用户名存在则返回false,否则返回true。
我要做的是如果用户名已经存在,那么在末尾添加一个数字并再次检查。我想继续循环,直到找到unqiue用户名。下面是我在下面循环的尝试,但是它已经存在的返回用户名。此外,我更喜欢它增加数字,而不是只是添加到最后。目前,模式最终为username1,username12,username123。
'Generate username
Dim Username As String
Username = generateUsername(LCase(Left(FirstName, 1) & LastName))
Function generateUsername(Username As String) As String
Dim i As Integer
i = 1
Do While checkUsername(Username)
If checkUsername(Username) Then
Exit Do
Else
Username = Username & i
i = i + 1
End If
Loop
generateUsername = Username
End Function
答案 0 :(得分:3)
我会做的是,当用户名已经存在时(请参阅Andre的答案,代码将以不同的方式实现此目的):
这将解决您的命名问题。
对于寻找唯一名称的问题,在我们看到“checkUsername”函数的代码之前,没有人能够提供帮助。首先确保该函数返回您期望的值。我怀疑问题就在那里。
编辑:
我也不明白为什么循环中有“If / Else”语句。你已经确定这是真的。请参阅下面的简化版本(再次,假设我的代码适用于VB ...我通常在C#中执行此操作):
Do While Not checkUsername(NewName)
NewName = Username & i
i = i + 1
Loop
答案 1 :(得分:2)
如果用户名存在,我假设checkUsername()
返回true?
然后您的If
条件有误 - 如果不存在,您想要退出。
如果你使用两个变量,你的循环会变得更清晰:
Function generateUsername(origUsername As String) As String
Dim i As Integer
Dim Username As String
i = 1
Username = origUsername
Do While checkUsername(Username)
' If Not checkUsername(Username) Then
' Exit Do
' Else
Username = origUsername & i
i = i + 1
' End If
Loop
generateUsername = Username
End Function
编辑:正如Joel所指出的,循环中的额外checkUsername()
是不需要的。由于它可能涉及DLookup
或类似,它实际上对性能有害
我在上面评论过它。
答案 2 :(得分:1)
抱歉,这是更正后的版本!
将代码改为:
Dim Username As String
Username = generateUsername(LCase(Left(FirstName, 1) & LastName))
Function generateUsername(Username As String) As String
Dim NewName as String
Dim i As Integer
i = 1
NewName = Username
Do While checkUsername(NewName)
If checkUsername(NewName) Then
Exit Do
Else
NewName = Username & i
i = i + 1
End If
Loop
generateUsername = NewName
End Function