【问题标题】:EXCEL VBA - SQL String not returning data from AccessEXCEL VBA - SQL 字符串不从 Access 返回数据
【发布时间】:2017-03-10 20:47:53
【问题描述】:

我正在使用 Excel 根据 Access 中存储的数据生成报告。我 ping 一个特定查询以根据单元格的值返回完整的数据集。我有 3 个其他相同类型的模块从另一个可以完美运行的查询中获取数据。下面让我很头疼,因为它没有返回任何记录。当我进入访问并使用相同的 SQL 字符串创建一个虚拟查询时,Access 将按预期返回记录。任何人都可以帮忙吗?谢谢,

    Sub fc_GetPLP()
    Dim Z_Connection As Object
    Dim Z_Recordset As Object
    Dim Z_OnlineOD As String
    Z_OnlineOD = Sheet2.Range("F6").Value

    Dim Z_Access_Path As String
    Dim Z_Access_File As String
    Z_Access_Path = Sheet2.Range("C2").Value
    Z_Access_File = Sheet2.Range("C3").Value

    Set Z_Connection = CreateObject("ADODB.Connection")
    Z_Connection.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Z_Access_Path & Z_Access_File

    Set Z_Recordset = CreateObject("ADODB.RECORDSET")
    Z_Recordset.activeconnection = Z_Connection

    Z_SQL = "SELECT Q_SPA_Pricing.* FROM Q_SPA_Pricing WHERE (Q_SPA_Pricing.Qf_FAR_OD='" & Z_OnlineOD & "')"
Debug.Print Z_SQL

    Z_Recordset.Open Z_SQL

Debug.Print Z_Recordset.EOF

    Sheet4.Columns("B:H").Clear
    Sheet4.Range("B2").CopyFromRecordset Z_Recordset

    Z_Recordset.Close
    Z_Connection.Close
    Set Z_Connection = Nothing
End Sub

比如我刚才返回的SQL是:

SELECT Q_SPA_Pricing.* FROM Q_SPA_Pricing WHERE (Q_SPA_Pricing.Qf_FAR_OD='PAR-SIN')

正如预期的那样,但仅在 Access 中。 Excel 返回一个空的记录集。

谢谢,

弗雷德

【问题讨论】:

  • Debug.Print Z_SQL 是否打印预期的 SQL 语句?
  • 是的。当我将此 SQL 语句复制到 access 中时,我得到了预期的结果。

标签: sql excel vba ms-access


【解决方案1】:

试试下面的代码

Sub fc_GetPLP()
    Dim Z_Connection As Object
    Dim Z_Recordset As Object
    Dim Z_OnlineOD As String
    Z_OnlineOD = Sheet2.Range("F6").Value

    Dim Z_Access_Path As String
    Dim Z_Access_File As String
    Z_Access_Path = Sheet2.Range("C2").Value
    Z_Access_File = Sheet2.Range("C3").Value

    Set Z_Connection = CreateObject("ADODB.Connection")
    Z_Connection.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Z_Access_Path & Z_Access_File

    Set Z_Recordset = CreateObject("ADODB.RECORDSET")
    Z_Recordset.activeconnection = Z_Connection

    Z_SQL = "SELECT Q_SPA_Pricing.* FROM Q_SPA_Pricing WHERE (Q_SPA_Pricing.Qf_FAR_OD='" & Z_OnlineOD & "')"
Debug.Print Z_SQL

    Z_Recordset.Open Z_SQL

'Debug.Print Z_Recordset.EOF
    If Z_Recordset.EOF = False Then
        Sheet4.Columns("B:H").Clear
        Sheet4.Range("B2").CopyFromRecordset Z_Recordset
    End If    

    Z_Recordset.Close
    Z_Connection.Close
    Set Z_Connection = Nothing
End Sub

【讨论】:

  • 嗨,不幸的是我得到了同样的结果。 Z_Recordset.EOF 始终返回 True。我会继续寻找。谢谢
  • 有趣的是,我尝试使用新连接直接从 Access 导入数据。即使这样也不会返回任何东西......???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多