检索具有字母数字格式的自动编号 ID

Posted

技术标签:

【中文标题】检索具有字母数字格式的自动编号 ID【英文标题】:Retrieving an AutoNumber ID that has an alphanumeric format 【发布时间】:2015-02-07 18:01:57 【问题描述】:

如何检索属于自动编号且已指定字母数字 Format(例如“ER001”)的 ID 字段?

我将 Access 用于后端和 VB 2010。

到目前为止,我的代码只返回 ID 列的最后一个数字,例如 1 而不是 ER001

Dim SQL As String = "SELECT ID FROM ReqItemList WHERE ReqItem = " & inputin & " "

【问题讨论】:

你能解释一下表ReqItemList的结构吗?您要搜索的值存储在哪一列? 该表基本上有 3 列 ID(自动编号数据类型字母数字格式)、ReqItem(文本数据类型)和 DateReq(文本数据类型)。我正在尝试使用我的 ReqItem 作为 WHERE 来检索 ID。 从 ReqItemList 中选择 ID WHERE ReqItem = ... @Ray 抱歉,伙计,这是我做同样输出的第一件事,不过感谢您的回复。 【参考方案1】:

我认为这里的混淆是因为自动编号字段“具有字母数字格式”。如果表格设计是这样的

然后,ID 字段的Format 属性"ER"000 将使其在Access 表单和数据表视图中显示为ER001

但是,在设计视图(第一个屏幕截图)中,请注意该字段仍然是 AutoNumber 字段,其“字段大小”为 Long Integer。值本身只是数字;它们只是在 Access 用户界面中格式化为字母数字。

因此,您在 VB.NET 应用程序中看到的行为是“正常的”。如果你运行查询

Dim SQL As String = "SELECT ID FROM ReqItemList WHERE ReqItem=?"
Using cmd = New OleDbCommand(SQL, con)
    cmd.Parameters.Add("?", OleDbType.VarWChar).Value = "foo"
    Dim rtn = cmd.ExecuteScalar()
End Using

然后您将获得整数值1,而不是字符串值"ER001"。如果您想让值在您的 VB.NET 表单中显示为ER001,您需要在您的 VB.NET 代码中应用该格式。

同样,如果您想按 ID 搜索,则必须提供未格式化的数值。那就是

Dim SQL As String = "SELECT ReqItem FROM ReqItemList WHERE ID=?"
Using cmd = New OleDbCommand(SQL, con)
    cmd.Parameters.Add("?", OleDbType.Integer).Value = 1
    Dim rtn As String = cmd.ExecuteScalar()
End Using

将返回foo,而

Dim SQL As String = "SELECT ReqItem FROM ReqItemList WHERE ID=?"
Using cmd = New OleDbCommand(SQL, con)
    cmd.Parameters.Add("?", OleDbType.VarWChar).Value = "ER001"
    Dim rtn As String = cmd.ExecuteScalar()
End Using

将因“条件表达式中的数据类型不匹配”而失败,因为 ID 实际上是一个数字,而不是文本值。

【讨论】:

感谢大家的回复终于明白我做错了什么 如果这个答案帮助你解决了你的问题,那么请阅读这个How does accepting an answer work?

以上是关于检索具有字母数字格式的自动编号 ID的主要内容,如果未能解决你的问题,请参考以下文章

表的自定义自动编号 ID?

在带有数字的列表中查找具有字母优先级的第一项

excel单元格编号有字母有数字怎么让后面的数字增加,

Last_insert_id 为带有字母和数字的自动递增列返回 0

oracle 表中如何对按含有字母和数字的编号来进行排序

验证具有前两位数字和一个字母的字段