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 ett 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:

    1. Öppna Kontrollpanelen och klicka sedan på ADMINISTRATÖR för ODBC-datakälla.
    2. Dubbelklicka på din DSN.
    3. Klicka på Alternativ i dialogrutan Inställningar för ODBC Microsoft Excel.
    4. 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

  1. Skapa ett nytt Standard EXE-projekt i Visual Basic.

  2. Klicka på Referenser på Project-menyn och lägg sedan till en referens till Microsoft ActiveX-dataobjektsbibliotek.

  3. Lägg till en Kommando-knapp i Formulär1.

  4. 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 Sub  
    
  5. Spara programmet.

  6. Skapa ett nytt Excel-kalkylblad och spara sedan kalkylbladet som det Test.xls.

  7. Peka på Namn på Infoga-menyn och klicka sedan på Definiera.

  8. Skapa en ny tabell i Excel-kalkylbladet och namnge sedan tabellen TB1.

  9. Spara kalkylbladet i samma mapp som Visual Basic-programmet.

  10. 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 på Microsoft Office-program