检索具有字母数字格式的AutoNumber ID

时间:2015-02-07 18:01:57

标签: sql vb.net ms-access

如何检索属于自动编号的ID字段并且已获得字母数字Format,例如'ER001'?

我正在使用Access for backend和VB 2010。

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

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

1 个答案:

答案 0 :(得分:3)

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

DesignView.png

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

DatasheetView.png

但是,在设计视图(第一个屏幕截图)中,请注意该字段仍为自动数字字段,其“字段大小”为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实际上是一个数字,而不是文本值。