mysql在不进入交互式,如果不是交互式的,Microsoft Access VBA的mySQL查询会失败?

我正在与一个真正让我烦恼的VBA非交互式问题作斗争:我对mysql数据库有一个传递查询,如果用户双击它会很好.但如果从VBA自动化会话调用(从excel调用),如果先没有进行交互,则会失败.最奇怪的是:它在GUI上点击一段时间后可以在VBA上运行(可能是odbc mysql连接超时).

passthrough-query在DSN和连接字符串中有密码(用于解决商店的问题).链接表的行为是相同的.

调用的有问题的VBA代码如下所示:

CurrentProject.Connection.Execute "INSERT INTO [SomeLocalTable] (id) SELECT id FROM [somePassThroughOrLinkedMySQLTable]"

该错误是通用的odbc连接失败80004005.

虽然这种类型的查询始终有效:

Dim cnn As New ADODB.Connection

cnn.Open ("Driver=MySQL ODBC 5.2w Driver;SERVER=myserver;UID=user;DATABASE={db};PORT=3306;DFLT_BIGINT_BIND_STR=1;PWD=secret")

我可以像UI一样“初始化”直通查询以使其工作吗?或者我可以使用第二种类型的查询插入本地MS Access表吗?

环境:Win8-64bit,Office2013,mysql-odbc-5.2w

解决方法:

我认为问题正在发生,因为您将Access数据库称为外部ADODB数据源,而是使用Access实例以通过DAO运行查询.下面的示例子项创建一个不可见的Access实例并执行查询,然后在完成后退出.我在这个例子中使用了DAO版本3.6的后期绑定,因此您可能需要稍微修改该位或使用早期绑定:

Sub ExecPassThru()

Dim acApp As Object

Dim acDb As Object

Set acApp = CreateObject("Access.Application")

Set acDb = CreateObject("DAO.DBEngine.36") 'May need slight alteration

acApp.OpenCurrentDatabase ("C:\db1.mdb") 'Amend as required

Set acDb = acApp.CurrentDb

acDb.Execute "INSERT INTO [SomeLocalTable] (id) SELECT id FROM [somePassThroughOrLinkedMySQLTable]"

acDb.Close

acApp.Quit 2

End Sub

这是使用Excel 2003编码的,但应该很容易转换为更高版本的办公室.

标签:mysql,excel-vba,ms-access,odbc,access-vba

来源: https://codeday.me/bug/20190704/1372540.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值