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
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Ö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 SeafoodOBS! 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
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
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.