2017-06-19 63 views
0

我正在使用Excel應用程序,它允許用戶通過用戶表單輸入小時數工作,並且信息存儲在Access數據庫中。我是新來的excel和訪問連接。我可以連接到數據庫,但由於。更新命令上的運行時錯誤,不會保存/創建記錄。 運行時錯誤'-2147467259(80004005)':操作必須使用可更新的查詢。Excel數據訪問數據庫 - 獲取:操作必須使用可更新的查詢錯誤

我已搜索和搜索,無法找到解決此問題的方法。我希望有人能夠提供幫助。 (代碼如下)

Sub Export_Data_Access_TI1() 

Dim dbPath As String 
Dim x As Long, i As Long 
Dim nextrow As Long 
Dim user As String 
Dim NewSht As Worksheet 
Dim strQuery As String 
Dim recDate As String 
Dim Week_Of As String 

user = Sheet1.Range("A1").Text 

On Error GoTo ErrHandler: 

'Variables for file path and last row of data 
dbPath = "H:\PROJECTS\CAI_DOT-Time Tracker\CAI_EMP_SignIn_Database.accdb" 
nextrow = Cells(Rows.Count, 1).End(xlUp).Row 

'Initialise the collection class variable 
Set cnn = New ADODB.Connection 

'Check for data 
If Sheets(user).Range("A2").Value = "" Then 
MsgBox " There is no data to send to MS Access" 
Exit Sub 
End If 

cnn.Mode = adModeReadWrite 
'cnn.Mode = adModeShareDenyNone 
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath 

Set rst = New ADODB.Recordset 'assign memory to the recordset 

rst.CursorLocation = adUseClient 
rst.Open Source:="DATA", ActiveConnection:=cnn, _ 
    CursorType:=adOpenKeyset, LockType:=adLockPessimistic, _ 
    Options:=adCmdTable 
'rst.Supports (adAddNew) 

x = 2 'the start row in the worksheet 
Do While Len(Sheets(user).Range("A" & x).Formula) > 0 

With rst 

.AddNew 'create a new record 

.Fields("Date") = ActiveWorkbook.Sheets(user).Range("A" & x).Value 
.Fields("Week_Of") = Sheets(user).Range("B" & x).Value 
.Fields("Month") = Sheets(user).Range("C" & x).Value 
.Fields("Name") = Sheets(user).Range("D" & x).Value 
.Fields("Time_In") = Sheets(user).Range("E" & x).Value 
.Fields("Time_Out") = Sheets(user).Range("F" & x).Value 
.Fields("Time_In2") = Sheets(user).Range("G" & x).Value 
.Fields("Time_Out2") = Sheets(user).Range("H" & x).Value 
.Fields("Group") = Sheets(user).Range("I" & x).Value 
.Fields("UniqueID") = Sheets(user).Range("J" & x).Value 
.Fields("Comments") = Sheets(user).Range("K" & x).Value 

.Update 'stores the new record 
End With 

x = x + 1 'next row 
Loop 

rst.Close 

cnn.Close 

Set rst = Nothing 
Set cnn = Nothing 

'communicate with the user 
MsgBox " The data has been successfully sent to the access database" 

'Update the sheet 
Application.ScreenUpdating = True 

'Clear the data 
'Sheets(user).Range("A1:K1000").ClearContents 
On Error GoTo 0 
Exit Sub 
ErrHandler: 

'clear memory 
Set rst = Nothing 
Set cnn = Nothing 
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Export_Data" 
End Sub 
+0

您是否在查詢中包含主鍵?如果你希望它是可更新的,那麼這是必需的。 – braX

+0

嗨braX,是包含主鍵(UniqueID)。感謝您的答覆。 – Andrea

回答

0

據我所知,DATA是在遠程accdb查詢。如果是這樣,它應該是可更新的。例如,請參閱:Why is my query not updateable?的標準。如果這是一張表,請檢查您是否對accdb具有讀寫權限,並且該文件沒有隻讀屬性。

+0

Sergey,感謝您的快速響應並且它是一個表格,但accdb具有所有權限並且文件沒有隻讀屬性。 – Andrea

相關問題