PRB: Operace musí používat aktualizovatelný dotaz Při přístupu k Excelu přes ODBC

Příznaky

Při úpravách listu aplikace Excel prostřednictvím ADO a odbc se může zobrazit následující chybová zpráva, pokud používáte objekt ADO DataControl:

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

Pokud používáte objekt Recordset, který je vygenerován pomocí kódu ADO, může se při úpravě listu aplikace Excel prostřednictvím ADO a ODBC zobrazit následující chybová zpráva:

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

Příčina

K tomuto problému dochází, pokud se pokusíte upravit list, který je uložen nebo otevřen jako Jen pro čtení.

Poznámka

Jen pro čtení je výchozí nastavení pro připojení ODBC k Excelu s názvem zdroje dat (DSN) nebo bez. Proto musí uživatel toto nastavení vždy změnit, aby data upravil.

Řešení

Chcete-li tento problém vyřešit, použijte následující metody:

  • Ujistěte se, že vlastnost LockType objektu Recordset není nastavená na Jen pro čtení.

  • Ujistěte se, že soubor, který se pokoušíte otevřít, není uložen jako Jen pro čtení.

  • Pokud se připojujete přes DSN, postupujte takto:

    1. Otevřete Ovládací panely a klikněte na Správce zdrojů dat ODBC.
    2. Poklikejte na název DSN.
    3. V dialogovém okně Nastavení microsoft excelového rozhraní ODBC klikněte na Možnosti.
    4. Ujistěte se, že není zaškrtnuté políčko Jen pro čtení.
  • Pokud používáte připojení bez DSN, nezapomeňte do připojovací řetězec zahrnout možnost ReadOnly=0. Příklady:

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

Stav

Toto chování je záměrné.

Další informace

Kroky pro reprodukci chování

  1. Vytvořte nový projekt Standard EXE v jazyce Visual Basic.

  2. V nabídce Projekt klikněte na Odkazy a potom přidejte odkaz na knihovnu Microsoft ActiveX Data Objects Library.

  3. Přidejte příkazové tlačítko do formuláře Form1.

  4. Do formuláře Form1 přidejte následující kód:

    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. Uložte aplikaci.

  6. Vytvořte nový excelový list a uložte ho jako Test.xls.

  7. V nabídce Insert (Vložit) přejděte na Name (Název) a klikněte na Define (Definovat).

  8. Vytvořte novou tabulku v excelovém listu a pojmenujte ji TB1.

  9. Uložte list do stejné složky jako aplikace Visual Basic.

  10. Stisknutím klávesy F5 spusťte aplikaci.

Odkazy

Další informace najdete v následujícím článku:

Office Space: Tipy a triky pro skriptování aplikací Microsoft Office