TN055: Migrieren von MFC-ODBC-Datenbank-Klasse Anwendungen zu MFC-DAO-Klassen

Übersicht

In vielen Situationen kann es wünschenswert sein, Anwendungen zu migrieren, die MFC ODBC-Datenbankklassen zu MFC DAO-Datenbankklassen verwenden. Diese technische Hinweis wird die meisten Unterschiede zwischen den MFC ODBC- und DAO-Klassen beschrieben. Mit den Unterschieden im Auge sollte es nicht allzu schwer aus den ODBC-Klassen die MFC-Klassen Migrieren von Anwendungen bei Bedarf sein.

Warum Migrieren von ODBC zu DAO?

Es gibt eine Reihe von Gründen, warum Sie können Anwendungen aus der ODBC-Datenbankklassen auf die DAO-Datenbankklassen migriert, aber die Entscheidung ist nicht unbedingt einfach oder offensichtlich. Lesen eine Sache im Auge zu behalten ist, dass das Microsoft Jet-Datenbankmodul, das von DAO verwendet wird, kann beliebige ODBC-Datenquelle Sie für die Sie einen ODBC-Treiber haben. Es ist möglicherweise effizienter, die ODBC-Datenbankklassen verwenden oder rufen Sie ODBC direkt selbst, aber die Microsoft Jet Datenbank Engine ODBC-Daten lesen kann.

Es gibt einige einfache Fälle, die die ODBC/DAO-Entscheidung erleichtern. Beispielsweise benötigen Wenn Sie nur Zugriff auf Daten in einem Format, das das Microsoft Jet-Datenbankmodul gelesen werden können, direkt (Access-Format, FoxPro, Format, Excel-Format und So weiter) die offensichtliche Wahl ist, verwenden Sie die DAO-Datenbankklassen.

Komplexere Fälle entstehen, wenn Ihre Daten auf einem Server oder auf einer Vielzahl von verschiedenen Servern vorhanden ist. In diesem Fall ist die Entscheidung, die ODBC-Datenbankklassen oder die DAO-Datenbankklassen verwenden ein schwieriges Thema. Wenn Sie möchten Dinge tun, wie heterogene Verknüpfungen (Join Daten in mehreren Formaten wie SQL Server und Oracle Server), dann das Microsoft Jet-Datenbankmodul führt die Verknüpfung für Sie anstelle zwingt Sie die notwendige Arbeit zu tun, wenn Sie die ODBC-Datenbankklassen verwendet oder ODBC direkt aufgerufen. Wenn Sie einen ODBC-Treiber, der Treiber Cursor unterstützt verwenden, könnte Ihre beste Wahl in die ODBC-Datenbankklassen.

Die Wahl kann kompliziert sein, so Sie einige Beispiel-Code zu testen, die Leistung der verschiedenen Methoden gegeben, Ihre speziellen Bedürfnisse zu schreiben möchten vielleicht. Diese technische Hinweis wird davon ausgegangen, dass Sie von der ODBC-Datenbankklassen auf die DAO-Datenbankklassen migriert entschieden haben.

Ähnlichkeiten zwischen ODBC-Datenbankklassen und MFC-DAO-Datenbankklassen

Der ursprüngliche Entwurf der MFC-ODBC-Klassen basiert auf das DAO-Objektmodell, die in Microsoft Access und Microsoft Visual Basic verwendet wurde. Dies bedeutet, dass es viele Gemeinsamkeiten die ODBC- und DAO-MFC-Klassen, die nicht alle in diesem Abschnitt aufgeführt werden. Im allgemeinen entsprechen die Programmiermodelle.

Ein paar Gemeinsamkeiten hervorheben:

Zum Beispiel ist in beiden Modellen das Verfahren zum Abrufen von Daten zu erstellen und Öffnen eines Datenbankobjekts, erstellen ein Recordset-Objekt öffnen und navigieren (verschieben) aber die Daten einiger Vorgänge durchführen.

Unterschiede zwischen ODBC und DAO-MFC-Klassen

Die DAO-Klassen sind weitere Objekte und einen umfangreicheren Satz von Methoden, sondern in diesem Abschnitt werden nur die Unterschiede in ähnlichen Klassen und Funktionen detail.

