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:
- Otwórz Panel sterowania, a następnie kliknij pozycję Administrator źródła danych ODBC.
- Kliknij dwukrotnie swoją dsn.
- W oknie dialogowym Konfiguracja programu Microsoft Excel w formacie ODBC kliknij pozycję Opcje.
- 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
Tworzenie nowego standardowego projektu EXE w języku Visual Basic.
W menu Projekt kliknij polecenie Odwołania, a następnie dodaj odwołanie do biblioteki obiektów danych Microsoft ActiveX.
Dodaj przycisk polecenia do formularza Form1.
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
Zapisz aplikację.
Utwórz nowy arkusz programu Excel, a następnie zapisz arkusz jako Test.xls.
W menu Wstaw wskaż polecenie Nazwa, a następnie kliknij pozycję Definiuj.
Utwórz nową tabelę w arkuszu programu Excel, a następnie nadaj tabeli nazwę TB1.
Zapisz arkusz w tym samym folderze, w którym znajduje się aplikacja visual basic.
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