2017-03-07 89 views
0

我想通過下面的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 

回答

0

請考慮這些。他們中的一個可能會導致此問題:

  • 您使用OpenDatabase方法打開了數據庫 只讀訪問。

  • 在Microsoft Visual Basic中,您使用的是Data 控件,並將ReadOnly屬性設置爲True。

  • 數據庫文件在操作系統或網絡中定義爲只讀。

  • 數據庫文件存儲在只讀介質上。

  • 在網絡環境中,您沒有數據庫文件的寫入權限。

  • 使用安全數據庫時,數據庫或其某個對象(如字段或表)可能設置爲只讀。您可能無法使用您的用戶名和密碼 訪問此數據。

來源here

0

我會首先嚐試使用硬編碼的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 
+0

嘗試了一個硬編碼的SQL語句,沒有骰子。同樣的錯誤。不知道我還能做什麼,我甚至在一個單獨的目錄中創建了一個新的Access數據庫。 –