首页 > 解决方案 > 生成带前缀的自动 ID

问题描述

我正在为员工建立一个数据库,我需要增加员工 ID 并使用“US0001”之类的前缀

我尝试了一个提取最后两位数字并在其上加 1 以获得下一个员工 ID 的代码。但在第十一条记录中,它停止并说不能创建重复记录。

    'retrieving the user_id and adding a number to it.
    Dim dr As OleDbDataReader
    'Dim da As OleDbDataAdapter
    Dim intCount As Int16 = 0
    'cn.Open()
    Dim cmddr As New OleDbCommand
    cmddr.CommandText = "SELECT user_id FROM tblusers " & _
    "WHERE user_id=(SELECT MAX(user_id) FROM tblusers)"
    cmddr.Connection = cn
    dr = cmddr.ExecuteReader
    dr.Read()
    If dr.HasRows = True Then
        Dim str As String
        str = dr.Item("user_id")
        Dim lst2 As Integer
        lst2 = str.Substring(str.Length - 2)
        txt_user_id.Text = "U0" & lst2 + 1
    Else
        txt_user_id.Text = "U01"
    End If

    dr.Close()
    'cn.Close()

我希望使用前缀生成员工 ID,并且不形成重复

标签: vb.netms-access

解决方案


首先,您可以将 SQL 语句更改为:

select max(user_id) as max_id from tblusers

子句中不需要子查询where

当然,更改以下相应的行:

str = dr.Item("user_id")

至:

str = dr.Item("max_id")

其次,请注意您的代码逻辑将导致以下编号顺序:

U01
U02
U03
...
U09
U010
U011
...

这意味着当序列达到第十条记录时,max(user_id)将一直返回U09,直到序列达到U090

为了解决这个问题,您需要用前导零填充您的用户 ID,例如:

If dr.HasRows Then
    txt_user_id.Text = "US" & Right("000" & (Mid(dr.Item("max_id"), 3) + 1), 4)
Else
    txt_user_id.Text = "US0001"
End If

推荐阅读