Non è possibile aggiungere record o eliminare record con il metodo ADO AddNew o con il metodo Delete

Avanzate: richiede competenze esperte di codifica, interoperabilità e multiutente.

Questo articolo si applica a un database di Microsoft Access (.mdb o accdb) e a un progetto di Microsoft Access (con estensione adp).

Sintomi

Quando si utilizza ActiveX Data Objects (ADO), se si utilizza il metodo AddNew o Delete dell'oggetto Recordset e si apre il recordset con un tipo di blocco non specificato, è possibile che venga visualizzato uno dei messaggi di errore seguenti:

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

-oppure-

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

-oppure-

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

Causa

Per impostazione predefinita, i recordset ADO vengono aperti con un tipo di blocco adLockReadOnly, che non consente aggiunte ed eliminazioni.

Risoluzione

Per consentire aggiunte ed eliminazioni, aprire il recordset con un tipo di blocco adLockOptimistic o adLockPessimistic, come nell'esempio di codice seguente:

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

NOTA È possibile usare questo codice di esempio per risolvere il comportamento nella sezione "Passaggi per riprodurre il comportamento" di questo articolo.

Ulteriori informazioni

Passaggi per riprodurre il comportamento

  1. In un nuovo database di Access creare la nuova tabella seguente e denominarla TestTable:

    Table:TestTable
    ----------------------------
    Field Name: ID
    Data Type: Autonumber
    Indexed: Yes (No Duplicates)
    
    Field Name: Name
    Data Type: Text
    
  2. Aprire la nuova tabella in visualizzazione Foglio dati e quindi digitare i dati di test seguenti:

    ID Name
    -----------------
    1 Beverages
    2 Condiments
    3 Confections
    4 Dairy
    5 Grains
    6 Meat
    7 Produce
    8 Seafood
    
  3. NOTA Il codice di esempio in questo articolo usa Oggetti dati Microsoft ActiveX. Per l'esecuzione corretta di questo codice, è necessario fare riferimento alla libreria Microsoft ActiveX Data Objects 2.x ,dove 2.x è 2.1 o versione successiva. A tale scopo, fare clic su Riferimenti nel menu Strumenti in Visual Basic Editor e verificare che la casella di controllo Microsoft ActiveX Data Objects 2.x Library sia selezionata.

    Creare un modulo e quindi digitare la riga seguente nella sezione Dichiarazioni se non è già presente:

    Opzione esplicita

  4. Digitare la procedura seguente:

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. Per testare questa funzione, digitare la riga seguente nella finestra Immediata e quindi premere INVIO:

    DelFirstRec

    Si noti che viene visualizzato il messaggio di errore indicato nella sezione "Sintomi" di questo articolo. Inoltre, quando si controlla la tabella, si nota che non sono stati eliminati record.