【问题标题】:Insert Into Access - Cannot Update. Database or object is read-only插入访问 - 无法更新。数据库或对象是只读的
【发布时间】:2017-07-28 00:17:37
【问题描述】:

我正在尝试通过下面的 VBA 代码将 Excel 2013 中的值表上传到 Access 2013 数据库中。但是,我不断收到错误消息。错误发生在 cn.execute SQL 行。

运行时错误'-2147217911 (80040e09)':

无法更新。数据库或对象是只读的。

我已经检查了文件和 Access 数据库的权限,并且它是读写访问权限。我什至尝试在不同的目录中创建一个新的 Microsoft Access 数据库,但得到了同样的错误。

让我难过的另一件事是,我之前在不同的 Excel 工作表中重复使用了此代码而没有任何问题,但将其与此工作簿/数据库一起使用是行不通的。

Sub uploadToDB()

Dim SQL As String

dbPath = "C:\Users\john.smith\Desktop\database.accdb"
wbName = "C:\Macros\" & ActiveWorkbook.Name & ".xlsm"
wsname = "Staging"
TableName = "dataTable"

Set cn = CreateObject("ADODB.Connection")
scn = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dbPath

cn.Open scn

'find number of data points to add
row = Sheets(wsname).Range("A1").End(xlDown).row

SQL = "INSERT INTO " & TableName & " ([field1],[field2],[field3],[field4],[field5],[field6],[field7],[field8]) "
SQL = SQL & "SELECT * FROM [Excel 12.0 Macro;HDR=YES;DATABASE=" & wbName & "].[" & wsname & "$A1:H" & row & "]" '" & wsName

cn.Execute SQL

cn.Close
Set cn = Nothing

End Sub

【问题讨论】:

    标签: sql vba excel ms-access


    【解决方案1】:

    请考虑这些。其中之一可能会导致此问题:

    • 您使用了 OpenDatabase 方法并打开了数据库 只读访问。

    • 在 Microsoft Visual Basic 中,您使用的是 Data 控件,并将 ReadOnly 属性设置为 True。

    • 数据库文件在操作系统或您的网络中被定义为只读。

    • 数据库文件存储在只读媒体上。

    • 在网络环境中,您没有数据库文件的写入权限。

    • 使用安全数据库时,数据库或其对象之一(例如字段或表)可能被设置为只读。你可以 无权使用您的用户名访问此数据,并且 密码。

    来源here

    【讨论】:

      【解决方案2】:

      我会先尝试使用硬编码的 SQL 语句,即

      SQL = "INSERT INTO " & TableName & " ([field1],[field2],[field3],[field4],[field5],[field6],[field7],[field8]) "
      SQL = SQL & "SELECT 'val1', 'val2', etc.
      

      这区分了 Access 问题或 Excel 问题。如果硬编码语句有效,您可能需要在对 Excel 的引用中使用 IMEX=0。即

      Excel 12.0;HDR=Yes;IMEX=0;Readonly=False
      

      【讨论】:

      • 尝试了硬编码的 SQL 语句,没有骰子。同样的错误。不知道我还能做什么,我什至在单独的目录中创建了一个新的 Access 数据库。
      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      相关资源
      最近更新 更多