TN055: MFC ODBC データベース クラス アプリケーションを MFC DAO クラスの移行

概要

多くの状況では、MFC の ODBC データベース クラスは MFC の DAO データベース クラスを使用するアプリケーションを移行することが望ましいかもしれません。このテクニカル ノートでは、MFC ODBC、DAO クラスの違いのほとんどについて詳しく説明します。心の違いと、それに応じて ODBC クラスから MFC クラスへアプリケーションを移行するにはさほど困難ではないです。

ODBC から DAO へ移行する理由?

なぜ、ODBC データベース クラスから DAO データベース クラスには、アプリケーションを移行するとして可能性がありますが、決定は必ずしも単純なまたは明らかではない理由の数です。1 つの事を念頭に DAO で使用される Microsoft Jet データベース エンジンのことは、ODBC ドライバーがある ODBC データ ソースが読み込まれます。ODBC データベース クラスを使用してまたは自分が Microsoft Jet データベース エンジン ODBC データを読むことができます直接 ODBC を呼び出す方が効率的かもしれません。

ODBC、DAO が簡単に決断。 いくつかの単純なケースです。たとえば、のみ (Access 形式、FoxPro 形式、Excel 形式、) の明白な選択肢 DAO データベース クラスを使用するか直接 Microsoft Jet エンジンが読むことができる形式でデータにアクセスする場合します。

複雑な場合は、サーバー上または異なるサーバーのさまざまなデータが存在する場合に発生します。この場合、ODBC データベース クラスまたは DAO データベース クラスを使用するという決定が難しいものです。あなたがそうしたければ異種結合 (結合データ) の SQL Server と Oracle のような複数の形式でサーバーからのもののようし、Microsoft Jet データベース エンジンがよりもむしろを強制的に、ODBC データベース クラスを使用または ODBC を直接呼び出す場合に必要な作業を行うには、結合を実行します。ドライバー カーソルをサポートする ODBC ドライバを使用している場合は、最善の選択は、ODBC データベース クラスがあります。

特別なニーズを与え、さまざまな方法のパフォーマンスをテストするにはいくつかのサンプル コードを記述する必要がありますので、選択が複雑になることができます。このテクニカル ノートで、ODBC データベース クラスから DAO データベース クラスに移行するには、決定している前提としています。

ODBC データベース クラスと MFC DAO データベース クラスの間の類似点

MFC ODBC クラスの元のデザインは、Microsoft Access や Microsoft Visual Basic で使用されている DAO オブジェクト モデルに基づいています。これは、すべてここに記載されては、ODBC と DAO MFC のクラスの多くの一般的な機能があることを意味します。一般的に、プログラミング モデルは、同じです。

いくつかの類似点を強調するには:

データを取得する手順の例の両方のモデルを作成してデータベース オブジェクトを開くには、作成するレコード セット オブジェクトを開くし、(移動) がいくつかの操作を実行してデータを移動。

ODBC と DAO MFC クラスとの違い

オブジェクトと豊富な一連のメソッド、DAO クラスが含まれますが、ここだけのようなクラスや機能の違いについて詳しく説明します。

おそらくクラス間の最も明白な違いは、名前の変更と同様のクラスとグローバル関数です。名前の変更 ofnbsp を次に示します。オブジェクト、メソッド、および、データベース クラスと関連付けられたグローバル関数(&N):

クラスまたは関数 MFC DAO クラスで相当
CDatabase CDaoDatabase
:Executesql CDaoDatabase::Execute
CRecordset CDaoRecordset
CRecordset::GetDefaultConnect CDaoRecordset::GetDefaultDBName
CFieldExchange CDaoFieldExchange
RFX_Bool DFX_Bool
RFX_Byte DFX_Byte
DFX_Short
動作を幅広く DFX_Long
DFX_Currency
RFX_Single DFX_Single
RFX_Double DFX_Double
RFX_Date ※ DFX_Date(COleDateTime-ベース)
RFX_Text DFX_Text
RFX_Binary DFX_Binary
RFX_LongBinary DFX_LongBinary

RFX_Date関数は、 CTimeTIMESTAMP_STRUCTに基づきます。

あなたのアプリケーションに影響を与える可能性がありますよりも単純な名前の変更を必要とする主な機能変更を以下に示します。

  1. レコード セットのようなものを開き、レコード セットを開くオプションを指定するために使用するマクロ、定数を変更されています。

    ODBC クラスと MFC マクロでこれらのオプションを定義するために必要または列挙型。

    DAO クラスでは、DAO の定義のヘッダー ファイル (DBDAOINT。 これらのオプションの提供します。H). したがって、レコード セットの種類、列挙メンバーのCRecordsetが DAO を定数代わりにです。CRecordsetの種類 ODBC がDB_OPEN_SNAPSHOT CDaoRecordsetの種類を指定するときが指定する場合にスナップショットを使用するたとえば。

  2. CDaoRecordset ダイナセット CRecordsetを既定のレコード セットの種類が既定のレコード セットの種類のスナップショットです (ODBC クラスのスナップショットについて追加の問題は、次の注を参照)。

  3. ODBC CRecordsetクラスでは、前方参照だけのレコード セットの種類を作成するオプションがあります。CDaoRecordsetクラスでは、ない、レコード セットの種類がむしろプロパティ (またはオプション) 特定の種類のレコード セットの前方だけです。

  4. CRecordsetオブジェクトを開くとき、追加専用のレコード セットは、レコード セットのデータを読み取り、追加され可能性があることを意味しました。CDaoRecordsetオブジェクトでは、追加専用のオプション文字通り、レコード セットのデータのみになります追加 (および読み取り)。

  5. ODBC クラスのトランザクション メンバ関数CDatabaseと行為は、データベース レベルのメンバーです。DAO クラスは、トランザクションのメンバー関数はより高いレベルのクラス (CDaoWorkspace) のメンバーであるでしたがって同じワークスペース (トランザクション スペース) を共有する複数のCDaoDatabaseオブジェクトに影響を与える可能性があります。

  6. 例外クラスが変更されました。DAO クラスのCDBExceptionsがスローされます、ODBC クラスとCDaoExceptionsで。

  7. DFX_Date COleDateTime使用中RFX_Date CTimeTIMESTAMP_STRUCTオブジェクトを使用します。COleDateTime CTimeをほぼ同じですが、多くの幅広いデータを保持することができますので、8 バイトの OLE日付ではなく、4 バイトtime_tに基づきます。

特価;ODBC (CRecordset) スナップショット、ドライバーと ODBC カーソル ライブラリの使用によって更新可能な場合がありますが DAO (CDaoRecordset) スナップショットは読み取り専用です。カーソル ライブラリを使用している場合は、 CRecordsetのスナップショットは更新可能です。デスクトップ ドライバー パック 3.0 から Microsoft ドライバの ODBC カーソル ライブラリを使用している場合は、 CRecordsetスナップショットは読み取り専用です。別のドライバーを使用している場合は、スナップショット (STATIC_CURSORS) が読み取り専用かを確認するには、ドライバーのドキュメントを確認します。(&N)。

番号順テクニカル ノート|nbsp;カテゴリ別テクニカル ノート(&N)

Index