Dynaset

Questo argomento descrive i dynaset e ne illustra la disponibilità.

Nota

Questo argomento si applica alle classi ODBC MFC, incluso CRecordset. Per informazioni sui dynaset nelle classi DAO, vedere CDaoRecordset. Con DAO è possibile aprire recordset di tipo dynaset.

Un dynaset è un recordset con proprietà dinamiche. Durante la sua durata, un oggetto recordset in modalità dynaset (in genere denominato dynaset) rimane sincronizzato con l'origine dati nel modo seguente. In un ambiente multiutente, altri utenti potrebbero modificare o eliminare record presenti nel dynaset o aggiungere record alla tabella rappresentata dal dynaset. I record aggiunti o eliminati dall'applicazione dal recordset vengono riflessi nel dynaset. I record aggiunti da altri utenti alla tabella non verranno riflessi nel dynaset finché non si ricompila il dynaset chiamando la relativa Requery funzione membro. Quando altri utenti eliminano i record, il codice MFC ignora le eliminazioni nel recordset. Le modifiche di modifica di altri utenti ai record esistenti vengono riflesse nel dynaset non appena si scorre il record interessato.

Analogamente, le modifiche apportate ai record in un dynaset vengono riflesse in dynaset in uso da altri utenti. I record aggiunti non vengono riflessi nei dynaset di altri utenti fino a quando non rieseguino la query sui loro dynaset. I record eliminati vengono contrassegnati come "eliminati" nei recordset di altri utenti. Se si dispone di più connessioni allo stesso database (più CDatabase oggetti), i recordset associati a tali connessioni hanno lo stesso stato dei recordset di altri utenti.

I dynaset sono più utili quando i dati devono essere dinamici, ad esempio in un sistema di prenotazione aerea.

Nota

Per usare dynaset, è necessario disporre di un driver ODBC per l'origine dati che supporta dynaset e non deve essere caricata la libreria di cursori ODBC. Per altre informazioni, vedere Disponibilità di Dynasets.

Per specificare che un recordset è un dynaset, passare CRecordset::dynaset come primo parametro alla funzione membro dell'oggetto Open recordset.

Nota

Per i dynaset aggiornabili, il driver ODBC deve supportare istruzioni di aggiornamento posizionate o la ::SQLSetPos funzione API ODBC. Se entrambi sono supportati, MFC usa ::SQLSetPos per l'efficienza.

Disponibilità di Dynaset

Le classi di database MFC supportano dynaset se vengono soddisfatti i requisiti seguenti:

  • La DLL della libreria di cursori ODBC non deve essere utilizzata per questa origine dati.

    Se viene usata la libreria di cursori, maschera alcune funzionalità del driver ODBC sottostante necessarie per il supporto di dynaset. Se si desidera usare dynaset (e il driver ODBC ha la funzionalità necessaria per i dynaset, come descritto nella parte restante di questa sezione), è possibile che MFC non carichi la libreria di cursori quando si crea un CDatabase oggetto . Per altre informazioni, vedere ODBC e la funzione membro OpenEx o Open della classe CDatabase.

    Nella terminologia ODBC, i dynaset e gli snapshot vengono definiti cursori. Un cursore è un meccanismo usato per tenere traccia della relativa posizione in un recordset.

  • Il driver ODBC per l'origine dati deve supportare cursori basati su keyset.

    I cursori basati su keyset gestiscono i dati da una tabella recuperando e archiviando un set di chiavi. Le chiavi vengono utilizzate per ottenere i dati correnti dalla tabella quando l'utente scorre su un record specifico. Per determinare se il driver fornisce questo supporto, chiamare la ::SQLGetInfo funzione API ODBC con il parametro SQL_SCROLL_OPTIONS .

    Se si tenta di aprire un dynaset senza supporto keyset, si ottiene un CDBException oggetto con il valore di codice restituito AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED.

  • Il driver ODBC per l'origine dati deve supportare il recupero esteso.

    Il recupero esteso è la possibilità di scorrere verso l'indietro e in avanti sui record risultanti della query SQL. Per determinare se il driver supporta questa capacità, chiamare la ::SQLGetFunctions funzione API ODBC con il parametro SQL_API_SQLEXTENDEDFETCH .

Se si desiderano dynaset aggiornabili (o snapshot), il driver ODBC deve anche supportare la ::SQLSetPos funzione API ODBC o gli aggiornamenti posizionati. La ::SQLSetPos funzione consente a MFC di aggiornare l'origine dati senza inviare istruzioni SQL. Se questo supporto è disponibile, MFC lo usa in preferenza per eseguire aggiornamenti tramite SQL. Per determinare se il driver supporta ::SQLSetPos, chiamare ::SQLGetInfo con il parametro SQL_POS_OPERATIONS .

Gli aggiornamenti posizionati usano la sintassi SQL (nel formato WHERE CURRENT OF<cursorname>) per identificare una particolare riga nella tabella nell'origine dati. Per determinare se il driver supporta gli aggiornamenti posizionati, chiamare ::SQLGetInfo con il parametro SQL_POSITIONED_STATEMENTS .

In genere, i dynaset MFC (ma non i recordset forward-only) richiedono un driver ODBC con conformità API di livello 2. Se il driver per l'origine dati è conforme al set di API di livello 1, è comunque possibile usare snapshot aggiornabili e di sola lettura e recordset forward-only, ma non dynaset. Tuttavia, un driver di livello 1 può supportare dynaset se supporta il recupero esteso e i cursori basati su keyset. Per altre informazioni sui livelli di conformità ODBC, vedere ODBC.

Nota

Se si vogliono usare sia snapshot che dynaset, è necessario basarli su due oggetti diversi CDatabase (due connessioni diverse).

A differenza degli snapshot, che usano l'archiviazione intermedia gestita dalla libreria di cursori ODBC, dynaset recupera un record direttamente dall'origine dati non appena si scorre verso di esso. In questo modo i record originariamente selezionati dal dynaset vengono sincronizzati con l'origine dati.

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.

Vedi anche

Open Database Connectivity (ODBC)