Recordset (ODBC)

Le informazioni contenute in questo argomento sono valide per le classi ODBC MFC.

Un oggetto CRecordset rappresenta un set di record selezionati da un'origine dati. I record possono provenire da:

  • Una tabella.

  • Una query.

  • Una stored procedure che accede a una o più tabelle.

Un esempio di recordset basato su una tabella è "tutti i clienti", che accede a una tabella Customers. Un esempio di query è "tutte le fatture per Joe Smith". Un esempio di recordset basato su una stored procedure (talvolta chiamata query predefinita) è "tutti gli account delinquenti", che richiama una stored procedure nel database back-end. Un recordset può eseguire il join di due o più tabelle dalla stessa origine dati, ma di tabelle da diverse origini dati.

Nota

Alcuni driver ODBC supportano le viste del database. Una vista, in questo senso, è una query originariamente creata l'istruzione SQL CREATE VIEW.

Funzionalità dell'oggetto Recordset

Tutti gli oggetti recordset condividono le funzionalità seguenti:

  • Se l'origine dati non è di sola lettura, è possibile specificare il recordset come aggiornabile, con supporto per l'accodamento o di sola lettura. Se il recordset è aggiornabile, è possibile scegliere metodi di blocco ottimistico o pessimistico, disponibili se il driver fornisce il supporto per il blocco appropriato. Se l'origine dati è di sola lettura, il recordset sarà di sola lettura.

  • È possibile chiamare funzioni membro per eseguire lo scorrimento tra i record selezionati.

  • È possibile filtrare i record per vincolare i record selezionati da quelli disponibili.

  • È possibile ordinare i record in ordine crescente o decrescente, in base a una o più colonne.

  • È possibile parametrizzare il recordset per qualificare la selezione del recordset in fase di esecuzione.

Snapshot e Dynaset

Esistono due tipi principali di recordset: snapshot e dynaset. Entrambi sono supportati dalla classe CRecordset. Anche se entrambi condividono le caratteristiche comuni di tutti i recordset, ciascuno estende le funzionalità comuni in un modo specifico. Gli snapshot forniscono una vista statica dei dati e sono utili per i report e altre situazioni in cui si vuole un'istantanea dei dati esistenti in un determinato momento. I dynaset sono utili quando si vuole che gli aggiornamenti apportati da altri utenti siano visibili nel recordset senza dover ripetere una query o aggiornare il recordset. Gli snapshot e dynaset possono essere aggiornabili o di sola lettura. Per visualizzare i record aggiunti o eliminati da altri utenti, chiamare CRecordset:: Requery.

CRecordset consente inoltre di usare altri due tipi di recordset: recordset dinamici e recordset forward-only. I recordset dinamici sono simili ai dynaset, tuttavia i recordset dinamici visualizzano tutti i record aggiunti o eliminati senza chiamare CRecordset::Requery. Per questo motivo, i recordset dinamici sono generalmente costosi rispetto al tempo di elaborazione nel sistema di gestione di database e molti driver ODBC non li supportano. I recordset forward-only, invece, forniscono il metodo più efficiente di accesso ai dati per i recordset che non richiedono aggiornamenti o lo scorrimento all'indietro. È ad esempio possibile usare un recordset forward-only per migrare i dati da un'origine dati a un'altra, quando è necessario solo spostarsi tra i dati in avanti. Per usare un recordset forward-only, è necessario eseguire entrambe le operazioni seguenti:

  • Passare l'opzione CRecordset::forwardOnly come parametro nOpenType della funzione membro Open.

  • Specificare CRecordset::readOnly nel parametro dwOptions di Open.

    Nota

    Per informazioni sui requisiti dei driver ODBC per il supporto dei dynaset, vedere ODBC. Per un elenco dei driver ODBC inclusi in questa versione di Visual C++ e informazioni su come ottenere driver aggiuntivi, vedere Elenco dei driver ODBC.

Recordset

Per ogni singola tabella, vista o stored procedure a cui si vuole accedere, in genere si definisce una classe derivata da CRecordset. L'eccezione è un join di database, in cui un recordset rappresenta le colonne di due o più tabelle. Quando si deriva una classe recordset, si abilita il meccanismo RFX (Record Field Exchange) o il meccanismo bulk record field exchange (RFX), simile al meccanismo DDX (Dialog Data Exchange). RFX e RFX di massa semplificano il trasferimento dei dati dall'origine dati nel recordset. RFX trasferisce inoltre i dati dal recordset nell'origine dati. Per altre informazioni, vedere Record Field Exchange (RFX) e Recordset: Recupero di record in blocco (ODBC).

Un oggetto recordset consente di accedere a tutti i record selezionati. È possibile scorrere i record selezionati usando le funzioni membro CRecordset, come MoveNext e MovePrev. Allo stesso tempo, un oggetto recordset rappresenta solo uno dei record selezionati, il record corrente. È possibile esaminare i campi del record corrente mediante la dichiarazione di variabili membro della classe recordset, che corrispondono alle colonne della tabella o dei record risultanti dalla query sul database. Per informazioni sui membri dati del recordset, vedere Recordset: Architecture (ODBC).

Negli argomenti elencati di seguito vengono forniti dettagli sull'uso degli oggetti recordset. Gli argomenti sono elencati per categorie funzionali e organizzati in modo da consentirne la lettura in sequenza.

Argomenti relativi alle operazioni di apertura, lettura e chiusura di recordset

Argomenti relativi alle operazioni di modifica dei recordset

Argomenti relativi a tecniche più avanzate

Argomenti relativi al funzionamento dei recordset

Vedi anche

Open Database Connectivity (ODBC)
Consumer ODBC MFC
Transazione (ODBC)