微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS Access VBA 中的传递查询中的连接字符串无效

如何解决MS Access VBA 中的传递查询中的连接字符串无效

我尝试使用传递查询从 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:传递查询中的连接字符串无效。连接字符串有问题吗?

谢谢

解决方法

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

只需使用功能区中的外部数据 - 并将表链接到 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-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-05-10')"
End With

docmd.OpenReport "rptCustomerProjects",acViewPreview

其实上面可以这样写:

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。