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库的优先顺序参考文献... 列表。
我已经离开 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库的优先顺序参考文献... 列表。