如何检索属于自动编号的ID字段并且已获得字母数字Format
,例如'ER001'?
我正在使用Access for backend和VB 2010。
到目前为止,我的代码只返回ID列的最后一个数字,例如1
而不是ER001
。
Dim SQL As String = "SELECT ID FROM ReqItemList WHERE ReqItem = " & inputin & " "
答案 0 :(得分: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实际上是一个数字,而不是文本值。