2017-06-19 1 views
0

Ich arbeite an einer Excel-Anwendung, die Benutzer Stunden Arbeitszeit durch Benutzerformulare eingeben können und Informationen in einer Access DB gespeichert sind. Ich bin neu in Excel und Access-Verbindungen. Ich bin in der Lage, eine Verbindung zur Datenbank herzustellen, aber die Aufzeichnung wird aufgrund eines Laufzeitfehlers unter .Update nicht gespeichert/erstellt. Laufzeitfehler '-2147467259 (80004005)': Operation muss eine aktualisierbare Abfrage verwenden.Excel-Daten zu Access DB - Get: Betrieb muss eine aktualisierbare Abfrage verwenden Fehler

Ich habe gesucht und gesucht und kann keine Lösung für dieses Problem finden. Ich hoffe, dass jemand helfen kann. (Code unten)

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

Haben Sie den Primärschlüssel in Ihre Abfrage aufgenommen? Dies ist erforderlich, wenn Sie möchten, dass es aktualisierbar ist. – braX

+0

Hallo BraX, Ja der Primärschlüssel ist enthalten (UniqueID). Vielen Dank für Ihre Antwort. – Andrea

Antwort

0

Wie ich verstehe, DATA ist eine Abfrage in der entfernten accdb. Wenn ja, sollte es aktualisierbar sein. Siehe zum Beispiel dies: Why is my query not updateable? für Kriterien. Wenn es sich um eine Tabelle handelt, prüfen Sie, ob Sie auf accdb Lese-/Schreibrechte haben und die Datei kein schreibgeschütztes Attribut hat.

+0

Sergey, Danke für die schnelle Antwort und es ist eine Tabelle, aber die ACCDB hat alle Berechtigungen und Datei hat keine schreibgeschützten Attribute. – Andrea

Verwandte Themen