Udostępnij za pośrednictwem


Błąd "Operacja musi używać kwerendy z możliwością aktualizacji" Podczas uzyskiwania dostępu do programu Excel za pośrednictwem ODBC

Objawy

Podczas edytowania arkusza programu Excel za pomocą ADO i ODBC może zostać wyświetlony następujący komunikat o błędzie, jeśli używasz obiektu ADO DataControl:

[Microsoft][ODBC Excel Driver] Operation must use an updateable query.

Jeśli używasz obiektu zestawu rekordów wygenerowanego przy użyciu kodu ADO, podczas edytowania arkusza programu Excel za pomocą ADO i ODBC może zostać wyświetlony następujący komunikat o błędzie:

Run-time error '-2147467259(80004005)': [Microsoft][ODBC Excel Driver] Operation must use an updateable query.

Przyczyna

Ten problem występuje, jeśli spróbujesz edytować arkusz zapisany lub otwarty jako ReadOnly.

Uwaga / Notatka

Tryb tylko do odczytu to ustawienie domyślne dla połączenia ODBC z programem Excel, z nazwą źródła danych (DSN) lub bez niej. W związku z tym użytkownik musi zawsze zmienić to ustawienie, aby edytować dane.

Rezolucja

Aby rozwiązać ten problem, użyj następujących metod:

  • Upewnij się, że właściwość LockType obiektu zestawu rekordów nie jest ustawiona na ReadOnly.

  • Upewnij się, że plik, który próbujesz otworzyć, nie został zapisany jako ReadOnly.

  • Jeśli nawiązujesz połączenie za pośrednictwem nazwy DSN, wykonaj następujące kroki:

    1. Otwórz Panel sterowania, a następnie wybierz pozycję Administrator źródła danych ODBC.
    2. Kliknij dwukrotnie nazwę DSN.
    3. W oknie dialogowym Konfiguracja programu Microsoft Excel ODBC wybierz pozycję Opcje.
    4. Upewnij się, że pole wyboru ReadOnly zostało wyczyszczone.
  • Jeśli używasz połączenia bez nazwy DSN, upewnij się, że w parametrach połączenia dołącz opcję "ReadOnly=0". Przykład:

    cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
    

Stan

Jest to zamierzone działanie.

Więcej informacji

Kroki odtwarzania zachowania

  1. Utwórz nowy standardowy projekt EXE w Visual Basic.

  2. W menu Projekt wybierz pozycję Odwołania, a następnie dodaj odwołanie do biblioteki obiektów danych Microsoft ActiveX.

  3. Dodaj przycisk do formularza Form1.

  4. Dodaj następujący kod do formularza Form1:

    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. Zapisz aplikację.

  6. Utwórz nowy arkusz programu Excel, a następnie zapisz arkusz jako Test.xls.

  7. W menu Wstaw wskaż pozycję Nazwa, a następnie wybierz pozycję Zdefiniuj.

  8. Utwórz nową tabelę w arkuszu programu Excel, a następnie nadaj tabeli nazwę TB1.

  9. Zapisz arkusz w tym samym folderze co aplikacja Visual Basic.

  10. Naciśnij F5, aby uruchomić aplikację.

Źródła

Aby uzyskać więcej informacji, zobacz Office Space: Tips and Tricks for Scripting Microsoft Office Applications (Przestrzeń pakietu Office: porady i wskazówki dotyczące tworzenia skryptów aplikacji pakietu Microsoft Office).