【发布时间】:2019-04-10 09:00:18
【问题描述】:
我有一个表格,其中包含产品的详细信息。我希望能够生成包含特殊字符的自动 ID
我已经能够编写生成自动 ID 并添加新 ID 的代码。但是当它到达第 10 和第 11 条记录时,问题就出现了。
似乎将第 9 条记录视为数据库中的 MAX。
这会引发重复的错误。 例如,记录 9 生成 CAT009,记录 10 生成 CAT0010 而是生成记录 11 为 CAT0011,由于我在 SELECT 语句中使用了 MAX 函数,它似乎一直在生成 CAT0010。
Sub auto()
Try
Dim cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\inventory1.accdb")
cn.Open()
Dim dr As OleDbDataReader
Dim cmddr As New OleDbCommand
cmddr.CommandText = "SELECT MAX(category_id) as max_id FROM tblcategory "
cmddr.Connection = cn
dr = cmddr.ExecuteReader
dr.Read()
If IsDBNull(dr("max_id")) Then
autonumber = "CAT00" & 1
Else
Dim str As String
str = dr.Item("max_id").ToString()
Dim P As Double
Dim N As Double
N = Len(str)
P = N - 5
autonumber = "CAT00" & Convert.ToInt32(str.Substring(5, P))+ 1
End If
cn.Close()
Catch Ex As Exception
MsgBox(Ex.Message)
Console.WriteLine(Ex.Message)
End Try
End Sub
【问题讨论】:
-
category_id 是一个字符串? Max 在数字上的工作更符合逻辑。
-
代码生成 string 值,这些值将作为 strings 而不是根据数值进行比较。
CAT009总是排序/最后与CAT0010或CAT0011或CAT00123423432比较,因为它逐个字符进行比较。 (您称这些为“自动编号”,但它们肯定不是自动编号,因为您必须手动分配它们。Access 已经具有自动编号列功能。如果需要,真正的自动编号可以格式化使用“CAT001”等前缀字符进行演示,同时让数据库适当地管理实际数字。) -
那是因为 CAT0010 应该是 CAT010。这也将您的唯一条目限制为仅 999 个条目。如果您只存储一个自动递增数字并在屏幕上正确格式化该数字,会更容易。
-
@LarsTech,category_id 是一个字符串。
-
@C Perkins,如果我在access中格式化,引用数据库只会识别数字而不识别格式化字符CAT00。我希望能够通过使用字段 category_id 的代码引用数据库中的特定记录