首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS Access VBA传递查询中的连接字符串无效

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

Stack Overflow用户
提问于 2021-03-14 08:55:37
回答 1查看 126关注 0票数 0

我尝试使用直通查询从MS Access VBA调用mysql存储过程。代码如下:

代码语言:javascript
复制
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:直通查询中连接字符串无效。连接字符串有什么问题吗?

thx

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-14 13:18:22

好吧,有一个办法可以解决这个问题吗?

只需使用功能区中的外部数据,然后将表从access链接到MySQL即可。让它工作起来--一旦你这样做了?

然后在你的代码中这样做:

代码语言:javascript
复制
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查询-设置正确的连接。然后,您可以在代码中执行此操作:

代码语言:javascript
复制
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

注意我们是如何避免创建查询定义的。注意我们如何一遍又一遍地使用单点查询。

更好的是,假设您想要将该存储过程用于报告?我们将以"MyPTQuery“作为报告的基础

然后执行以下操作:

代码语言:javascript
复制
With Currentdb.tableDefs("MyPTQuery")
   .SQL = "CALL MyStoredProcedure('10777','2021-04-03','2021-05-10')"
End With

docmd.OpenReport "rptCustomerProjects", acViewPreview

实际上,你可以这样写上面的代码:

代码语言:javascript
复制
Currentdb.tableDefs("MyPTQuery").SQL = "CALL MyStoredProcedure('10777','2021-04-03','2021-05-10')"
docmd.OpenReport "rptCustomerProjects", acViewPreview

因此,我强烈建议您将连接字符串保存在PT查询中。这样,你的代码就不会有乱七八糟的连接字符串了--这样的连接现在已经从你的代码中“移出”了--你可以很容易地改变整个数据库的连接,而不需要改变任何代码。

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

不考虑上面的内容?让一个链接表正常工作--然后按照上面的第一个例子,从链接表中“窃取”已知的连接,并将其放入PT查询的连接中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66620064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档