【问题标题】:Invalid Connection String In Pass-Through Query In MS Access VBAMS Access VBA中的直通查询中的连接字符串无效
【发布时间】:2021-06-11 15:52:14
【问题描述】:

我尝试使用 Pass-Through 查询从 MS Access VBA 调用 mysql 存储过程。这是代码:

Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset
    Set qdf = CurrentDb.CreateQueryDef("")
    qdf.Connect = "DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER=localhost;PORT=3306;DATABASE=accounting_supp_db;User=xxx;Password=xxx;Option=3"
    qdf.SQL = "CALL MyStoredProcedure('10156','2021-03-03','2021-03-10')"
    qdf.ReturnsRecords = True
    Set rst = qdf.OpenRecordset
    
    rst.Close
    Set rst = Nothing
    Set qdf = Nothing

但它返回错误 3305: Invalid Connection String In Pass-Through Query。连接字符串有问题吗?

谢谢

【问题讨论】:

标签: mysql vba ms-access


【解决方案1】:

嗯,有一种方法可以解决这个问题吗?

只需使用功能区中的外部数据 - 并将表从访问权限链接到 MySQL。让它工作——一旦你做到了?

然后在您的代码中执行此操作:

dim rst  as DAO.RecordSet
With CurrentDB.queryDefs("MyPTQuery")
   .Connection = currentdb.tableDefs("The working linked table").Connection
   .SQL = "CALL MyStoreProc('10156','2021-03-03','2021-03-10')"
    set rst = .OpenRecordSet
End if

我想你可以添加到上面的.ReturnsRecords = True,然后再说一遍?

好吧,创建一个 PT 查询 - 正确设置连接。然后你可以在代码中做到这一点:

Dim rst1     as DAO.RecordSet
Dim rst2     as DAO.ReocrdSet

With Currentdb.tableDefs("MyPTQuery")
   .SQL = "CALL MyStoredProcedure('10156','2021-03-03','2021-03-10')"
    set rst1 = .OpenRecordSet
END with

With Currentdb.tableDefs("MyPTQuery")
   .SQL = "CALL MyStoredProcedure('10777','2021-04-03','2021-05-10')"
    set rst2 = .OpenRecordSet
End With

请注意我们如何不搞乱创建查询定义。并注意我们如何一遍又一遍地使用 ONE pt 查询。

而且它会变得更好 假设您想要报告的存储过程?报告基于“MyPTQuery”

然后这样做:

With Currentdb.tableDefs("MyPTQuery")
   .SQL = "CALL MyStoredProcedure('10777','2021-04-03','2021-05-10')"
End With

docmd.OpenReport "rptCustomerProjects", acViewPreview

其实上面可以这样写:

Currentdb.tableDefs("MyPTQuery").SQL = "CALL MyStoredProcedure('10777','2021-04-03','2021-05-10')"
docmd.OpenReport "rptCustomerProjects", acViewPreview

所以我非常建议您在 PT 查询中保存连接字符串。这样一来,您的代码就没有杂乱的连接字符串 - 而且这些连接现在已经“超出”了您的代码 - 您可以轻松更改整个数据库的连接 - 无需更改任何代码。

那么,当您运行您的表重新链接代码时?让该重新链接代码也更新任何 PT 查询。这样,您现在可以重新链接并将您的应用程序指向测试数据库、生产数据库或其他数据库。因此,代码中没有连接字符串是上述结果。

不管上面的?让链接表正常工作 - 然后使用该链接表中的“窃取”已知连接并将其推入 PT 查询的连接中,如上面的第一个示例所示。

【讨论】:

  • 感谢您的帮助!问题已经解决了。非常感谢艾伯特。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
相关资源
最近更新 更多