Condividi tramite


ODBC: libreria di cursori ODBC

In questo argomento viene descritta la libreria di cursori ODBC e viene illustrato come usarlo. Per altre informazioni, vedere:

La libreria di cursori ODBC è una libreria a collegamento dinamico (DLL) che risiede tra Gestione driver ODBC e il driver. In termini ODBC, un driver mantiene un cursore per tenere traccia della relativa posizione nel recordset. Il cursore contrassegna la posizione nel recordset a cui è già stato eseguito lo scorrimento, ovvero il record corrente.

Driver ODBC di livello 1 e libreria di cursori

La libreria di cursori ODBC offre ai driver di livello 1 le nuove funzionalità seguenti:

  • Scorrimento avanti e indietro. I driver di livello 2 non necessitano della libreria di cursori perché sono già scorrevoli.

  • Supporto per gli snapshot. La libreria di cursori gestisce un buffer contenente i record dello snapshot. Questo buffer riflette le eliminazioni e le modifiche del programma nei record, ma non le aggiunte, le eliminazioni o le modifiche di altri utenti. Di conseguenza, lo snapshot è corrente solo come buffer della libreria di cursori. Il buffer non riflette anche le proprie aggiunte fino a quando non si chiama Requery. I dynaset non usano la libreria di cursori.

La libreria di cursori offre snapshot (cursori statici) anche se normalmente non sono supportati dal driver. Se il driver supporta già cursori statici, non è necessario caricare la libreria di cursori per ottenere il supporto dello snapshot. Se si usa la libreria di cursori, è possibile usare solo snapshot e recordset forward-only. Se il driver supporta i dynaset (KEY edizione StandardT_DRIVEN cursori) e si desidera usarli, non è necessario usare la libreria di cursori. Se si vogliono usare sia snapshot che dynaset, è necessario basarli su due oggetti diversi CDatabase (due connessioni diverse), a meno che il driver non supporti entrambi.

Colonne Aggiornamenti e timestamp posizionate

Nota

Le origini dati ODBC sono accessibili tramite le classi ODBC MFC, come descritto in questo argomento o tramite le classi DAO (Data Access Object) MFC.

Nota

Se il driver ODBC supporta SQLSetPos, che MFC usa se disponibile, questo argomento non si applica all'utente.

La maggior parte dei driver di livello 1 non supporta gli aggiornamenti posizionati. Tali driver si basano sulla libreria di cursori per emulare le funzionalità dei driver di livello 2 in questo senso. La libreria di cursori emula il supporto degli aggiornamenti posizionati eseguendo un aggiornamento cercato nei campi non modificabili.

In alcuni casi, un recordset potrebbe contenere una colonna timestamp come uno di questi campi non modificabili. Due problemi si verificano quando si usano recordset MFC con tabelle che contengono colonne timestamp.

Il primo problema riguarda gli snapshot aggiornabili nelle tabelle con colonne timestamp. Se la tabella a cui è associato lo snapshot contiene una colonna timestamp, è necessario chiamare dopo aver chiamato RequeryEdit e Update. In caso contrario, potrebbe non essere possibile modificare nuovamente lo stesso record. Quando si chiama Edit e quindi Update, il record viene scritto nell'origine dati e la colonna timestamp viene aggiornata. Se non si chiama Requery, il valore timestamp per il record nello snapshot non corrisponde più al timestamp corrispondente nell'origine dati. Quando si tenta di aggiornare di nuovo il record, l'origine dati potrebbe non consentire l'aggiornamento a causa della mancata corrispondenza.

Il secondo problema riguarda le limitazioni della classe CTime quando viene usata con la RFX_Date funzione per trasferire informazioni sull'ora e sulla data da o verso una tabella. L'elaborazione dell'oggetto CTime impone un sovraccarico sotto forma di elaborazione intermedia aggiuntiva durante il trasferimento dei dati. L'intervallo di date degli CTime oggetti potrebbe anche essere troppo limitato per alcune applicazioni. Una nuova versione della RFX_Date funzione accetta un parametro ODBC TIMESTAMP_STRUCT anziché un CTime oggetto . Per altre informazioni, vedere RFX_Date in Macro e globali nella Guida di riferimento MFC.

Uso della libreria di cursori

Quando ci si connette a un'origine dati, chiamando CDatabase::OpenEx o CDatabase::Open , è possibile specificare se usare la libreria di cursori per l'origine dati. Se si creeranno snapshot in tale origine dati, specificare l'opzione CDatabase::useCursorLib nel dwOptions parametro su OpenEx o specificare TRUE per il parametro bUseCursorLib su Open (il valore predefinito è TRUE). Se il driver ODBC supporta dynaset e si desidera aprire dynaset nell'origine dati, non usare la libreria di cursori (maschera alcune funzionalità del driver necessarie per i dynaset). In tal caso, non specificare CDatabase::useCursorLib in OpenEx o specificare FAL edizione Standard per il parametro bUseCursorLib in Open.

Vedi anche

Nozioni fondamentali su ODBC