VBA SQL 表达式中的类型不匹配

Type Mismatch in VBA SQL expression

我已经离开 Access 多年了,但我一直负责一个小型数据库功能。我需要做的是根据下拉结果创建一个查询,然后打开该查询,以便最终用户可以 copy/paste 他们想要的内容(或整个结果集)。

我的代码如下所示:

Private Sub btnSubmit_Click()
Dim X As String
Dim Y As String
Dim sSQL As String
Dim MyRs As Recordset

If IsNull(cboReportName.Value) Or IsNull(cboError.Value) Or cboReportName.Value = "" Or cboError.Value = "" Then
  MsgBox "One or more of your selections is empty."
  Exit Sub
End If

X = cboReportName.Column(2)
Y = cboError.Column(1)
sSQL = "Select * from " & X & " where Error = '" & Y & "'"

Set MyRs = CurrentDb.OpenRecordset(sSQL)

End Sub

我在 Set MyRS 行上收到一个错误,它告诉我类型不匹配。这与 Access 使用短文本和长文本的方式有关吗?查询中有 NULL 结果,这会把它扔掉吗?任何想法表示赞赏。

您从查询中得到 VBA 类型不匹配错误的可能性很小,因为即使 [Error] 列不是文本,在与字符串进行比较时也只是 return false价值。 (这并不是要贬低 Erik 关于导致错误的多个查询级别的评论......在那里,处理了这个问题,我相信如果我的回答没有帮助,这仍然可能是一个原因。)

您更有可能引用了一个 ADO 库(来自 VBA window 菜单 Tools | References...)并将其置于优先级在默认的 Access 数据对象库之上。这将导致 Dim MyRs As Recordset 将其解释为 ADO 记录集,但 CurrentDb.OpenRecordset(sSQL) 将 return 解释为 DAO.Recordset.

将声明更新为

Dim MyRs As DAO.Recordset

或者在工具|中更改ADO库的优先顺序参考文献... 列表。