有人可以看一下这段代码并提供有关我做错了什么的提示吗?这段代码几乎是从一本参考书上摘下来的,作为一个关于如何使用 VBA ADO 对象的例子。这是代码:
Sub TestMyADODB()
Dim mySQL As String
Dim myConnection As DAO.Connection
Dim myRecordSet As DAO.Recordset
Set myConnection = CurrentProject.Connection ' Crash here
mySQL = mySQL & "UPDATE Amplifier "
mySQL = mySQL & "SET Amplifier.lngCategory = 405, Amplifier.lngSubType = 3 "
mySQL = mySQL & "WHERE (((Amplifier.lngPartIndex)=9))"
myRecordSet.OpenRecordset mySQL
Debug.Print "DONE"
myRecordSet.Close
Set myRecordSet = Nothing
Set myConnection = Nothing
此外,我尝试使用ADODB 对象,结果,编译器不允许该代码。我发现我需要添加对 MS dll 的引用,我这样做了,结果仍然相同。然后我开始从 VBA 收到一个错误,指出我不能使用现在“过时”的 DAO,我必须使用 ADO。剩下的是 10 个小时的宝贵时间,试图从网络上的多篇文章中揭开 ADO DAO 问题的神秘面纱。底线是,如果我使用 DAO,我的 Access 2007 就会崩溃,编译器将拒绝使用 ADO。我正在为这个问题而烦恼,我需要帮助!欣赏
PS:mySQL 字符串已经在 Access 查询中测试过并且功能正常。
你说代码是如何使用 ADO 的示例,但它引用了 DAO。DAO和ADO是微软的两个完全不同的数据访问库。ADO 是较新的一个。请不要混淆它们。
尝试以下操作:
在您的 Access Visual Basic IDE 中,单击工具| 参考资料。确保选择了Microsoft ActiveX 数据对象 2.8。取消选择提及 DAO、数据访问对象、ADO 或 ActiveX 数据对象的任何其他参考。如果您没有安装 2.8 版,请尝试安装最新版本。
现在,将您的 sub 修改为如下所示:
我将连接类型更改为 ADODB.Connection 以匹配所选库。我还删除了记录集对象,因为它仅用于 SELECT 查询。不返回行的查询可以直接在连接上执行。
这至少在我的机器上有效。