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 diOpen
.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
Recordset: dichiarazione di una classe per una query predefinita (ODBC)
Recordset: recupero di somme e altri risultati aggregati (ODBC)
Argomenti relativi al funzionamento dei recordset
Vedi anche
Open Database Connectivity (ODBC)
Consumer ODBC MFC
Transazione (ODBC)