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:
- Otevřete Ovládací panely a klikněte na Správce zdrojů dat ODBC.
- Poklikejte na název DSN.
- V dialogovém okně Nastavení microsoft excelového rozhraní ODBC klikněte na Možnosti.
- 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í
Vytvořte nový projekt Standard EXE v jazyce Visual Basic.
V nabídce Projekt klikněte na Odkazy a potom přidejte odkaz na knihovnu Microsoft ActiveX Data Objects Library.
Přidejte příkazové tlačítko do formuláře Form1.
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
Uložte aplikaci.
Vytvořte nový excelový list a uložte ho jako Test.xls.
V nabídce Insert (Vložit) přejděte na Name (Název) a klikněte na Define (Definovat).
Vytvořte novou tabulku v excelovém listu a pojmenujte ji TB1.
Uložte list do stejné složky jako aplikace Visual Basic.
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
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro