查询在 QBE 中返回结果,但不是通过 VBA 代码
Posted
技术标签:
【中文标题】查询在 QBE 中返回结果,但不是通过 VBA 代码【英文标题】:Query returns results in QBE, but not via VBA code 【发布时间】:2015-03-06 20:47:00 【问题描述】:在 Access 2010 中针对 Access DB 工作时,我在 QBE 中创建了一个查询。作为过于复杂的季度报告流程的一部分,我现在需要能够通过 VBA 代码使用不同的参数执行该查询。查询的 SQL 现在嵌入在我的 VBA 模块中,并在运行中进行修改,然后执行。在 QBE 中运行时,此查询的特定实例返回 400 多行数据,但在 VBA 中通过以下代码执行时没有返回任何数据:
Dim Data As New ADODB.Recordset
Dim SQLString As String
SQLString = "SELECT PatientStatSchedDataDump.PtCompID, AppType.ProviderW, " & _
"PatientStatSchedDataDump.Date, PatientStatSchedDataDump.Status " & _
"FROM (AppType INNER JOIN PatientStatSchedDataDump ON AppType.AType = " & _
"PatientStatSchedDataDump.Type) LEFT JOIN GroupType ON AppType.Group = " & _
"GroupType.Group " & _
"WHERE (((PatientStatSchedDataDump.PtCompID) Like 'ClientName*' ) " & _
"AND ((PatientStatSchedDataDump.Date) BETWEEN #1/1/2014# AND #3/31/2014#) " & _
"AND ((GroupType.[Sort Order]) IN ('A', 'B', 'C', 'D', 'E')))"
Data.Open Source:=SQLString, ActiveConnection:=CurrentProject.Connection
If Not Data.EOF And Not Data.BOF Then
'the IF is never true - EOF & BOF are always True
NewSheet.Cells(InstCountRow + InstCount + 2, 1).CopyFromRecordset Data
End If
Data.Close
Set Data = Nothing
同样,如果我在 Access 中创建一个新查询,将 SQL 代码粘贴到 SQL 窗口并运行它,我会通过这个精确查询获得 400 多行结果
【问题讨论】:
【参考方案1】:从 ADO 运行的查询需要 ANSI 通配符:%
而不是 *
;和_
而不是?
。
所以改变这个...
"WHERE (((PatientStatSchedDataDump.PtCompID) Like 'ClientName*' ) "
到这个...
"WHERE (((PatientStatSchedDataDump.PtCompID) Like 'ClientName%' ) "
如果您想要一个在 ADO 中运行时与在 QBE 中运行时相同的查询,您可以使用 ALike
而不是 Like
。使用ALike
,db 引擎总是需要 ANSI 通配符。
"WHERE (((PatientStatSchedDataDump.PtCompID) ALike 'ClientName%' ) "
【讨论】:
facepalm 谢谢。这是一个非常漫长的一周。此外,我们将在不久的将来迁移到 MS SQL Server,所以我会坚持使用Like
,但知道ALike
很好,也谢谢你。以上是关于查询在 QBE 中返回结果,但不是通过 VBA 代码的主要内容,如果未能解决你的问题,请参考以下文章