Wahrscheinlich sind die offensichtlichsten Unterschiede zwischen den Klassen der &Namensänderungen für ähnliche Klassen und globalen Funktionen. Die folgende Liste zeigt die Namen Änderungen Ofnbsp; die Objekte, Methoden und globale Funktionen verbunden mit den Datenbankklassen:

Klasse oder Funktion Gegenwert in MFC-DAO-Klassen
CDatabase CDaoDatabase
CDatabase:: ExecuteSQL CDaoDatabase::Execute
CRecordset CDaoRecordset
GetDefaultConnect CDaoRecordset::GetDefaultDBName
CFieldExchange 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-basiert)
RFX_Text DFX_Text
RFX_Binary DFX_Binary
RFX_LongBinary DFX_LongBinary

* Die Funktion RFX_Date basiert auf CTime und Typ TIMESTAMP_STRUCT.

Wichtigen Änderungen der Funktionalität können Ihre Anwendung beeinflussen und verlangen mehr als einfachen Namensänderungen sind unten aufgeführt.

  1. Die Konstanten und Makros verwendet, um anzugeben, wie Recordset öffnen und Recordset öffnen Optionen wurden geändert.

    MFC die ODBC-Klassen erforderlich, um diese Optionen über Makros definieren oder Typen aufgelistet.

    DAO stellt mit den DAO-Klassen die Definition dieser Optionen in einer Header-Datei (DBDAOINT.H). so ist der Recordsettyp aufgezählten Mitglied von CRecordset, aber mit DAO ist es eine Konstante statt. Zum Beispiel würden Sie Snapshot verwenden, wenn Sie den Typ von CRecordset in ODBC aber DB_OPEN_SNAPSHOT angeben, bei der Angabe von CDaoRecordset.

  2. Recordset der Standardtyp für CRecordset ist während der Standardtyp Recordset snapshot für CDaoRecordset Dynaset (siehe den Hinweis unten für eine zusätzliche Frage zu ODBC-Klasse Snapshots).

  3. Die ODBC- CRecordset -Klasse hat eine Option, um eine vorwärts-Recordset zu erstellen. In der Klasse CDaoRecordset Vorwärtscursor ist kein Recordsettyp, sondern eher eine Eigenschaft (oder Option) bestimmter Arten von recordsets.

  4. Ein Append-Recordset beim Öffnen ein CRecordset -Objekt bedeutete, dass die Recordset Daten lesen und angehängt werden konnten. Mit CDaoRecordset -Objekt, die Append-Option bedeutet wörtlich, dass die Recordset Daten können nur angefügt (und nicht gelesen).

  5. Die ODBC-Klassen Transaktion Memberfunktionen sind Mitglieder der CDatabase und Act auf der Datenbankebene. In den DAO-Klassen die Transaktion Memberfunktionen sind Mitglieder von einer höheren Ebene Klasse (CDaoWorkspace) und somit können Auswirkungen auf mehrere CDaoDatabase -Objekte teilen den gleichen Arbeitsbereich (Transaktionsprotokoll-Speicherplatz).

  6. Die Exception-Klasse wurde geändert. CDBExceptions sind in die ODBC-Klassen und CDaoExceptions in den DAO-Klassen ausgelöst.

  7. RFX_Date verwendet CTime und Typ TIMESTAMP_STRUCT Objekte, während DFX_Date COleDateTimeverwendet. Die COleDateTime ist fast identisch mit CTime, sondern basiert auf einer 8-Byte-OLE- Datum anstatt eine 4-Byte- Time_t daher eine viel größere Datenmenge speichern können.

Hinweis&Nbsp;  DAO (CDaoRecordset) Snapshots sind schreibgeschützt, während ODBC (CRecordset) Snapshots je nach Treiber und Verwendung der ODBC-Cursorbibliothek aktualisiert werden können. Wenn Sie die Cursor-Bibliothek verwenden, sind CRecordset Snapshots aktualisiert werden. Wenn Sie eines der Microsoft-Treiber von Desktop Driver Pack 3.0 ohne die ODBC-Cursorbibliothek verwenden, sind die CRecordset -Snapshots schreibgeschützt. Wenn Sie eine andere Treiber verwenden, Überprüfen des Fahrers Dokumentation um festzustellen, ob Snapshots (STATIC_CURSORS) schreibgeschützt sind.

Technische Hinweise von &Nummer |nbsp; Technische Hinweise nach Kategorie

Index