【问题标题】:Excel automation error when running SQL update statement运行 SQL 更新语句时出现 Excel 自动化错误
【发布时间】:2014-05-04 20:15:19
【问题描述】:

我有以下代码用于更新 Access 数据库,但是当我运行宏时出现自动化错误。如果我执行SELECT 语句,它运行良好。我不需要从工作表中选择任何值来更新数据库。

Private Sub UpdateRecord()
ThisWorkbook.Activate
Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\temp\test.mdb"

strSql = "UPDATE table1 SET Name1='Test' WHERE Object_ID=2076;"

'strSql = "SELECT * FROM table1;"

cn.Open strConnection
Set rs = cn.Execute(strSql)

Worksheets("Sheet1").Select
Sheets("Sheet1").Range("A6").CopyFromRecordset rs

rs.Close
Set rs = Nothing

cn.Close
Set cn = Nothing

End Sub

【问题讨论】:

  • 以防万一,执行脚本的同时在MSAccess中打开数据库吗?默认情况下,MSAccess 会阻止数据库。我的意思是默认情况下它以独占模式打开。
  • @Naeel Maqsudov - 我在数据库关闭时尝试过,但仍然返回相同的错误。

标签: sql ms-access excel-2010


【解决方案1】:

很遗憾,我无法重复您的情况并使用 ADODB。我建议您使用原生 DAO 库来处理 MSJet (Access) 数据库。

Sub qwe()
  Dim dbe As New DAO.DBEngine
  Dim dbs As DAO.Database
  Dim rst As DAO.Recordset

  Set dbs = dbe.OpenDatabase("C:\Users\nmaksudov\Documents\Database2.accdb")
  dbs.Execute("UPDATE Table1 SET Field2='zzz' WHERE Field1=2")
  Set rst = dbs.OpenRecordset("select * from Table1")

  While Not rst.EOF
    MsgBox rst.Fields(1).Value & "," & rst.Fields(2).Value
    rst.MoveNext
  Wend

  MsgBox rst.RecordCount
End Sub

这应该可以完美运行。只需将正确版本的 DAO 库添加到您的项目中即可。要找到正确的库,请在 Access 中打开 VBA 编辑器并选择工具/参考...菜单。在列表中查找数据访问库(在我的情况下,它是“Microsoft Office 12.0 Access 数据库引擎对象库”,也可能是“DAO 3.6”等。取决于版本)。之后在 Excel 中打开相同的对话框并添加对象库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多