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 の一貫した更新のみ許可されます (ダイナセット型のレコードセットのみ)。
[!メモ]
定数 dbConsistent と dbInconsistent は相互に排他的です。[開く]のインスタンスに 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_strSort か m_strFilter を設定します。レコードセットが既に開いた後のレコードセットのレコードを更新するには、[再クエリ]**を呼び出します。
ダイナセット型またはスナップショット タイプのレコードセットの [開く] を呼び出すか、データ ソースが SQL ステートメントやアタッチ テーブルを表す tabledef オブジェクトを参照する場合は、型引数に dbOpenTable を使用できません; MFC は、例外をスローします。tabledef オブジェクトがアタッチ テーブルを表すかどうかを確認するには、CDaoTableDef のオブジェクトを作成し、GetConnect のメンバー関数を呼び出します。
編集または削除するレコードをと同じコンピューターに別のユーザーまたは別のプログラムによる変更を引っ掛け場合 dbSeeChanges フラグを使用します。たとえば、2 人のユーザーが同じレコードの編集を開始した場合、更新 のメンバー関数を呼び出す最初のユーザーが成功します。更新 が 2 番目のユーザーが呼び出すと、CDaoException がスローされます。同様に、レコードを削除するには、2 番目のユーザーが [削除] を呼び出すとすると、既に最初のユーザーによって、CDaoException に変更されています。
通常は、ユーザーがこの CDaoException を取得、更新中、フィールドの内容を更新し、更新した値を取得する必要があります。例外が削除中で発生した場合、コードはデータが最近変更したことを示すユーザーに新しいレコードのデータとメッセージを表示することもできます。この時点で、コードはユーザーがレコードを削除することを確認を要求できます。
ヒント |
---|
アプリケーションが ODBC データ ソースからレコードセットを開くときに、単一パスを行う場合にパフォーマンスを向上させるには、前方スクロール専用スクロール オプション (dbForwardOnly) を使用します。 |
関連情報は、DAO ヘルプ トピック OpenRecordset メソッド「」を参照してください。
必要条件
Header: afxdao.h