PRB: "Åtgärden måste använda en uppdateringsbar fråga" När du öppnar Excel via ODBC
Anteckning
Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.
Symptom
När du redigerar Excel kalkylblad via ADO och ODBC kan du få följande felmeddelande om du använder ett ADO DataControl-objekt:
[Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Om du använder ett Recordset-objekt som genereras med ADO-kod kan du få följande felmeddelande när du redigerar ett Excel-kalkylblad via ADO och ODBC:
Run-time error '-2147467259(80004005)': [Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Orsak
Det här problemet inträffar om du försöker redigera ett kalkylblad som sparas eller öppnas som ReadOnly.
Anteckning
ReadOnly är standardinställningen för en ODBC-anslutning till Excel, med eller utan ett namn på datakällan (DSN). Därför måste användaren alltid ändra inställningen till redigera data.
Lösning
Lös problemet genom att använda följande metoder:
Kontrollera att egenskapen LockType för Recordset-objektet inte är inställd på ReadOnly.
Kontrollera att filen som du försöker öppna inte har sparats som ReadOnly.
Om du ansluter via ett DSN gör du så här:
- Öppna Kontrollpanelen och klicka sedan på ADMINISTRATÖR för ODBC-datakälla.
- Dubbelklicka på din DSN.
- I dialogrutan ODBC Microsoft Excel Inställningar klickar du på Alternativ.
- Kontrollera att kryssrutan Läs upp inte är markerad.
Om du använder en DSN-anslutning utan DSN måste du inkludera alternativet "ReadOnly=0" i anslutningssträngen. Till exempel:
cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
Status
Detta är avsiktligt.
Mer information
Steg för att återskapa beteendet
Skapa ett nytt Standard EXE-projekt i Visual Basic.
På Project klickar du på Referenser och lägger sedan till en referens till Microsoft ActiveX Dataobjektsbibliotek.
Lägg till en Kommando-knapp i Formulär1.
Lägg till följande kod i Formulär1:
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 SubSpara programmet.
Skapa ett nytt Excel och spara sedan kalkylbladet som det Test.xls.
Peka på Namn på Infoga-menyn och klicka sedan på Definiera.
Skapa en ny tabell i Excel och ge tabellen namnet TB1.
Spara kalkylbladet i samma mapp som det Visual Basic program.
Tryck på F5 för att köra programmet.
Referenser
Mer information finns i följande artikel:
Office utrymme: Tips och trick för skript i Microsoft Office program