Recordset: aggiunta, aggiornamento ed eliminazione di record (ODBC)

L'argomento è relativo alle classi ODBC MFC.

Nota

Ora è possibile effettuare l'aggiunta di massa dei record in modo più efficace. Per ulteriori informazioni, vedere Recordset: aggiunta di massa di record (ODBC).

Nota

L'argomento è relativo agli oggetti derivati da CRecordset per cui il recupero di massa di righe non è ancora stato implementato. Se si utilizza il recupero di massa di righe, vedere Recordset: recupero di massa di record (ODBC).

Gli snapshot e i dynaset aggiornabili consentono di aggiungere, modificare (aggiornare) ed eliminare i record. In questo argomento vengono fornite informazioni su:

  • Come determinare se il recordset è aggiornabile.

  • Aggiunta di un record a un recordset.

  • Modifica di un record in un recordset.

  • Eliminazione di un record da un recordset.

Per ulteriori informazioni sull'esecuzione degli aggiornamenti e sulla relativa visualizzazione per altri utenti, vedere Recordset: aggiornamento dei record (ODBC). Quando si aggiunge, si modifica o si elimina un record, l'origine dati viene in genere modificata immediatamente dal recordset. È anche possibile raggruppare gli aggiornamenti correlati nelle transazioni. Se una transazione è in corso, l'aggiornamento non è definitivo fino a quando non si esegue il commit della transazione stessa. In tal modo, è possibile annullare le modifiche tramite il rollback. Per informazioni sulle transazioni, vedere Transazione (ODBC).

Nella tabella riportata di seguito vengono riepilogate le opzioni disponibili per i recordset con caratteristiche di aggiornamento differenti.

Opzioni di lettura/aggiornamento dei recordset

Digita

Lettura

Modifica di record

Eliminazione di record

Aggiunta di nuovi record

Sola lettura

S

N

N

N

Solo accodamento

S

N

N

S

Completamente aggiornabile

S

S

S

S

Come determinare se il recordset è aggiornabile

Se l'origine dati è aggiornabile e il recordset viene aperto come aggiornabile, l'oggetto recordset sarà aggiornabile. L'aggiornabilità del recordset dipende inoltre dall'istruzione SQL utilizzata, dalle proprietà del driver ODBC e dalla presenza in memoria della libreria di cursori ODBC. Non è possibile aggiornare un'origine dati o un recordset in sola lettura.

Per determinare se il recordset è aggiornabile

  • Chiamare la funzione membro CanUpdate dell'oggetto recordset.

    Se il recordset è aggiornabile, CanUpdate restituirà un valore diverso da zero.

Per impostazione predefinita, i recordset supportano l'aggiornamento completo, ovvero su di essi è possibile effettuare le operazioni AddNew, Edit e Delete. Anche l'opzione appendOnly consente di aprire i recordset aggiornabili. Se un recordset viene aperto in questo modo, è solo possibile aggiungere nuovi record con AddNew. Non è infatti possibile modificare o eliminare i record esistenti. È possibile verificare se un recordset è aperto solo per operazioni di aggiunta chiamando la funzione membro CanAppend. CanAppend restituisce un valore diverso da zero se il recordset è completamente aggiornabile o aperto solo per operazioni di aggiunta.

Nel codice seguente viene illustrato l'utilizzo di CanUpdate per un oggetto recordset denominato rsStudentSet:

if( !rsStudentSet.Open( ) )
    return FALSE;
if( !rsStudentSet.CanUpdate( ) )
{
    AfxMessageBox( "Unable to update the Student recordset." );
    return;
}
Nota di avvisoAttenzione

Quando si prepara l'aggiornamento di un recordset chiamando Update, verificare che il recordset includa tutte le colonne che costituiscono la chiave primaria della tabella o tutte le colonne di qualsiasi indice univoco della tabella. In alcuni casi, il framework può utilizzare solo le colonne selezionate nel recordset per identificare il record da aggiornare nella tabella. Senza tutte le colonne necessarie, l'aggiornamento di più record nella tabella potrebbe compromettere l'integrità referenziale della tabella. In tal caso, quando si chiama Update, il framework genera eccezioni.

Aggiunta di un record a un recordset

Se la funzione membro CanAppend di un recordset restituisce un valore diverso da zero, è possibile aggiungere nuovi record al recordset.

Per aggiungere un nuovo record a un recordset

  1. Assicurarsi che il recordset sia abilitato per le aggiunte.

  2. Chiamare la funzione membro AddNew dell'oggetto recordset.

    AddNew preparerà il recordset in modo che funga da buffer di modifica. Tutti i membri dati di campo vengono impostati sul valore speciale Null e contrassegnati come invariati. In tal modo, quando si chiama Update, verranno scritti nell'origine dati solo i valori modificati.

  3. Impostare i valori dei membri dati di campo del nuovo record.

    Assegnare i valori ai membri dati di campo. I membri dati a cui non vengono assegnati valori non verranno scritti nell'origine dati.

  4. Chiamare la funzione membro Update dell'oggetto recordset.

    Update completa l'aggiunta scrivendo il nuovo record nell'origine dati. Per informazioni sugli effetti della mancata riuscita della chiamata a Update, vedere Recordset: aggiornamento dei record (ODBC).

