次の方法で共有


CDaoRecordset::Open

レコードセットのレコードを取得するには、このメンバー関数を呼び出す必要があります。

virtual void Open(
   int nOpenType = AFX_DAO_USE_DEFAULT_TYPE,
   LPCTSTR lpszSQL = NULL,
   int nOptions = 0 
);
virtual void Open(
   CDaoTableDef* pTableDef,
   int nOpenType = dbOpenTable,
   int nOptions = 0 
);
virtual void Open(
   CDaoQueryDef* pQueryDef,
   int nOpenType = dbOpenDynaset,
   int nOptions = 0 
);

パラメーター

  • nOpenType
    次のいずれかの値が返されます。

    • 双方向のスクロールdbOpenDynaset A のダイナセット型のレコードセット。既定値です。

    • 双方向のスクロールdbOpenTable テーブル A の型のレコードセット。

    • 双方向のスクロールdbOpenSnapshot A のスナップショット タイプのレコードセット。

  • lpszSQL
    次のいずれかを含む文字列のポインター:

    • null のポインター。

    • 一つ以上の tabledefs や querydefs の名前 (コンマで区切られた)。

    • SQL の select の SQL ステートメント (省略可 WHERE または ORDERBY の句と)。

    • パススルー クエリ。

  • nOptions
    次に示すオプションを一つ以上使用します。既定値は 0 です。次の値を指定できます。

    • dbAppendOnly 新しいレコードのみ、ダイナセット型のレコードセット) にのみ追加できます。このオプションは、レコードが追加されるだけ可能性が入っています。MFC の ODBC データベース クラスにレコードが取得され、追加されるようにするためだけ選択できます。

    • dbForwardOnly は前方スクロール専用レコードセット スクロール スナップショットです。

    • dbSeeChanges は、他のユーザーが編集しているデータを変更すると例外が生成されます。

    • 他のユーザーがレコードを変更または追加できないdbDenyWrite

    • dbDenyRead は、他のユーザー レコード (テーブル タイプのレコードセットのみ) を表示できません。

    • dbReadOnly レコードしか表示できません; 他のユーザーはそれらを変更できます。

    • dbInconsistent の矛盾した更新が許可されます (ダイナセット型のレコードセットのみ)。

    • dbConsistent の一貫した更新のみ許可されます (ダイナセット型のレコードセットのみ)。

    [!メモ]

    定数 dbConsistentdbInconsistent は相互に排他的です。[開く]のインスタンスに 1 個または、他の両方を使用できません。

  • pTableDef
    CDaoTableDef オブジェクトへのポインター。このバージョンは、テーブル タイプのレコードセットに対してのみ有効です。このオプションを使用すると、CDaoRecordset の構築に使用される CDaoDatabase のポインターを使用できません; なく、tabledef が存在するデータベースが使用されます。

  • pQueryDef
    CDaoQueryDef オブジェクトへのポインター。このバージョンは、ダイナセット型とスナップショット タイプのレコードセットに対してのみ有効です。このオプションを使用すると、CDaoRecordset の構築に使用される CDaoDatabase のポインターを使用できません; なく、querydef が存在するデータベースが使用されます。

解説

**[開く]**を呼び出す前に、レコードセット オブジェクトを構築する必要があります。これにはいくつかの方法があります。

  • レコードセット オブジェクトを構築するときに、既に開いている CDaoDatabase オブジェクトへのポインターを渡します。

  • レコードセット オブジェクトを構築するときに、開いていない CDaoDatabase オブジェクトへのポインターを渡します。レコードセットは、レコードセット オブジェクトを閉じると CDaoDatabase オブジェクトを開きますが、閉じません。

  • レコードセット オブジェクトを構築するときに、null のポインターを指定します。レコードセット オブジェクトを開くには、Microsoft Access の .mdb ファイル名を取得するに GetDefaultDBName を呼び出します。レコードセットは、レコードセットが開いている間 CDaoDatabase のオブジェクトを開き、開いているとします。レコードセットの [閉じる] を呼び出すと、CDaoDatabase のオブジェクトも閉じられます。

    [!メモ]

    レコードセットは CDaoDatabase のオブジェクトを開くと、非排他的にアクセス権を持つデータ ソースを開きます。

lpszSQL のパラメーターを使用する [開く] のバージョンにレコードセットを開いた場合は、次の方法の 1 種類のレコードを取得できます。前者は、の DoFieldExchangeの DFX の関数を使用します。2 つ目 GetFieldValue のメンバー関数を呼び出して、動的バインディングを使用することです。これらのオプションは、別の OR の組み合わせで実行できます。これらを結合する場合、呼び出しの **[開く]**に SQL ステートメントで独自渡す必要があります。

