ms-access - 运行时错误 3464 : Data Type Mismatch in criteria expression

标签 ms-access vba ms-access-2010

我在 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.Recordsetaipid_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/

相关文章:

excel - 如何在 VBA 中过滤 '' ő'' 字符?

memory - Excel 2007 工作簿名称大小限制是多少?为什么?

vba - 如何以编程方式添加对 VBA 项目的引用?

ms-access - 添加可信位置以 Access 运行时

在 MS Access 中使用的 SQLite 数据类型

c# - 无法识别的数据库格式

vba - 如何以 PDF 格式输出报告,其中名称由字段中的值组成?

ms-access - 微软 Access : Delete all records if at least once a condition occurs

asp.net - 列出未使用的 ID

database - MS Access 数据库 - reshape 流程挖掘表