PRB: "Operacja musi używać kwerendy z możliwością aktualizacji" Podczas uzyskiwania dostępu do programu Excel za pośrednictwem odbc

Symptomy

Podczas edytowania arkusza programu Excel za pośrednictwem 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 Zestaw rekordów, który jest generowany za pomocą kodu ADO, podczas edytowania arkusza programu Excel za pośrednictwem 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, który został zapisany lub otwarty jako ReadOnly.

Uwaga

ReadOnly to ustawienie domyślne dla połączenia ODBC z programem Excel z nazwą źródła danych (DSN) lub bez tej nazwy. W związku z tym 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 nie jest ustawiona na wartość ReadOnly.

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

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

    1. Otwórz Panel sterowania, a następnie kliknij pozycję Administrator źródła danych ODBC.
    2. Kliknij dwukrotnie nazwę DSN.
    3. W oknie dialogowym Konfiguracja programu Microsoft Excel ODBC kliknij pozycję Opcje.
    4. Upewnij się, że pole wyboru ReadOnly nie jest zaznaczone.
  • Jeśli używasz połączenia bez nazwy DSN, pamiętaj o dodaniu opcji "ReadOnly=0" do parametry połączenia. 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 odtwarzania zachowania

  1. Utwórz nowy projekt standardu EXE w visual basic.

  2. W menu Projekt kliknij pozycję Odwołania, a następnie dodaj odwołanie do biblioteki obiektów danych Usługi 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 Wstawianie wskaż pozycję Nazwa, a następnie kliknij pozycję Definiuj.

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

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

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

Informacje

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

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