PRB: "Operation must use an updateable query" When you access Excel through ODBC

Uwaga

Nazwa usługi Office 365 ProPlus została zmieniona na Aplikacje usługi Microsoft 365 dla przedsiębiorstw. Aby uzyskać więcej informacji na temat tej zmiany, przeczytaj ten wpis w blogu.

Symptomy

Podczas edytowania arkusza programu Excel za pomocą obiektów 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 Recordset (Zestaw rekordów) wygenerowanego z kodem ADO, podczas edytowania arkusza programu Excel za pomocą obiektów 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 próbujesz edytować arkusz, który został zapisany lub otwarty jako ReadOnly.

Uwaga

ReadOnly jest domyślnym ustawieniem połączenia ODBC z programem Excel z nazwą źródła danych (DSN) lub bez niego. Dlatego użytkownik musi zawsze zmienić to ustawienie, aby edytować dane.

Rozwiązanie

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

  • Upewnij się, że właściwość LockType obiektu Recordset (Zestaw rekordów) nie ma wartości ReadOnly (Tylko do odczytu).

  • Upewnij się, że plik, który próbujesz otworzyć, nie jest zapisany jako Tylko do odczytu.

  • Jeśli łączysz się za pośrednictwem dsN, wykonaj następujące czynności:

    1. Otwórz Panel sterowania, a następnie kliknij pozycję Administrator źródła danych ODBC.
    2. Kliknij dwukrotnie swoją dsn.
    3. W oknie dialogowym Konfiguracja programu Microsoft Excel w formacie ODBC kliknij pozycję Opcje.
    4. Upewnij się, że pole wyboru Tylko do odczytu nie jest zaznaczone.
  • Jeśli korzystasz z połączenia bez dsN, pamiętaj o dowiązaniu do parametrów połączenia opcji "ReadOnly=0". Przykład:

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

Stan

Takie działanie jest celowe.

Więcej informacji

Kroki odtworzenia zachowania

  1. Tworzenie nowego standardowego projektu EXE w języku Visual Basic.

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

  3. Dodaj przycisk polecenia 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ż polecenie Nazwa, a następnie kliknij pozycję Definiuj.

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

  9. Zapisz arkusz w tym samym folderze, w którym znajduje się aplikacja visual basic.

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

Informacje

Aby uzyskać dodatkowe informacje, zobacz następujący artykuł:

Przestrzeń pakietu Office: porady i wskazówki dotyczące skryptów aplikacji pakietu Microsoft Office