Per informazioni sull'aggiunta di record e sui casi in cui è possibile visualizzare i record aggiunti nel recordset, vedere Recordset: funzionamento dei metodi AddNew, Edit e Delete (ODBC).

Nell’esempio seguente viene illustrata l'aggiunta di un nuovo record:

if( !rsStudent.Open( ) )
    return FALSE;
if( !rsStudent.CanAppend( ) )
    return FALSE;                      // no field values were set
rsStudent.AddNew( );
rsStudent.m_strName = strName;
rsStudent.m_strCity = strCity;
rsStudent.m_strStreet = strStreet;
if( !rsStudent.Update( ) )
{
    AfxMessageBox( "Record not added; no field values were set." );
    return FALSE;
}
SuggerimentoSuggerimento

Per annullare una chiamata ad AddNew o a Edit, è sufficiente eseguire un'altra chiamata ad AddNew o a Edit oppure chiamare Move con il parametro AFX_MOVE_REFRESH. Verranno ripristinati i valori precedenti dei membri dati e continuerà a essere attivata la modalità Edit o Add.

Modifica di un record in un recordset

Se la funzione membro CanUpdate del recordset restituisce un valore diverso da zero, è possibile modificare i record esistenti.

Per modificare un record esistente in un recordset

  1. Assicurarsi che il recordset sia aggiornabile.

  2. Passare al record che si desidera aggiornare.

  3. Chiamare la funzione membro Edit dell'oggetto recordset.

    Edit preparerà il recordset in modo che funga da buffer di modifica. Tutti i membri dati di campo vengono contrassegnati in modo che il recordset possa in seguito indicare eventuali modifiche apportate a tali membri. Quando si chiama Update, i nuovi valori dei membri dati di campo modificati vengono scritti nell'origine dati.

  4. Impostare i valori dei membri dati di campo del nuovo record.

    Assegnare i valori ai membri dati di campo. I membri dati a cui non si assegnano valori resteranno invariati.

  5. Chiamare la funzione membro Update dell'oggetto recordset.

    Update completa la modifica scrivendo il record modificato nell'origine dati. Per informazioni sugli effetti della mancata riuscita della chiamata a Update, vedere Recordset: aggiornamento dei record (ODBC).

Dopo che un record viene modificato, esso rimane il record corrente.

Nell'esempio riportato di seguito viene illustrata un'operazione Edit. Si suppone che l'utente sia passato a un record che desidera modificare.

rsStudent.Edit( );
rsStudent.m_strStreet = strNewStreet;
rsStudent.m_strCity = strNewCity;
rsStudent.m_strState = strNewState;
rsStudent.m_strPostalCode = strNewPostalCode;
if( !rsStudent.Update( ) )
{
    AfxMessageBox( "Record not updated; no field values were set." );
    return FALSE;
}
SuggerimentoSuggerimento

Per annullare una chiamata ad AddNew o a Edit, è sufficiente eseguire un'altra chiamata ad AddNew o a Edit oppure chiamare Move con il parametro AFX_MOVE_REFRESH. Verranno ripristinati i valori precedenti dei membri dati e continuerà a essere attivata la modalità Edit o Add.

Eliminazione di un record da un recordset

Se la funzione membro CanUpdate del recordset restituisce un valore diverso da zero, è possibile eliminare i record.

Per eliminare un record

  1. Assicurarsi che il recordset sia aggiornabile.

  2. Passare al record che si desidera aggiornare.

  3. Chiamare la funzione membro Delete dell'oggetto recordset.

    Delete contrassegnerà immediatamente il record come eliminato, sia nel recordset che nell'origine dati.

    A differenza di AddNew ed Edit, Delete non ha una chiamata a Update corrispondente.

  4. Passare a un altro record.

    Nota

    Quando ci si sposta all'interno di un recordset, non è possibile ignorare i record eliminati. Per ulteriori informazioni, vedere la funzione membro IsDeleted.

Nell'esempio riportato di seguito viene illustrata un'operazione Delete. Si suppone che l'utente sia passato a un record che desidera eliminare. Dopo la chiamata a Delete, è necessario spostarsi su un nuovo record.

rsStudent.Delete( );
rsStudent.MoveNext( );

Per ulteriori informazioni sugli effetti delle funzioni membro AddNew, Edit e Delete, vedere Recordset: aggiornamento dei record (ODBC).

Vedere anche

Concetti

Recordset (ODBC)

Recordset: blocco dei record (ODBC)