CDaoTableDef のオブジェクトを渡します [開く] の 2 番目のバージョンを使用する場合、結果列は DoFieldExchange と DFX の機構によってバインドできるで、または GetFieldValueで使用できるように動的にバインドする。

[!メモ]

テーブル タイプのレコードセットの CDaoTableDef のオブジェクトを使用してだけ [開く] を呼び出すことはできません。

CDaoQueryDef のオブジェクトを渡します [開く] の 3 番目のバージョンを使用する場合、そのクエリが実行され、DoFieldExchange と DFX の機構によってバインドできるで、または GetFieldValueによってように、生成された列が使用できる動的にバインドする。

[!メモ]

ダイナセット型とスナップショット タイプのレコードセットの CDaoQueryDef のオブジェクトを使用してだけ [開く] を呼び出すことはできません。

lpszSQL のパラメーターを使用する [開く] の最初のバージョンでは、レコードを次の表に示す条件に基づいて選択されます。

パラメーター lpszSQL の値

選択されたレコードが決定されます。

NULL

The string GetDefaultSQLで返しました。

 

一つ以上の tabledefs や querydef 名のコンマ区切りのリスト。

DoFieldExchangeで表されるすべての列。

"Customer"

select の列の一覧 FROM テーブルの一覧

指定された列の指定

"SELECT CustId, CustName

FROM Customer"

通常の手順では [開く]null を渡すことです; この場合、[開く] の呼び出しの GetDefaultSQLClassWizard が生成する、オーバーライドできるメンバー関数 CDaoRecordset派生クラスを作成する場合。この値になりますlpszSQL のパラメーターではなく情報を指定できます。

渡すとは関係なく、[開く] 構成体は、クエリの最終的な SQL 文字列 (SQL 文字列は WHERE がある場合は、lpszSQL に追加される ORDERBY の句で渡された文字列にしたり、)、クエリを実行します。GetSQL を呼び出して **[開く]**を呼び出した後に構築された文字列を確認できます。

クラスのレコードセットのフィールド データ メンバーは選択されたデータの列にバインドされます。レコードが返されると、先頭のレコードが現在のレコードになります。

レコードセットの選択を、フィルターまたは並べ替えなど) を設定する場合は、レコードセット オブジェクトの構築後、**[開く]を呼び出す前に m_strSortm_strFilter を設定します。レコードセットが既に開いた後のレコードセットのレコードを更新するには、[再クエリ]**を呼び出します。

ダイナセット型またはスナップショット タイプのレコードセットの [開く] を呼び出すか、データ ソースが SQL ステートメントやアタッチ テーブルを表す tabledef オブジェクトを参照する場合は、型引数に dbOpenTable を使用できません; MFC は、例外をスローします。tabledef オブジェクトがアタッチ テーブルを表すかどうかを確認するには、CDaoTableDef のオブジェクトを作成し、GetConnect のメンバー関数を呼び出します。

編集または削除するレコードをと同じコンピューターに別のユーザーまたは別のプログラムによる変更を引っ掛け場合 dbSeeChanges フラグを使用します。たとえば、2 人のユーザーが同じレコードの編集を開始した場合、更新 のメンバー関数を呼び出す最初のユーザーが成功します。更新 が 2 番目のユーザーが呼び出すと、CDaoException がスローされます。同様に、レコードを削除するには、2 番目のユーザーが [削除] を呼び出すとすると、既に最初のユーザーによって、CDaoException に変更されています。

通常は、ユーザーがこの CDaoException を取得、更新中、フィールドの内容を更新し、更新した値を取得する必要があります。例外が削除中で発生した場合、コードはデータが最近変更したことを示すユーザーに新しいレコードのデータとメッセージを表示することもできます。この時点で、コードはユーザーがレコードを削除することを確認を要求できます。

ヒントヒント

アプリケーションが ODBC データ ソースからレコードセットを開くときに、単一パスを行う場合にパフォーマンスを向上させるには、前方スクロール専用スクロール オプション (dbForwardOnly) を使用します。

関連情報は、DAO ヘルプ トピック OpenRecordset メソッド「」を参照してください。

必要条件

Header: afxdao.h

参照

関連項目

CDaoRecordset クラス

階層図

CDaoRecordset::Close

CDaoRecordset::CDaoRecordset