PRB: "Vorgang muss eine aktualisierbare Abfrage verwenden" Beim Zugriff auf Excel über ODBC
Symptome
Wenn Sie ein Excel-Arbeitsblatt über ADO und ODBC bearbeiten, erhalten Sie möglicherweise die folgende Fehlermeldung, wenn Sie ein ADO DataControl-Objekt verwenden:
[Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Wenn Sie ein Recordset-Objekt verwenden, das mit ADO-Code generiert wird, erhalten Sie möglicherweise die folgende Fehlermeldung, wenn Sie ein Excel-Arbeitsblatt über ADO und ODBC bearbeiten:
Run-time error '-2147467259(80004005)': [Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Ursache
Dieses Problem tritt auf, wenn Sie versuchen, ein Arbeitsblatt zu bearbeiten, das als ReadOnly gespeichert oder geöffnet wird.
Hinweis
ReadOnly ist die Standardeinstellung für eine ODBC-Verbindung mit Excel, mit oder ohne Datenquellenname (DATA Source Name, DSN). Daher muss der Benutzer diese Einstellung immer ändern, um Daten zu bearbeiten.
Lösung
Verwenden Sie die folgenden Methoden, um dieses Problem zu beheben:
Stellen Sie sicher, dass die LockType-Eigenschaft des Recordset-Objekts nicht auf ReadOnly festgelegt ist.
Stellen Sie sicher, dass die Datei, die Sie öffnen möchten, nicht als ReadOnly gespeichert ist.
Wenn Sie eine Verbindung über einen DSN herstellen, führen Sie die folgenden Schritte aus:
- Öffnen Sie Systemsteuerung, und klicken Sie dann auf ODBC-Datenquellenadministrator.
- Doppelklicken Sie auf Ihren DSN.
- Klicken Sie im Dialogfeld ODBC Microsoft Excel-Setup auf Optionen.
- Stellen Sie sicher, dass das Kontrollkästchen ReadOnly nicht aktiviert ist.
Wenn Sie eine DSN-keine Verbindung verwenden, stellen Sie sicher, dass Sie die Option "ReadOnly=0" in die Verbindungszeichenfolge einschließen. Beispiel:
cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
Status
Es handelt sich hierbei um ein beabsichtigtes Verhalten.
Weitere Informationen
Schritte zum Reproduzieren des Verhaltens
Erstellen Sie ein neues Standard-EXE-Projekt in Visual Basic.
Klicken Sie im Menü Projekt auf Verweise, und fügen Sie dann einen Verweis auf die Microsoft ActiveX-Datenobjektbibliothek hinzu.
Fügen Sie Form1 eine Befehlsschaltfläche hinzu.
Fügen Sie form1 den folgenden Code hinzu:
Dim rs As ADODB.Recordset Dim cn As ADODB.Connection Private Sub Form_Load() Command1.Caption = "Edit" End Sub Private Sub Command1_Click() Dim DocPath As String DocPath = App.Path & "\Test.xls" Set cn = New Connection Set rs = New Recordset cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & DocPath & ";ReadOnly=1" rs.LockType = adLockOptimistic rs.Open "TB1", cn rs.AddNew rs.Fields(1).Value = "New Value" rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub
Speichern Sie die Anwendung.
Erstellen Sie ein neues Excel-Arbeitsblatt, und speichern Sie das Arbeitsblatt als Test.xls.
Zeigen Sie im Menü Einfügen auf Name, und klicken Sie dann auf Definieren.
Erstellen Sie eine neue Tabelle im Excel-Arbeitsblatt, und nennen Sie die Tabelle dann TB1.
Speichern Sie das Arbeitsblatt im selben Ordner wie die Visual Basic-Anwendung.
Drücken Sie F5, um die Anwendung auszuführen.
References
Weitere Informationen finden Sie im folgenden Artikel:
Büroraum: Tipps und Tricks zum Erstellen von Skripts für Microsoft Office-Anwendungen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für