Freigeben über


Fehler "Vorgang muss eine aktualisierbare Abfrage verwenden" Wenn Sie über ODBC auf Excel zugreifen

Symptome

Wenn Sie ein Excel-Arbeitsblatt über ADO und ODBC bearbeiten, wird möglicherweise die folgende Fehlermeldung angezeigt, 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, wird möglicherweise die folgende Fehlermeldung angezeigt, 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 Datenquellennamen (Data Source Name, DSN). Daher muss der Benutzer diese Einstellung immer ändern, um Daten zu bearbeiten.

Beschluss

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:

    1. Öffnen Sie die Systemsteuerung, und wählen Sie dann DEN ODBC-Datenquellenadministrator aus.
    2. Doppelklicken Sie auf Ihren DSN.
    3. Wählen Sie im Dialogfeld "ODBC Microsoft Excel Setup" die Option "Optionen" aus.
    4. Stellen Sie sicher, dass das Kontrollkästchen "ReadOnly" entfernt ist.
  • Wenn Sie eine DSN-less-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;"
    

Der Status

Dieses Verhalten ist beabsichtigt.

Mehr Informationen

Schritte zum Reproduzieren des Verhaltens

  1. Erstellen Sie ein neues Standard EXE-Projekt in Visual Basic.

  2. Wählen Sie im Menü "Projekt" die Option "Verweise" aus, und fügen Sie dann einen Verweis auf die Microsoft ActiveX-Datenobjektbibliothek hinzu.

  3. Hinzufügen einer Befehlsschaltfläche zu Form1.

  4. Fügen Sie den folgenden Code zu Form1 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  
    
  5. Speichern Sie die Anwendung.

  6. Erstellen Sie ein neues Excel-Arbeitsblatt, und speichern Sie das Arbeitsblatt dann als Test.xls.

  7. Zeigen Sie im Menü "Einfügen" auf "Name", und wählen Sie dann "Definieren" aus.

  8. Erstellen Sie eine neue Tabelle im Excel-Arbeitsblatt, und benennen Sie dann die Tabelle TB1.

  9. Speichern Sie das Arbeitsblatt im selben Ordner wie die Visual Basic-Anwendung.

  10. Drücken Sie F5, um die Anwendung auszuführen.

Verweise

Weitere Informationen finden Sie unter Office Space: Tipps und Tricks für Skripterstellung in Microsoft-Office-Anwendungen.