我正在与一个真正困扰我的VBA非交互问题作斗争:我有一个对mysql数据库的传递查询,如果用户双击,这个查询就能正常工作。但如果不首先进行交互,则从VBA自动化会话(从excel调用)调用它就会失败。最奇怪的是:在GUI上单击VBA一段时间后,它就可以工作了(odbc连接超时可能)。
传递查询在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访问表中?
环境:Win8 8-64 Win8,Office2013,mysql-odbd-5.2w
发布于 2012-12-13 08:56:37
我认为问题的出现是因为您将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编写的,但是应该很容易转换到office的更高版本。
https://stackoverflow.com/questions/13788880
复制相似问题