Condividi tramite


Eliminazione di record tramite il metodo Delete

L'utilizzo del metodo Delete segna il record corrente o un gruppo di record in un oggetto Recordset per essere eliminati. Se l'oggetto Recordset non consente l'eliminazione di record, si verifica un errore. Se si è in modalità di aggiornamento immediato, le eliminazioni vengono eseguite immediatamente nel database. Se un record non può essere eliminato correttamente (ad esempio a causa di violazioni dell'integrità del database), il record rimarrà in modalità di modifica dopo la chiamata a Update. Questo significa che è necessario annullare l'aggiornamento usando CancelUpdate prima di disattivare il record corrente, ad esempio usando Chiudi, Spostao NextRecordset).

Se si è in modalità di aggiornamento batch, i record vengono contrassegnati per l'eliminazione dalla cache e l'eliminazione effettiva si verifica quando si chiama il metodo UpdateBatch. Per visualizzare i record eliminati, impostare la proprietà Filter su adFilterAffectedRecords dopo chiamato Delete.

Il tentativo di recuperare i valori di campo dal record eliminato genera un errore. Dopo l'eliminazione del record corrente, il record eliminato rimane corrente fino a quando non si passa a un record diverso. Una volta che ci si allontana dal record eliminato, non è più accessibile.

Se si annidano le eliminazioni in una transazione, è possibile recuperare i record eliminati usando il metodo RollbackTrans. Se si è in modalità di aggiornamento batch, è possibile annullare un'eliminazione in sospeso o un gruppo di eliminazioni in sospeso usando il metodo CancelBatch.

Se il tentativo di eliminazione dei record non riesce a causa di un conflitto con i dati sottostanti , ad esempio un record è già stato eliminato da un altro utente, il provider restituisce avvisi all'insieme Errors ma non interrompe l'esecuzione del programma. Si verifica un errore di run-time solo se sono presenti conflitti in tutti i record richiesti.

Se la proprietà dinamica tabella univoca è impostata e la Recordset è il risultato dell'esecuzione di un'operazione JOIN su più tabelle, il metodo Delete eliminerà le righe solo dalla tabella denominata nella proprietà Unique Table.

Il metodo Delete accetta un argomento facoltativo che consente di specificare quali record sono interessati dall'operazione di Delete. Gli unici valori validi per questo argomento sono una delle costanti enumerate ADO seguenti AffectEnum:

  • adAffectCurrent Influisce solo sul record corrente.

  • adAffectGroup Influisce solo sui record che soddisfano l'impostazione corrente della proprietà Filter. La proprietà Filter deve essere impostata su un valore FilterGroupEnum o su un array di Segnalibri per usare questa opzione.

Nel codice seguente viene mostrato un esempio di come specificare adAffectGroup quando si chiama il metodo Delete. In questo esempio vengono aggiunti alcuni record all'recordset di esempio e viene aggiornato il database. Filtra quindi il Recordset usando la costante enumerata adFilterAffectedRecords, che lascia visibili solo i record appena aggiunti nel Recordset. Infine, chiama il metodo Delete e specifica che tutti i record che soddisfano l'impostazione corrente della proprietà Filter (i nuovi record) devono essere eliminati.

'BeginDeleteGroup  
    'add some bogus records  
    With objRs  
        For i = 0 To 8  
            .AddNew  
            .Fields("CompanyName") = "Shipper Number " & i + 1  
            .Fields("Phone") = "(425) 555-000" & (i + 1)  
            .Update  
        Next i  
  
        ' update  
        .UpdateBatch  
  
        'filter on newly added records  
        .Filter = adFilterAffectedRecords  
        Debug.Print "Deleting the " & .RecordCount & _  
                    " records you just added."  
  
        'delete the newly added bogus records  
        .Delete adAffectGroup  
        .Filter = adFilterNone  
        Debug.Print .RecordCount & " records remain."  
    End With  
'EndDeleteGroup