我在 Access 2010 中有一个表单,其中有两个文本框(AIPIDTxt 用于输入搜索条件,AIPResultTxt 用于显示结果)和一个按钮(搜索按钮)。我在 Access 中还有一个表 Table1。当我单击“搜索”按钮时,我需要执行一个查询,其条件位于表单中的 AIPIDTxt 文本框中,将结果存储在记录集中,并将结果显示在文本框 AIPResultTxt 中。因此,我在按钮事件处理程序中输入了以下 VBA 代码。
Private Sub SearchB_Click()
Dim localConnection As ADODB.Connection
Dim query As String
Dim aipid_rs As ADODB.Recordset
Dim db As Database
Set db = CurrentDb
Set localConnection = CurrentProject.AccessConnection
MsgBox "Local Connection successful"
query = "SELECT [AIP Name] FROM [Table1] WHERE [AIP ID]=
" & [Forms]![AIPIDSearchF]![AIPIDTxt] & ""
Set aipid_rs = db.OpenRecordset(query)
Me.AIPResultTxt.Text = aipid_rs![AIP Name]
End Sub
但是,当我单击该按钮时,我会看到“本地连接成功”消息框,然后出现运行时错误 3464:
Set aipid_rs= db.OpenRecordset(query)
我已经搜索过类似的错误并进行了更正。但错误不断出现。我的查询有问题吗?无法找出错误。该表是本地表。所以我可以直接在vba中的查询中给出[Table1]和字段名称。尝试添加分隔符,因为这些字段是文本字段。但那效果并不好。我也无法给出以下查询:
query = "SELECT [AIP Name] FROM [Table1] WHERE [AIP ID]= " & [Forms]![AIPIDSearchF]!
[AIPIDTxt].Text & ""
这给了我一个运行时错误,指出无法从失去焦点的控件引用文本。我的标准是文本框中的文本。当我单击按钮时,文本框失去焦点。但是当我用谷歌搜索错误时,解决方案是删除“.Text”。所以,我最终得到了上面的查询。不知道线路出了什么问题:
Set aipid_rs= db.OpenRecordset(query)
最佳答案
我怀疑您的代码存在不止一个问题。但 Access 仅提示它发现的第一个问题。再看看这两行...
Dim aipid_rs As ADODB.Recordset
Set aipid_rs = db.OpenRecordset(query)
OpenRecordset
是一个返回 DAO 记录集的 DAO 方法。但代码尝试将其分配给被声明为As ADODB.Recordset
的aipid_rs
。这些记录集类型不兼容。
有一个 ADO 连接对象变量 localConnection,以后不会再使用它。虽然它不会触发错误,但它只是没有用。实际上,我认为没有任何理由使用 ADO 中的任何内容来完成此任务。
我建议您尝试这个版本的代码...
'Dim localConnection As ADODB.Connection
'Dim query As String ' query is a reserved word
Dim strQuery As String
'Dim aipid_rs As ADODB.Recordset
Dim aipid_rs As DAO.Recordset
Dim db As Database
Set db = CurrentDb
'Set localConnection = CurrentProject.AccessConnection
'MsgBox "Local Connection successful"
' you said [AIP ID] is text type, so include quotes around
' the text box value
strQuery = "SELECT [AIP Name] FROM [Table1] WHERE [AIP ID]= '" & _
[Forms]![AIPIDSearchF]![AIPIDTxt] & "'"
Debug.Print strQuery
DoCmd.RunCommand acCmdDebugWindow
Set aipid_rs = db.OpenRecordset(strQuery)
'Me.AIPResultTxt.Text = aipid_rs![AIP Name] ' .Text property is only
' available when control has focus; it will trigger
' an error at any other time
Me.AIPResultTxt.Value = aipid_rs![AIP Name]
注意Debug.Print strQuery
将在立即窗口中显示SELECT
语句的文本,并且DoCmd.RunCommand acCmdDebugWindow
打开立即窗口 window 。如果查询仍然存在问题,请复制语句文本并将其粘贴到新查询的 SQL View 中进行测试。
最后,我很好奇这是否可以用更少的代码为您提供所需的内容......
Private Sub SearchB_Click()
Me.AIPResultTxt.Value = DLookup("[AIP Name]", "Table1", _
"[AIP ID]='" & Me.AIPIDTxt & "'")
End Sub
关于ms-access - 运行时错误 3464 : Data Type Mismatch in criteria expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22033553/