【问题标题】:Editing & Running an SQL Query in an Access database from Excel VBA从 Excel VBA 在 Access 数据库中编辑和运行 SQL 查询
【发布时间】:2017-11-14 17:15:00
【问题描述】:

我正在尝试编写一个 Excel VBA 宏来运行基于电子表格中的变量的查询。现有数据一半在网络上的大型数据库(MS Access)中。

由于某种原因,当我的代码运行时,没有任何内容被粘贴回我的电子表格。你能明白为什么会这样吗:

Sub test()

    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim ConnectionString As String
    Dim StrQuery As String


    ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=\\network\data07\version6.mdb;"

    cnn.Open ConnectionString
    cnn.CommandTimeout = 900

    StrQuery = "SELECT dbo_vwData_SelectAll.BusinessDate, , dbo_vwData_SelectAll.Flowdate, dbo_vwData_SelectAll.Bucket FROM dbo_vwData_SelectAll WHERE (((dbo_vwData_SelectAll.Line)=""1.1.1.4"") AND ((dbo_vwData_SelectAll.ReferenceID) Like ""rent*"");"

    rst.Open StrQuery, cnn

    Sheets("Sheet2").Range("A2").CopyFromRecordset rst

End Sub

以上是一个测试 - 我将根据电子表格中的字符串为其他变量更改 "rent*"

提前致谢。

【问题讨论】:

  • 你设置断点看看rst里面有什么吗?获取生成的查询并直接在 Access 数据库上运行,以验证查询是否有效以及您应该获取哪些数据。
  • 你确认你的'rst'实际上返回了行吗?即是检索问题还是粘贴问题?
  • 两个连续的逗号表示语法错误。
  • 进一步说明 Dan 的观点,也许检查连接上的 Errors 集合。
  • 最好在查询中的常量值周围使用单引号,就像在列名周围使用双引号一样。

标签: sql excel vba ms-access


【解决方案1】:

盗用LIKE 运算符是MS Access SQL 方言中的一个已知问题。使用 MSAccess.exe GUI 程序时,LIKE 使用星号通配符 *。但是,通过 ODBC 使用 MS Access 作为后端数据库,就像使用 Excel 一样,LIKE 使用 ANSI 通配符%。请参阅Access wildcard character reference 上的 MS Office 支持文档。

因此,考虑以下调整,包括使用单引号:

SELECT dbo_vwData_SelectAll.BusinessDate,
       dbo_vwData_SelectAll.Flowdate, dbo_vwData_SelectAll.Bucket 

FROM dbo_vwData_SelectAll

WHERE (((dbo_vwData_SelectAll.Line)='1.1.1.4') 
  AND  ((dbo_vwData_SelectAll.ReferenceID) LIKE 'rent%');

要在前端或后端接口中保持一致,请考虑ALIKE 运算符:

AND  ((dbo_vwData_SelectAll.ReferenceID) ALIKE 'rent%');

【讨论】:

  • 完美。那是它绊倒的地方。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 2014-08-17
  • 2023-03-03
  • 2018-06-14
  • 1970-01-01
相关资源
最近更新 更多