Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
- Otwórz Panel sterowania, a następnie wybierz pozycję Administrator źródła danych ODBC.
- Kliknij dwukrotnie nazwę DSN.
- W oknie dialogowym Konfiguracja programu Microsoft Excel ODBC wybierz pozycję Opcje.
- 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
Utwórz nowy standardowy projekt EXE w Visual Basic.
W menu Projekt wybierz pozycję Odwołania, a następnie dodaj odwołanie do biblioteki obiektów danych Microsoft ActiveX.
Dodaj przycisk 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ż pozycję Nazwa, a następnie wybierz pozycję Zdefiniuj.
Utwórz nową tabelę w arkuszu programu Excel, a następnie nadaj tabeli nazwę TB1.
Zapisz arkusz w tym samym folderze co aplikacja Visual Basic.
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).