TN055: Migrazione di applicazioni di classe Database ODBC MFC per classi DAO MFC

Panoramica

In molte situazioni può essere desiderabile per eseguire la migrazione di applicazioni che utilizzano le classi di database ODBC MFC alle classi di database DAO MFC. Questa nota tecnica dettaglio la maggior parte delle differenze tra le classi ODBC MFC e DAO. Con le differenze nella mente, non dovrebbe essere troppo difficile da migrare applicazioni dalle classi ODBC per le classi MFC se desiderato.

Perché migrare da ODBC a DAO?

Ci sono un certo numero di ragioni per cui si potrebbe desiderare di eseguire la migrazione di applicazioni da classi di Database ODBC alle classi di Database DAO, ma la decisione non è necessariamente semplice o evidente. Una cosa da tenere a mente è che il motore di database Microsoft Jet che viene utilizzato da DAO può leggere qualsiasi origine dati ODBC per i quali si dispone di un driver ODBC. Può essere più efficiente di utilizzare le classi di Database ODBC o chiamare ODBC direttamente da soli, ma il motore di database Microsoft Jet può leggere dati ODBC.

Ci sono alcuni casi semplici che rendono facile la decisione di ODBC/DAO. Per esempio, quando è solo necessario accedere a dati in un formato Microsoft Jet engine in grado di leggere direttamente (formato Access, formato FoxPro, formato Excel e così via) la scelta più ovvia è utilizzare le classi di Database DAO.

Casi più complessi sorgono quando esistono dei vostri dati su un server o su una varietà di diversi server. In questo caso, la decisione di utilizzare le classi di Database ODBC o le classi di Database DAO è difficile. Se volete fanno le cose come join eterogenei (unire dati dai server in più formati come SQL Server e Oracle), poi il motore di database Microsoft Jet si esibirà il join per voi, piuttosto che ti costringe a fare il lavoro necessario se utilizzate le classi di Database ODBC o chiamato ODBC direttamente. Se si utilizza un driver ODBC che supporta cursori del conducente, la scelta migliore potrebbe essere le classi di Database ODBC.

La scelta può essere complicata, così si potrebbe desiderare di scrivere del codice di esempio per testare le prestazioni dei vari metodi dato le vostre esigenze particolari. Questa nota tecnica presuppone che voi avete preso la decisione per la migrazione da classi di Database ODBC alle classi di Database DAO.

Somiglianze tra classi di Database ODBC e classi di Database DAO MFC

Il disegno originale delle classi ODBC MFC era basato sul modello a oggetti DAO che è stato in uso in Microsoft Access e Microsoft Visual Basic. Questo significa che ci sono molte caratteristiche comuni delle classi ODBC e DAO MFC, non tutti saranno elencate in questa sezione. In generale, i modelli di programmazione sono gli stessi.

Per evidenziare alcune somiglianze:

Per esempio in entrambi i modelli è la procedura per recuperare i dati per creare e aprire un oggetto di database, creare e aprire un oggetto recordset e navigare (muovere) anche se i dati di esecuzione di alcune operazioni.

Differenze tra ODBC e classi DAO MFC

Le classi DAO includono più oggetti e un ricco set di metodi, ma questa sezione dettaglio solo le differenze in classi simili e funzionalità.

Probabilme&nte le più ovvie differenze tra le classi sono i cambiamenti di nome simile classi e funzioni globali. La seguente lista mostra il nome modifiche ofnbsp; oggetti, metodi e funzioni globali associate con le classi di database:

Classe o funzione Equivalente in classi DAO MFC
CDatabase CDaoDatabase
CDatabase::ExecuteSQL CDaoDatabase::Execute
CRecordset CDaoRecordset
CRecordset::GetDefaultConnect CDaoRecordset::GetDefaultDBName
CFieldExchange Oggetto CDaoFieldExchange
RFX_Bool DFX_Bool
RFX_Byte DFX_Byte
RFX_Int DFX_Short
RFX_Long DFX_Long
DFX_Currency
RFX_Single DFX_Single
RFX_Double DFX_Double
RFX_Date * DFX_Date (COleDateTime-base)
RFX_Text DFX_Text
RFX_Binary DFX_Binary
RFX_LongBinary DFX_LongBinary

* La funzione RFX_Date è basata su CTime e TIMESTAMP_STRUCT.

Di seguito sono elencati i grandi cambiamenti alla funzionalità che possono interessare l'applicazione e richiedono cambiamenti di nome più semplice.

  1. Le costanti e le macro utilizzate per specificare il tipo aprire una cose come il recordset e recordset opzioni sono state modificate.

    Con le classi ODBC MFC necessari per definire queste opzioni tramite macro o enumerato tipi.

    Con le classi DAO, DAO fornisce la definizione di queste opzioni in un file di intestazione (DBDAOINT.H). quindi il tipo di recordset è un membro enumerato di CRecordset, ma con DAO è una costante invece. Ad esempio utilizzare istantanea quando si specifica il tipo di CRecordset in ODBC ma DB_OPEN_SNAPSHOT quando si specifica il tipo di CDaoRecordset.

  2. Il tipo di recordset di default per CRecordset è istantanea , mentre il tipo di recordset predefinito per CDaoRecordset è dynaset (vedi la nota qui sotto per un'ulteriore questione circa istantanee di classe ODBC).

  3. La classe ODBC CRecordset ha un'opzione per creare un tipo di oggetto recordset di tipo forward-only. Nella classe CDaoRecordset , forward-only è non un tipo di recordset, ma piuttosto una proprietà (o opzione) di alcuni tipi di recordset.

  4. Un recordset sola aggiunta all'apertura di un oggetto CRecordset significava che potrebbero essere leggere e aggiunto dati del recordset. Con oggetto CDaoRecordset , l'opzione di sola aggiunta significa letteralmente che possono essere solo dati del recordset accodato (e non leggere).

  5. Le funzioni membro di transazione le classi di ODBC sono membri di CDatabase e agire a livello di database. Nelle classi DAO, le funzioni membro di transazione sono membri di una classe di livello superiore (CDaoWorkspace) e quindi possono avere un impatto più oggetti CDaoDatabase , condividendo la stessa area di lavoro (spazio della transazione).

  6. La classe di eccezione è stata modificata. CDBExceptions vengono gettati nelle classi ODBC e CDaoExceptions nelle classi DAO.

  7. RFX_Date utilizza oggetti CTime e TIMESTAMP_STRUCT mentre DFX_Date utilizza COleDateTime. Il COleDateTime è praticamente identico a CTime, ma è basato su una 8 byte OLE data piuttosto che un 4 byte time_t quindi può contenere una gamma molto più grande dei dati.

&Notanbsp;  Istantanee DAO (CDaoRecordset) sono di sola lettura, mentre gli snapshot ODBC (CRecordset) possono essere aggiornabili a seconda del driver e utilizzo della libreria di cursori ODBC. Se si utilizza la libreria di cursori, CRecordset istantanee sono aggiornabili. Se si utilizza uno qualsiasi dei driver Microsoft Desktop Driver Pack 3.0 senza la libreria di cursori ODBC, le istantanee di CRecordset sono di sola lettura. Se si utilizza un altro autista, controllare la documentazione del conducente per vedere se istantanee (STATIC_CURSORS) sono di sola lettura.

&Note tecniche per numero |nbsp; Note tecniche per la categoria

Index