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

3

如何检索一个自动编号并已经赋予字母数字格式的ID字段,例如'ER001'?

我正在使用Access作为后端和VB 2010。

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

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

你能解释一下ReqItemList表的结构吗?你要查找的值存储在哪一列中? - Steve
这个表格基本上有三列,ID(自动编号数据类型字母数字格式)、ReqItem(文本数据类型)和DateReq(文本数据类型)。我正在尝试使用我的ReqItem作为WHERE条件来检索ID。 - Terrence McGinnis
SELECT ID FROM ReqItemList WHERE ReqItem = ... 从ReqItemList中选择ID,其中ReqItem = ... - Ray
@Ray 抱歉伙计,那是我做的第一件事情,输出结果相同,不过还是谢谢你的回复。 - Terrence McGinnis
1个回答

3
我认为这里的混淆是因为自动编号字段“具有字母数字格式”。如果表设计看起来像这样: 然后ID字段的“Format”属性“ER”000将导致它在Access表单和数据表视图中显示为类似于ER001的内容。
但是,在设计视图中(第一个截屏),请注意该字段仍然是自动编号字段,其“字段大小”为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实际上是数字而不是文本值,因此"数据类型在条件表达式中不匹配"将导致失败。


谢谢大家的回复,我终于明白我做错了什么了。 - Terrence McGinnis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接