Du kan inte lägga till eller ta bort poster med ADO AddNew-metoden eller metoden Delete

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.

Avancerat: Kräver expertkodning, interoperabilitet och fleranvändarfärdigheter.

Den här artikeln gäller en Microsoft Access-databas (.mdb eller .accdb) och ett Microsoft Access-projekt (.adp).

Symptom

Om du använder ActiveX Data Objects (ADO), och du öppnar postuppsättningen med en ospecificerad låstyp, kan du få något av följande felmeddelanden om du använder metoden AddNew eller Delete för Recordset-objektet, och du öppnar postuppsättningen med en ospecificerad låstyp:

Run-time error '3251': Object or provider is not capable of performing requested operation. 

eller

Run-time error '3251':
The operation requested by the application is not supported by the provider. 

eller

Run-time error '3251':
Current Recordset does not support updating. This may be a limitation of the provider, or of the selected locktype. 

Orsak

Som standard öppnas ADO-postuppsättningar med en låstyp av adLockReadOnly, som inte tillåter tillägg och borttagningar.

Lösning

Om du vill tillåta tillägg och borttagningar öppnar du postuppsättningen med en låstyp av antingen adLockOptimistic eller adLockPessimistic, som i följande kodexempel:

Sub DelFirstRec()
   Dim rs As ADODB.Recordset
   Set rs = New ADODB.Recordset

rs.Open "Select * from TestTable", CurrentProject.Connection, _
            adOpenKeyset, adLockOptimistic
   rs.MoveFirst
   rs.Delete
   rs.Close
End Sub

OBS! Du kan använda den här exempelkoden för att lösa beteendet i avsnittet "Steg för att återskapa beteende" i den här artikeln.

Mer information

Steg för att återskapa beteende

  1. Skapa följande ny tabell i en ny Access-databas och ge den namnet TestTabell:

    Table:TestTable
    ----------------------------
    Field Name: ID
    Data Type: Autonumber
    Indexed: Yes (No Duplicates)
    
    Field Name: Name
    Data Type: Text
    
  2. Öppna den nya tabellen i databladsvyn och ange följande testdata:

    ID Name
    -----------------
    1 Beverages
    2 Condiments
    3 Confections
    4 Dairy
    5 Grains
    6 Meat
    7 Produce
    8 Seafood
    
  3. OBS! I exempelkoden i den här artikeln används Microsoft ActiveX Dataobjekt. För att den här koden ska köras korrekt måste du referera till Microsoft ActiveX Data Objects 2.x Library (där 2.x är 2.1 eller senare.) Det gör du genom att klicka på Referenser på menyn Verktyg i Visual Basic Editor och kontrollera att kryssrutan Microsoft ActiveX Dataobjekt 2.x-bibliotek är markerad.

    Skapa en modul och skriv sedan följande rad i avsnittet Deklarationer om den inte redan finns där:

    Option Explicit

  4. Skriv in följande procedur:

Sub DelFirstRec()
   Dim rs As New ADODB.Recordset

rs.Open "Select * from TestTable", CurrentProject.Connection, adOpenKeyset
   rs.MoveFirst
   rs.Delete
   rs.Close
End Sub

  1. Om du vill testa funktionen skriver du följande rad i direktfönstret och trycker sedan på RETUR:

    DelFirstRec

    Observera att du får det felmeddelande som nämns i avsnittet "Symptom" i den här artikeln. När du kontrollerar tabellen ser du också att inga poster har tagits bort.