查询在 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 代码的主要内容,如果未能解决你的问题,请参考以下文章

关系数据库域关系演算语言QBE

VBA 中是不是有针对没有结果的 sql 查询的解决方法?

扩展Spring Data QBE支持范围查询

访问 VBA。检测记录集条目是不是会溢出

VBA 开发从数据库中查询数据,怎样返回一个数组?

访问 VBA 以表格格式将查询结果发送到 Outlook 电子邮件