CDaoRecordset クラス
データ ソースから選択された 1 組のレコードセットを表現します。
Note
データ アクセス オブジェクト (DAO) は、Office 2013 でサポートされています。 DAO 3.6 は最終バージョンであり、廃止されています。
構文
class CDaoRecordset : public CObject
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CDaoRecordset::CDaoRecordset | CDaoRecordset オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CDaoRecordset::AddNew | 新しいレコードを追加する準備をします。 Update を呼び出して追加を完了します。 |
CDaoRecordset::CanAppend | AddNew メンバー関数を使用してレコードセットに新しいレコードを追加できる場合は、0 以外の値を返します。 |
CDaoRecordset::CanBookmark | レコードセットがブックマークをサポートしている場合は、0 以外の値を返します。 |
CDaoRecordset::CancelUpdate | Edit または AddNew 操作が原因で保留中の更新を取り消します。 |
CDaoRecordset::CanRestart | Requeryを呼び出してレコードセットのクエリを再実行できる場合は、0 以外の値を返します。 |
CDaoRecordset::CanScroll | レコードをスクロールできる場合は、0 以外の値を返します。 |
CDaoRecordset::CanTransact | データ ソースがトランザクションをサポートしている場合は、0 以外の値を返します。 |
CDaoRecordset::CanUpdate | レコードセットを更新できる (レコードを追加、更新、または削除できる) 場合は、0 以外の値を返します。 |
CDaoRecordset::Close | レコードセットを閉じます。 |
CDaoRecordset::D elete | レコードセットから現在のレコードを削除します。 削除後、別のレコードまで明示的にスクロールする必要があります。 |
CDaoRecordset::D oFieldExchange | レコードセットのフィールド データ メンバーとデータ ソース上の対応するレコードの間でデータを (双方向に) 交換するために呼び出されます。 DAO レコード フィールド交換 (DFX) を実装します。 |
CDaoRecordset::Edit | 現在のレコードに対する変更を準備します。 Update を呼び出して編集を完了します。 |
CDaoRecordset::FillCache | ODBC データ ソースからのデータを含むレコードセット オブジェクトのローカル キャッシュのすべてまたは一部を入力します。 |
CDaoRecordset::Find | 指定した基準を満たし、そのレコードを現在のレコードにするダイナセットタイプのレコードセット内の特定の文字列の最初、次、前、または最後の位置を検索します。 |
CDaoRecordset::FindFirst | 指定した条件を満たし、そのレコードを現在のレコードにするダイナセットタイプまたはスナップショットタイプのレコードセット内の最初のレコードを検索します。 |
CDaoRecordset::FindLast | 指定した条件を満たし、そのレコードを現在のレコードにするダイナセットタイプまたはスナップショットタイプのレコードセット内の最後のレコードを検索します。 |
CDaoRecordset::FindNext | 指定した条件を満たし、そのレコードを現在のレコードにするダイナセットタイプまたはスナップショットタイプのレコードセット内の次のレコードを検索します。 |
CDaoRecordset::FindPrev | 指定した条件を満たし、そのレコードを現在のレコードにするダイナセットタイプまたはスナップショットタイプのレコードセット内の前のレコードを検索します。 |
CDaoRecordset::GetAbsolutePosition | レコードセット オブジェクトの現在のレコードのレコード番号を返します。 |
CDaoRecordset::GetBookmark | レコードのブックマークを表す値を返します。 |
CDaoRecordset::GetCacheSize | ODBC データ ソースからローカルにキャッシュされるデータを含むダイナセットタイプのレコードセット内のレコードの数を指定する値を返します。 |
CDaoRecordset::GetCacheStart | キャッシュするレコードセットの最初のレコードのブックマークを指定する値を返します。 |
CDaoRecordset::GetCurrentIndex | インデックス付きのテーブル型CDaoRecordset で最近使用されたインデックスの名前を含むCString を返します。 |
CDaoRecordset::GetDateCreated | CDaoRecordset オブジェクトの基になる基本テーブルが作成された日時を返します。 |
CDaoRecordset::GetDateLastUpdated | CDaoRecordset オブジェクトの基になる基本テーブルのデザインに対して行われた最新の変更の日時を返します。 |
CDaoRecordset::GetDefaultDBName | 既定のデータ ソースの名前を返します。 |
CDaoRecordset::GetDefaultSQL | 実行する既定の SQL 文字列を取得するために呼び出されます。 |
CDaoRecordset::GetEditMode | 現在のレコードの編集状態を示す値を返します。 |
CDaoRecordset::GetFieldCount | レコードセット内のフィールドの数を表す値を返します。 |
CDaoRecordset::GetFieldInfo | レコードセット内のフィールドに関する特定の種類の情報を返します。 |
CDaoRecordset::GetFieldValue | レコードセット内のフィールドの値を返します。 |
CDaoRecordset::GetIndexCount | レコードセットの基になるテーブル内のインデックスの数を取得します。 |
CDaoRecordset::GetIndexInfo | インデックスに関するさまざまな種類の情報を返します。 |
CDaoRecordset::GetLastModifiedBookmark | 最近追加または更新されたレコードを決定するために使用されます。 |
CDaoRecordset::GetLockingMode | 編集中に有効なロックの種類を示す値を返します。 |
CDaoRecordset::GetName | レコードセットの名前を含む CString を返します。 |
CDaoRecordset::GetParamValue | 基になる DAOParameter オブジェクトに格納されている指定されたパラメーターの現在の値を取得します。 |
CDaoRecordset::GetPercentPosition | 現在のレコードの位置を、レコードの合計数に対する割合として返します。 |
CDaoRecordset::GetRecordCount | レコードセット オブジェクトでアクセスされるレコードの数を返します。 |
CDaoRecordset::GetSQL | レコードセットのレコードを選択するために使用する SQL 文字列を取得します。 |
CDaoRecordset::GetType | レコードセットの種類 (テーブルタイプ、ダイナセットタイプ、スナップショットタイプ) を決定するために呼び出されます。 |
CDaoRecordset::GetValidationRule | フィールドに入力されたデータを検証する値を含む CString を返します。 |
CDaoRecordset::GetValidationText | 検証規則が満たされていない場合に表示されるテキストを取得します。 |
CDaoRecordset::IsBOF | レコードセットが最初のレコードの前に配置されている場合は、0 以外の値を返します。 現在のレコードはありません。 |
CDaoRecordset::IsDeleted | レコードセットが削除されたレコードに配置されている場合は、0 以外の値を返します。 |
CDaoRecordset::IsEOF | レコードセットが最後のレコードの後に配置されている場合は、0 以外の値を返します。 現在のレコードはありません。 |
CDaoRecordset::IsFieldDirty | 現在のレコード内の指定したフィールドが変更された場合は、0 以外の値を返します。 |
CDaoRecordset::IsFieldNull | 現在のレコード内の指定したフィールドが Null (値を持たない) の場合は、0 以外の値を返します。 |
CDaoRecordset::IsFieldNullable | 現在のレコード内の指定したフィールドを Null (値を持たない) に設定できる場合は、0 以外の値を返します。 |
CDaoRecordset::IsOpen | 以前に Open が呼び出された場合は 0 以外の値を返します。 |
CDaoRecordset::Move | レコードセットを、現在のレコードの指定された数のレコードに、どちらの方向にも配置します。 |
CDaoRecordset::MoveFirst | レコードセットの最初のレコードに現在のレコードを配置します。 |
CDaoRecordset::MoveLast | レコードセット内の最後のレコードに現在のレコードを配置します。 |
CDaoRecordset::MoveNext | レコードセット内の次のレコードに現在のレコードを配置します。 |
CDaoRecordset::MovePrev | レコードセット内の前のレコードに現在のレコードを配置します。 |
CDaoRecordset::Open | テーブル、ダイナセット、またはスナップショットから新しいレコードセットを作成します。 |
CDaoRecordset::Requery | レコードセットのクエリをもう一度実行して、選択したレコードを更新します。 |
CDaoRecordset::Seek | 現在のインデックスの指定した条件を満たし、そのレコードを現在のレコードにするインデックス付きテーブル型レコードセット オブジェクト内のレコードを検索します。 |
CDaoRecordset::SetAbsolutePosition | レコードセット オブジェクトの現在のレコードのレコード番号を設定します。 |
CDaoRecordset::SetBookmark | 指定したブックマークを含むレコードにレコードセットを配置します。 |
CDaoRecordset::SetCacheSize | ODBC データ ソースからローカルにキャッシュされるデータを含むダイナセットタイプのレコードセット内のレコードの数を指定する値を設定します。 |
CDaoRecordset::SetCacheStart | キャッシュするレコードセットの最初のレコードのブックマークを指定する値を設定します。 |
CDaoRecordset::SetCurrentIndex | テーブル型レコードセットのインデックスを設定するために呼び出されます。 |
CDaoRecordset::SetFieldDirty | 現在のレコード内の指定したフィールドを変更としてマークします。 |
CDaoRecordset::SetFieldNull | 現在のレコード内の指定したフィールドの値を Null (値なし) に設定します。 |
CDaoRecordset::SetFieldValue | レコードセット内のフィールドの値を設定します。 |
CDaoRecordset::SetFieldValueNull | レコードセット内のフィールドの値を Null に設定します。 (値がありません)。 |
CDaoRecordset::SetLockingMode | 編集中に有効にするロックの種類を示す値を設定します。 |
CDaoRecordset::SetParamValue | 基になる DAOParameter オブジェクトに格納されている指定されたパラメーターの現在の値を設定します。 |
CDaoRecordset::SetParamValueNull | 指定したパラメーターの現在の値を Null (値なし) に設定します。 |
CDaoRecordset::SetPercentPosition | 現在のレコードの位置を、レコードセット内のレコードの合計数に対する割合に対応する位置に設定します。 |
CDaoRecordset::Update | 新しいデータまたは編集されたデータをデータ ソースに保存して、 AddNew または Edit 操作を完了します。 |
パブリック データ メンバー
名前 | 説明 |
---|---|
CDaoRecordset::m_bCheckCacheForDirtyFields | フィールドが自動的に変更済みとしてマークされるかどうかを示すフラグが含まれます。 |
CDaoRecordset::m_nFields | レコードセット クラスのフィールド データ メンバーの数と、データ ソースからレコードセットによって選択された列の数を格納します。 |
CDaoRecordset::m_nParams | レコードセット クラスのパラメーター データ メンバーの数 (レコードセットのクエリで渡されたパラメーターの数) を格納します。 |
CDaoRecordset::m_pDAORecordset | レコードセット オブジェクトの基になる DAO インターフェイスへのポインター。 |
CDaoRecordset::m_pDatabase | この結果セットのソース データベース。 CDaoDatabase オブジェクトへのポインターを格納します。 |
CDaoRecordset::m_strFilter | SQL WHERE ステートメントの構築に使用する文字列が含まれています。 |
CDaoRecordset::m_strSort | SQL ORDER BY ステートメントの構築に使用される文字列が含まれています。 |
解説
"レコードセット" と呼ばれる CDaoRecordset
オブジェクトは、次の 3 つの形式で使用できます。
テーブル型レコードセットは、1 つのデータベース テーブルのレコードの調査、追加、変更、または削除に使用できるベース テーブルを表します。
ダイナセットタイプのレコードセットは、更新可能なレコードを持つクエリの結果です。 これらのレコードセットは、基になるデータベース テーブルまたはテーブルのレコードの調査、追加、変更、または削除に使用できる一連のレコードです。 Dynaset タイプのレコードセットには、データベース内の 1 つ以上のテーブルのフィールドを含めることができます。
スナップショットタイプのレコードセットは、データの検索やレポートの生成に使用できる一連のレコードの静的コピーです。 これらのレコードセットには、データベース内の 1 つ以上のテーブルのフィールドを含めることができますが、更新することはできません。
各形式のレコードセットは、レコードセットを開いた時点で固定されたレコードのセットを表します。 テーブルタイプのレコードセットまたはダイナセットタイプのレコードセット内のレコードまでスクロールすると、レコードセットを開いた後に、他のユーザーまたはアプリケーション内の他のレコードセットによって行われた変更が反映されます。 (スナップショットタイプのレコードセットは更新できません)。 CDaoRecordset
を直接使用するか、 CDaoRecordset
からアプリケーション固有のレコードセット クラスを派生させることができます。 次に以下のことを行えます。
レコードをスクロールします。
インデックスを設定し、 Seek (テーブル型レコードセットのみ) を使用してレコードをすばやく検索します。
文字列比較に基づいてレコードを検索します。"<"、"<="、"="、">="、または ">" (ダイナセットタイプおよびスナップショットタイプのレコードセット)。
レコードを更新し、ロック モードを指定します (スナップショットタイプのレコードセットを除く)。
レコードセットをフィルター処理して、データ ソースで使用可能なレコードから選択するレコードを制限します。
レコードセットを並べ替えます。
実行時まで不明な情報でレコードセットの選択をカスタマイズするには、パラメーター化します。
クラス CDaoRecordset
は、クラス CRecordset
と同様のインターフェイスを提供します。 主な違いは、クラス CDaoRecordset
OLE に基づいてデータ アクセス オブジェクト (DAO) を介してデータにアクセスすることです。 クラス CRecordset
は、Open Database Connectivity (ODBC) とその DBMS の ODBC ドライバーを介して DBMS にアクセスします。
Note
DAO データベース クラスは、Open Database Connectivity (ODBC) に基づく MFC データベース クラスとは異なります。 すべての DAO データベース クラス名には、"CDao" プレフィックスがあります。 DAO クラスを使用して ODBC データ ソースに引き続きアクセスできます。DAO クラスは、Microsoft Jet データベース エンジンに固有であるため、一般に優れた機能を提供します。
CDaoRecordset
を直接使用するか、CDaoRecordset
からクラスを派生させることができます。 どちらの場合もレコードセット クラスを使用するには、データベースを開き、レコードセット オブジェクトを構築し、コンストラクターに CDaoDatabase
オブジェクトへのポインターを渡します。 また、 CDaoRecordset
オブジェクトを構築し、MFC で一時的な CDaoDatabase
オブジェクトを作成することもできます。 次に、レコードセットの Open メンバー関数を呼び出し、オブジェクトがテーブルタイプのレコードセット、ダイナセットタイプのレコードセット、スナップショットタイプのレコードセットのいずれであるかを指定します。 Open
を呼び出すと、データベースからデータが選択され、最初のレコードが取得されます。
オブジェクトのメンバー関数とデータ メンバーを使用して、レコードをスクロールして操作します。 使用できる操作は、オブジェクトがテーブルタイプのレコードセット、ダイナセットタイプのレコードセット、スナップショットタイプのレコードセットのいずれであるか、および更新可能であるか読み取り専用であるかによって異なります。これは、データベースまたは Open Database Connectivity (ODBC) データ ソースの機能によって異なります。 Open
呼び出し以降に変更または追加された可能性のあるレコードを更新するには、オブジェクトの Requery メンバー関数を呼び出します。 オブジェクトの Close
メンバー関数を呼び出し、終了したらオブジェクトを破棄します。
CDaoRecordset
DAO レコード フィールド交換 (DFX) を使用して、 CDaoRecordset
または CDaoRecordset
派生クラスのタイプ セーフな C++ メンバーを使用したレコード フィールドの読み取りと更新をサポートします。 GetFieldValue および SetFieldValue を使用して DFX メカニズムを使用せずに、データベース内の列の動的バインドを実装することもできます。
関連情報については、DAO ヘルプの「Recordset オブジェクト」を参照してください。
継承階層
CDaoRecordset
要件
ヘッダー: afxdao.h
CDaoRecordset::AddNew
このメンバー関数を呼び出して、テーブルタイプまたはダイナセットタイプのレコードセットに新しいレコードを追加します。
virtual void AddNew();
解説
レコードのフィールドは最初は Null です。 (データベースの用語では、Null は "値を持たない" ことを意味し、C++ の NULL と同じではありません)。操作を完了するには、 Update メンバー関数を呼び出す必要があります。 Update
は、変更をデータ ソースに保存します。
注意事項
レコードを編集した後、 Update
を呼び出さずに別のレコードまでスクロールすると、変更は警告なしに失われます。
AddNewを呼び出してダイナセットタイプのレコードセットにレコードを追加すると、レコードはレコードセットに表示され、基になるテーブルに含まれる新しいCDaoRecordset
オブジェクトに表示されます。
新しいレコードの位置は、レコードセットの種類によって異なります。
- ダイナセットタイプのレコードセットでは、新しいレコードが挿入される場所は保証されません。 この動作は、パフォーマンスとコンカレンシーの理由から Microsoft Jet 3.0 で変更されました。 新しく追加したレコードを現在のレコードにすることが目的の場合は、最後に変更されたレコードのブックマークを取得し、そのブックマークに移動します。
rs.SetBookmark(rs.GetLastModifiedBookmark());
- インデックスが指定されているテーブル型レコードセットでは、レコードは並べ替え順序で適切な場所に返されます。 インデックスが指定されていない場合は、レコードセットの末尾に新しいレコードが返されます。
AddNew
を使用する前の最新のレコードは、最新の状態のままです。 新しいレコードを最新の状態にし、レコードセットがブックマークをサポートしている場合は、基になる DAO レコードセット オブジェクトの LastModified プロパティ設定で識別されるブックマークにSetBookmark を呼び出します。 これを行うと、追加されたレコードのカウンター (自動インクリメント) フィールドの値を決定するのに役立ちます。 詳細については、「 GetLastModifiedBookmarkを参照してください。
データベースがトランザクションをサポートしている場合は、 AddNew
呼び出しをトランザクションの一部にすることができます。 トランザクションの詳細については、クラス CDaoWorkspace を参照してください。 AddNew
を呼び出す前に、CDaoWorkspace::BeginTrans を呼び出す必要があります。
Open
メンバー関数が呼び出されていないレコードセットのAddNew
を呼び出すことはできません。 追加できないレコードセットのAddNew
を呼び出すと、CDaoException
がスローされます。 レコードセットが更新可能かどうかを確認するには、 CanAppend を呼び出します。
フレームワークは、変更されたフィールド データ メンバーが DAO レコード フィールド交換 (DFX) メカニズムによってデータ ソース上のレコードに確実に書き込まれるようにマークします。 フィールドの値を変更すると、通常、フィールドは自動的にダーティに設定されるため、自分で SetFieldDirty を呼び出す必要はほとんどありませんが、フィールド データ メンバー内の値に関係なく、列が明示的に更新または挿入されるようにしたい場合があります。 DFX メカニズムでは、 PSEUDO NULL も使用されます。 詳細については、「 CDaoFieldExchange::m_nOperation」を参照してください。
ダブル バッファリング メカニズムが使用されていない場合、フィールドの値を変更しても、フィールドはダーティとして自動的に設定されません。 この場合、フィールドダーティを明示的に設定する必要があります。 m_bCheckCacheForDirtyFieldsに含まれるフラグは、この自動フィールド チェックを制御します。
Note
レコードがダブルバッファーされている場合 (つまり、自動フィールド チェックが有効になっている)、 CancelUpdate
を呼び出すと、 AddNew
または Edit
が呼び出される前の値にメンバー変数が復元されます。
関連情報については、DAO ヘルプの「AddNew メソッド」、「CancelUpdate メソッド」、「LastModified プロパティ」、「EditMode プロパティ」の各トピックを参照してください。
CDaoRecordset::CanAppend
このメンバー関数を呼び出して、以前に開いたレコードセットで、 AddNew メンバー関数を呼び出して新しいレコードを追加できるかどうかを判断します。
BOOL CanAppend() const;
戻り値
レコードセットで新しいレコードを追加できる場合は 0 以外。それ以外の場合は 0。 CanAppend
は、レコードセットを読み取り専用として開いた場合は 0 を返します。
解説
関連情報については、DAO ヘルプの「Append メソッド」を参照してください。
CDaoRecordset::CanBookmark
このメンバー関数を呼び出して、以前に開いたレコードセットでブックマークを使用してレコードを個別にマークできるかどうかを判断します。
BOOL CanBookmark();
戻り値
レコードセットがブックマークをサポートしている場合は 0 以外、それ以外の場合は 0。
解説
Microsoft Jet データベース エンジン テーブルに完全に基づくレコードセットを使用している場合は、前方スクロール レコードセットとしてフラグが設定されたスナップショットタイプのレコードセットを除き、ブックマークを使用できます。 他のデータベース製品 (外部 ODBC データ ソース) ではブックマークがサポートされない場合があります。
関連情報については、DAO ヘルプの「Bookmarkable プロパティ」を参照してください。
CDaoRecordset::CancelUpdate
CancelUpdate
メンバー関数は、Edit または AddNew 操作が原因で保留中の更新を取り消します。
virtual void CancelUpdate();
解説
たとえば、アプリケーションが Edit
または AddNew
メンバー関数を呼び出し、 Update
を呼び出していない場合、 CancelUpdate
は、 Edit
または AddNew
が呼び出された後に行われた変更を取り消します。
Note
レコードがダブルバッファーされている場合 (つまり、自動フィールド チェックが有効になっている)、 CancelUpdate
を呼び出すと、 AddNew
または Edit
が呼び出される前の値にメンバー変数が復元されます。
保留中の Edit
または AddNew
操作がない場合、 CancelUpdate
MFC は例外をスローします。 GetEditMode メンバー関数を呼び出して、取り消すことができる保留中の操作があるかどうかを判断します。
関連情報については、DAO ヘルプのトピック「CancelUpdate メソッド」を参照してください。
CDaoRecordset::CanRestart
このメンバー関数を呼び出して、レコードセットが Requery
メンバー関数を呼び出してクエリを再起動できるかどうかを判断します (レコードを更新するため)。
BOOL CanRestart();
戻り値
レコードセットのクエリを再度実行するために Requery
を呼び出すことができる場合は 0 以外、それ以外の場合は 0。
解説
テーブル型のレコードセットは、 Requery
をサポートしていません。
Requery
がサポートされていない場合は、Close Open を呼び出してデータを更新します。 パラメーター値が変更された後、 Requery
を呼び出してレコードセット オブジェクトの基になるパラメーター クエリを更新できます。
関連情報については、DAO ヘルプの「Restartable プロパティ」を参照してください。
CDaoRecordset::CanScroll
このメンバー関数を呼び出して、レコードセットがスクロールを許可するかどうかを判断します。
BOOL CanScroll() const;
戻り値
レコードをスクロールできる場合は 0 以外、それ以外の場合は 0。
解説
dbForwardOnly
で Open を呼び出す場合、レコードセットは前方にスクロールすることしかできません。
関連情報については、DAO ヘルプの「DAO を使用した現在のレコード ポインターの配置」を参照してください。
CDaoRecordset::CanTransact
レコードセットがトランザクションを許可するかどうかを判断するには、このメンバー関数を呼び出します。
BOOL CanTransact();
戻り値
基になるデータ ソースがトランザクションをサポートしている場合は 0 以外、それ以外の場合は 0。
解説
関連情報については、DAO ヘルプの「Transactions プロパティ」を参照してください。
CDaoRecordset::CanUpdate
このメンバー関数を呼び出して、レコードセットを更新できるかどうかを判断します。
BOOL CanUpdate() const;
戻り値
レコードセットを更新できる場合は 0 以外 (レコードの追加、更新、削除)、それ以外の場合は 0。
解説
基になるデータ ソースが読み取り専用の場合、またはレコードセットに対して Open を呼び出したときにnOptions にdbReadOnly
を指定した場合、レコードセットは読み取り専用になる可能性があります。
関連情報については、DAO ヘルプのトピック「AddNew メソッド」、「メソッドの編集」、「メソッドの削除」、「メソッドの更新」、および「更新可能なプロパティ」を参照してください。
CDaoRecordset::CDaoRecordset
CDaoRecordset
オブジェクトを構築します。
CDaoRecordset(CDaoDatabase* pDatabase = NULL);
パラメーター
pDatabase
CDaoDatabase オブジェクトまたは値 NULL へのポインターを格納します。 NULL でなく、 CDaoDatabase
オブジェクトの Open
メンバー関数がデータ ソースに接続するために呼び出されていない場合、レコードセットは独自の Open 呼び出し中に開こうとします。 NULL を渡すと、 CDaoDatabase
オブジェクトが構築され、 CDaoRecordset
からレコードセット クラスを派生させた場合に指定したデータ ソース情報を使用して接続されます。
解説
CDaoRecordset
を直接使用するか、CDaoRecordset
からアプリケーション固有のクラスを派生させることができます。 ClassWizard を使用して、レコードセット クラスを派生させることができます。
Note
CDaoRecordset
クラスを派生させる場合、派生クラスは独自のコンストラクターを指定する必要があります。 派生クラスのコンストラクターで、コンストラクター CDaoRecordset::CDaoRecordset
を呼び出し、適切なパラメーターを渡します。
レコードセット コンストラクターに NULL を渡して、 CDaoDatabase
オブジェクトを自動的に構築して接続します。 これは便利なショートカットであり、レコードセットを構築する前に CDaoDatabase
オブジェクトを構築して接続する必要はありません。 CDaoDatabase
オブジェクトが開いていない場合は、既定のワークスペースを使用する CDaoWorkspace オブジェクトも自動的に作成されます。 詳細については、「 CDaoDatabase::CDaoDatabaseを参照してください。
CDaoRecordset::Close
CDaoRecordset
オブジェクトを閉じると、関連付けられているデータベース内の開いているレコードセットのコレクションから削除されます。
virtual void Close();
解説
Close
はCDaoRecordset
オブジェクトを破棄しないため、同じデータ ソースまたは別のデータ ソースでOpen
を呼び出すことによって、オブジェクトを再利用できます。
保留中のすべての AddNew または Edit ステートメントが取り消され、保留中のすべてのトランザクションがロールバックされます。 保留中の追加または編集を保持する場合は、レコードセットごとにClose
を呼び出す前にUpdateを呼び出します。
Close
を呼び出した後、Open
をもう一度呼び出すことができます。 これにより、レコードセット オブジェクトを再利用できます。 可能であれば、 Requery を呼び出す方が適切な方法です。
関連情報については、DAO ヘルプの「Close メソッド」を参照してください。
CDaoRecordset::D elete
このメンバー関数を呼び出して、開いているダイナセット タイプまたはテーブル タイプのレコードセット オブジェクトの現在のレコードを削除します。
virtual void Delete();
解説
削除が成功した後、レコードセットのフィールド データ メンバーは Null 値に設定され、削除されたレコードから移動するには、レコードセット ナビゲーション メンバー関数 ( Move、 Seek、 SetBookmark など) のいずれかを明示的に呼び出す必要があります。 レコードセットからレコードを削除する場合は、 Delete
を呼び出す前にレコードセットに現在のレコードが存在する必要があります。それ以外の場合、MFC は例外をスローします。
Delete
は現在のレコードを削除し、アクセスできないようにします。 削除されたレコードは編集または使用できませんが、最新の状態のままです。 ただし、別のレコードに移動すると、削除されたレコードを再び最新の状態にすることはできません。
注意事項
レコードセットは更新可能で、 Delete
を呼び出すときにレコードセット内に有効なレコードが存在する必要があります。 たとえば、レコードを削除しても、 Delete
を再度呼び出す前に新しいレコードまでスクロールしない場合、 Delete
は CDaoException をスローします。
トランザクションを使用し、 CDaoWorkspace::Rollback メンバー関数を呼び出すと、レコードの削除を取り消すことができます。 ベース テーブルが連鎖削除リレーションシップのプライマリ テーブルである場合、現在のレコードを削除すると、外部テーブル内の 1 つ以上のレコードが削除される場合もあります。 詳細については、DAO ヘルプの「連鎖削除」の定義を参照してください。
AddNew
やEdit
とは異なり、Delete
の呼び出しの後にUpdate
の呼び出しは行われません。
関連情報については、DAO ヘルプのトピック「AddNew メソッド」、「メソッドの編集」、「メソッドの削除」、「メソッドの更新」、および「更新可能なプロパティ」を参照してください。
CDaoRecordset::D oFieldExchange
フレームワークは、このメンバー関数を呼び出して、レコードセット オブジェクトのフィールド データ メンバーと、データ ソース上の現在のレコードの対応する列の間でデータを自動的に交換します。
virtual void DoFieldExchange(CDaoFieldExchange* pFX);
パラメーター
pFX
CDaoFieldExchange
オブジェクトへのポインターを格納します。 フレームワークでは、フィールド交換操作のコンテキストを指定するために、このオブジェクトが既に設定されています。
解説
また、パラメーター データ メンバー (存在する場合) を、レコードセットの選択に使用する SQL ステートメント文字列のパラメーター プレースホルダーにバインドします。 DAO レコード フィールド交換 (DFX) と呼ばれるフィールド データの交換は、レコードセット オブジェクトのフィールド データ メンバーからデータ ソースのレコードのフィールド、およびデータ ソースのレコードからレコード セット オブジェクトへの双方向で機能します。 列を動的にバインドする場合、 DoFieldExchange
を実装する必要はありません。
派生レコードセット クラスの DoFieldExchange
を実装するために通常実行する必要がある唯一のアクションは、ClassWizard を使用してクラスを作成し、フィールド データ メンバーの名前とデータ型を指定することです。 パラメーター データ メンバーを指定するために ClassWizard が書き込むコードを追加することもできます。 パラメーター データ メンバーを指定しない限り、すべてのフィールドを動的にバインドする場合、この関数は非アクティブになります。
ClassWizard を使用して派生レコードセット クラスを宣言すると、ウィザードによって DoFieldExchange
のオーバーライドが書き込まれます。これは次の例のようになります。
void CCustSet::DoFieldExchange(CDaoFieldExchange *pFX)
{
pFX->SetFieldType(CDaoFieldExchange::param);
DFX_Text(pFX, _T("Param"), m_strParam);
pFX->SetFieldType(CDaoFieldExchange::outputColumn);
DFX_Short(pFX, _T("EmployeeID"), m_EmployeeID);
DFX_Text(pFX, _T("LastName"), m_LastName);
DFX_Short(pFX, _T("Age"), m_Age);
DFX_DateTime(pFX, _T("hire_date"), m_hire_date);
DFX_DateTime(pFX, _T("termination_date"), m_termination_date);
CDaoRecordset::DoFieldExchange(pFX);
}
CDaoRecordset::Edit
現在のレコードへの変更を許可するには、このメンバー関数を呼び出します。
virtual void Edit();
解説
Edit
メンバー関数を呼び出すと、現在のレコードのフィールドに加えられた変更がコピー バッファーにコピーされます。 レコードに必要な変更を加えた後、 Update
を呼び出して変更を保存します。 Edit
は、レコードセットのデータ メンバーの値を保存します。 Edit
を呼び出し、変更を加えた後、Edit
をもう一度呼び出すと、レコードの値は最初のEdit
呼び出しの前の値に復元されます。
注意事項
レコードを編集した後、最初に Update
を呼び出さずに別のレコードに移動する操作を実行すると、変更は警告なしに失われます。 さらに、レコードセットまたは親データベースを閉じると、編集したレコードは警告なしで破棄されます。
場合によっては、列を Null (データを含まない) にして更新することが必要になる場合があります。 これを行うには、パラメーター true を指定して SetFieldNull
を呼び出してフィールド Null をマークします。これにより、列も更新されます。 値が変更されていない場合でもフィールドをデータ ソースに書き込む場合は、true のパラメーターを指定して SetFieldDirty
を呼び出します。 これは、フィールドの値が Null の場合でも機能します。
フレームワークは、変更されたフィールド データ メンバーが DAO レコード フィールド交換 (DFX) メカニズムによってデータ ソース上のレコードに確実に書き込まれるようにマークします。 フィールドの値を変更すると、通常、フィールドは自動的にダーティに設定されるため、自分で SetFieldDirty を呼び出す必要はほとんどありませんが、フィールド データ メンバー内の値に関係なく、列が明示的に更新または挿入されるようにしたい場合があります。 DFX メカニズムでは、 PSEUDO NULL も使用されます。 詳細については、「 CDaoFieldExchange::m_nOperation」を参照してください。
ダブル バッファリング メカニズムが使用されていない場合、フィールドの値を変更しても、フィールドはダーティとして自動的に設定されません。 この場合、フィールドダーティを明示的に設定する必要があります。 m_bCheckCacheForDirtyFieldsに含まれるフラグは、この自動フィールド チェックを制御します。
レコードセット オブジェクトがマルチユーザー環境で悲観的にロックされている場合、レコードは更新が完了するまで Edit
使用された時点からロックされたままになります。 レコードセットが楽観的にロックされている場合、レコードはロックされ、データベースで更新される直前に事前に編集されたレコードと比較されます。 Edit
を呼び出してからレコードが変更された場合、Update
操作は失敗し、MFC は例外をスローします。 ロック モードは、 SetLockingMode
で変更できます。
Note
オプティミスティック ロックは、ODBC やインストール可能な ISAM などの外部データベース形式で常に使用されます。
現在のレコードは、 Edit
を呼び出した後も最新の状態のままです。 Edit
を呼び出すには、現在のレコードが必要です。 現在のレコードがない場合、またはレコードセットが開いているテーブルタイプまたはダイナセットタイプのレコードセットオブジェクトを参照していない場合は、例外が発生します。 Edit
を呼び出すと、次の条件下でCDaoException
がスローされます。
現在のレコードはありません。
データベースまたはレコードセットは読み取り専用です。
レコード内のフィールドは更新できません。
データベースまたはレコードセットは、別のユーザーが排他的に使用するために開かれました。
別のユーザーがレコードを含むページをロックしました。
データ ソースがトランザクションをサポートしている場合は、 Edit
呼び出しをトランザクションの一部にすることができます。 Edit
を呼び出す前とレコードセットを開いた後に、CDaoWorkspace::BeginTrans
を呼び出す必要があります。 CDaoWorkspace::CommitTrans
の呼び出しは、Edit
操作を完了するためにUpdate
を呼び出す代わりではありません。 トランザクションの詳細については、クラスの CDaoWorkspace
を参照してください。
関連情報については、DAO ヘルプのトピック「AddNew メソッド」、「メソッドの編集」、「メソッドの削除」、「メソッドの更新」、および「更新可能なプロパティ」を参照してください。
CDaoRecordset::FillCache
レコードセットから指定した数のレコードをキャッシュするには、このメンバー関数を呼び出します。
void FillCache(
long* pSize = NULL,
COleVariant* pBookmark = NULL);
パラメーター
pSize
キャッシュに格納する行数を指定します。 このパラメーターを省略した場合、値は基になる DAO オブジェクトの CacheSize プロパティ設定によって決まります。
pBookmark
ブックマークを指定する COleVariant 。 キャッシュは、このブックマークによって示されるレコードから開始して塗りつぶされます。 このパラメーターを省略すると、基になる DAO オブジェクトの CacheStart プロパティによって示されるレコードからキャッシュが塗りつぶされます。
解説
キャッシュを使用すると、リモート サーバーからデータを取得またはフェッチするアプリケーションのパフォーマンスが向上します。 キャッシュとは、アプリケーションの実行中にデータが再び要求される可能性があることを前提として、サーバーから最後にフェッチされたデータを保持するローカル メモリ内の領域です。 データが要求されると、Microsoft Jet データベース エンジンは、サーバーからデータをフェッチするのではなく、最初にキャッシュのデータをチェックします。これには時間がかかります。 ODBC 以外のデータ ソースでデータ キャッシュを使用しても、データはキャッシュに保存されないため、効果はありません。
キャッシュがフェッチされる際にレコードが格納されるのを待つ代わりに、 FillCache
メンバー関数を呼び出すことで、いつでもキャッシュを明示的に埋めることができます。 FillCache
は一度に 1 つではなく一度に複数のレコードをフェッチするため、キャッシュを埋めるより高速な方法です。 たとえば、各スクリーンフルなレコードが表示されている間に、アプリケーションで FillCache
を呼び出して、次のスクリーンフルレコードをフェッチすることができます。
レコードセット オブジェクトでアクセスされる ODBC データベースには、ローカル キャッシュを使用できます。 キャッシュを作成するには、リモート データ ソースからレコードセット オブジェクトを開き、レコードセットの SetCacheSize
および SetCacheStart
メンバー関数を呼び出します。 lSizeおよびlBookmarkSetCacheSize
およびSetCacheStart
で指定された範囲の一部または全部を外れた範囲を作成すると、この範囲外のレコードセットの部分は無視され、キャッシュに読み込まれません。 FillCache
がリモート データ ソースに残っているよりも多くのレコードを要求した場合、残りのレコードのみがフェッチされ、例外はスローされません。
キャッシュからフェッチされたレコードは、他のユーザーによってソース データに同時に行われた変更を反映しません。
FillCache
は、まだキャッシュされていないレコードのみをフェッチします。 キャッシュされたすべてのデータを強制的に更新するには、lSize パラメーターが 0 の SetCacheSize
メンバー関数を呼び出し、最初に要求したキャッシュのサイズと同じ lSize パラメーターで再度SetCacheSize
を呼び出してから、FillCache
を呼び出します。
関連情報については、DAO ヘルプの「FillCache メソッド」を参照してください。
CDaoRecordset::Find
このメンバー関数を呼び出して、比較演算子を使用してダイナセットまたはスナップショットタイプのレコードセット内の特定の文字列を検索します。
virtual BOOL Find(
long lFindType,
LPCTSTR lpszFilter);
パラメーター
lFindType
必要な検索操作の種類を示す値。 指定できる値は、
AFX_DAO_NEXT一致する文字列の次の場所を検索します。
AFX_DAO_PREV 一致する文字列の前の場所を検索します。
AFX_DAO_FIRST 一致する文字列の最初の場所を検索します。
AFX_DAO_LAST 一致する文字列の最後の場所を検索します。
lpszFilter
レコードの検索に使用される文字列式 (sql ステートメントの WHERE 句など WHERE)。 次に例を示します。
rs.Find(AFX_DAO_FIRST, _T("EmployeeID = 7"));
rs.Find(AFX_DAO_NEXT, _T("LastName = 'Jones'"));
戻り値
一致するレコードが見つかった場合は 0 以外、それ以外の場合は 0。
解説
文字列の最初、次、前、または最後のインスタンスを見つけることができます。 Find
は仮想関数であるため、オーバーライドして独自の実装を追加できます。 FindFirst
、FindLast
、FindNext
、およびFindPrev
メンバー関数は、Find
メンバー関数を呼び出します。そのため、Find
を使用して、すべての Find 操作の動作を制御できます。
テーブル型レコードセット内のレコードを検索するには、 Seek メンバー関数を呼び出します。
ヒント
レコードのセットが小さいほど、より効果的な Find
になります。 一般に、特に ODBC データでは、必要なレコードだけを取得する新しいクエリを作成することをお勧めします。
関連情報については、DAO ヘルプのトピック「FindFirst、FindLast、FindNext、FindPrevious メソッド」を参照してください。
CDaoRecordset::FindFirst
このメンバー関数を呼び出して、指定した条件に一致する最初のレコードを検索します。
BOOL FindFirst(LPCTSTR lpszFilter);
パラメーター
lpszFilter
レコードの検索に使用される文字列式 (sql ステートメントの WHERE 句など WHERE)。
戻り値
一致するレコードが見つかった場合は 0 以外、それ以外の場合は 0。
解説
FindFirst
メンバー関数は、レコードセットの先頭から検索を開始し、レコードセットの末尾まで検索します。
(特定の条件を満たすレコードだけでなく) すべてのレコードを検索に含める場合は、いずれかの移動操作を使用してレコード間を移動します。 テーブル型レコードセット内のレコードを検索するには、 Seek
メンバー関数を呼び出します。
条件に一致するレコードが見つからない場合、現在のレコード ポインターは不確定になり、 FindFirst
は 0 を返します。 レコードセットに条件を満たす複数のレコードが含まれている場合、 FindFirst
は最初の出現箇所を検索し、 FindNext
は次の出現箇所を検索します。
注意事項
現在のレコードを編集する場合は、別のレコードに移動する前に、 Update
メンバー関数を呼び出して変更を保存してください。 更新せずに別のレコードに移動すると、変更は警告なしで失われます。
Find
メンバー関数は、次の表に示す位置と方向から検索します。
検索操作 | 開始 | 検索の方向 |
---|---|---|
FindFirst |
レコードセットの先頭 | レコードセットの末尾 |
FindLast |
レコードセットの末尾 | レコードセットの先頭 |
FindNext |
現在のレコード | レコードセットの末尾 |
FindPrevious |
現在のレコード | レコードセットの先頭 |
Note
FindLast
を呼び出すと、検索を開始する前に、Microsoft Jet データベース エンジンによってレコードセットが完全に設定されます (まだ完了していない場合)。 最初の検索には、後続の検索よりも長い時間がかかる場合があります。
Find 操作の 1 つを使用することは、 MoveFirst
または MoveNext
の呼び出しと同じではありませんが、単に条件を指定せずに最初または次のレコードを最新の状態にします。 移動操作では、検索操作に従うことができます。
検索操作を使用する場合は、次の点に注意してください。
Find
が 0 以外の値を返す場合、現在のレコードは定義されません。 この場合は、現在のレコード ポインターを有効なレコードに戻す必要があります。前方スクロールのみのスナップショットタイプのレコードセットでは、検索操作を使用できません。
米国バージョンの Microsoft Jet データベース エンジンを使用していない場合でも、日付を含むフィールドを検索する場合は、米国の日付形式 (月日) を使用する必要があります。そうしないと、一致するレコードが見つからない可能性があります。
ODBC データベースと大きなダイナセットを操作する場合、特に大きなレコードセットを操作する場合は、検索操作の使用が遅くなる場合があります。 カスタマイズされた ORDERBY または WHERE 句、パラメーター クエリ、または特定のインデックス付きレコードを取得する
CDaoQuerydef
オブジェクトで SQL クエリを使用することで、パフォーマンスを向上させることができます。
関連情報については、DAO ヘルプのトピック「FindFirst、FindLast、FindNext、FindPrevious メソッド」を参照してください。
CDaoRecordset::FindLast
このメンバー関数を呼び出して、指定した条件に一致する最後のレコードを検索します。
BOOL FindLast(LPCTSTR lpszFilter);
パラメーター
lpszFilter
レコードの検索に使用される文字列式 (sql ステートメントの WHERE 句など WHERE)。
戻り値
一致するレコードが見つかった場合は 0 以外、それ以外の場合は 0。
解説
FindLast
メンバー関数は、レコードセットの末尾で検索を開始し、レコードセットの先頭に向かって後方に検索します。
(特定の条件を満たすレコードだけでなく) すべてのレコードを検索に含める場合は、いずれかの移動操作を使用してレコード間を移動します。 テーブル型レコードセット内のレコードを検索するには、 Seek
メンバー関数を呼び出します。
条件に一致するレコードが見つからない場合、現在のレコード ポインターは不確定になり、 FindLast
は 0 を返します。 レコードセットに条件を満たす複数のレコードが含まれている場合、 FindFirst
は最初の出現箇所を検索 FindNext
、最初の出現の後に次の出現箇所を検索します。
注意事項
現在のレコードを編集する場合は、別のレコードに移動する前に、 Update
メンバー関数を呼び出して変更を保存してください。 更新せずに別のレコードに移動すると、変更は警告なしで失われます。
Find 操作の 1 つを使用することは、 MoveFirst
または MoveNext
の呼び出しと同じではありませんが、単に条件を指定せずに最初または次のレコードを最新の状態にします。 移動操作では、検索操作に従うことができます。
検索操作を使用する場合は、次の点に注意してください。
Find
が 0 以外の値を返す場合、現在のレコードは定義されません。 この場合は、現在のレコード ポインターを有効なレコードに戻す必要があります。前方スクロールのみのスナップショットタイプのレコードセットでは、検索操作を使用できません。
米国バージョンの Microsoft Jet データベース エンジンを使用していない場合でも、日付を含むフィールドを検索する場合は、米国の日付形式 (月日) を使用する必要があります。そうしないと、一致するレコードが見つからない可能性があります。
ODBC データベースと大きなダイナセットを操作する場合、特に大きなレコードセットを操作する場合は、検索操作の使用が遅くなる場合があります。 カスタマイズされた ORDERBY または WHERE 句、パラメーター クエリ、または特定のインデックス付きレコードを取得する
CDaoQuerydef
オブジェクトで SQL クエリを使用することで、パフォーマンスを向上させることができます。
関連情報については、DAO ヘルプのトピック「FindFirst、FindLast、FindNext、FindPrevious メソッド」を参照してください。
CDaoRecordset::FindNext
このメンバー関数を呼び出して、指定した条件に一致する次のレコードを検索します。
BOOL FindNext(LPCTSTR lpszFilter);
パラメーター
lpszFilter
レコードの検索に使用される文字列式 (sql ステートメントの WHERE 句など WHERE)。
戻り値
一致するレコードが見つかった場合は 0 以外、それ以外の場合は 0。
解説
FindNext
メンバー関数は、現在のレコードで検索を開始し、レコードセットの末尾まで検索します。
(特定の条件を満たすレコードだけでなく) すべてのレコードを検索に含める場合は、いずれかの移動操作を使用してレコード間を移動します。 テーブル型レコードセット内のレコードを検索するには、 Seek
メンバー関数を呼び出します。
条件に一致するレコードが見つからない場合、現在のレコード ポインターは不確定になり、 FindNext
は 0 を返します。 レコードセットに条件を満たす複数のレコードが含まれている場合、 FindFirst
は最初の出現箇所を検索し、 FindNext
は次の出現箇所を検索します。
注意事項
現在のレコードを編集する場合は、別のレコードに移動する前に、 Update
メンバー関数を呼び出して変更を保存してください。 更新せずに別のレコードに移動すると、変更は警告なしで失われます。
Find 操作の 1 つを使用することは、 MoveFirst
または MoveNext
の呼び出しと同じではありませんが、単に条件を指定せずに最初または次のレコードを最新の状態にします。 移動操作では、検索操作に従うことができます。
検索操作を使用する場合は、次の点に注意してください。
Find
が 0 以外の値を返す場合、現在のレコードは定義されません。 この場合は、現在のレコード ポインターを有効なレコードに戻す必要があります。前方スクロールのみのスナップショットタイプのレコードセットでは、検索操作を使用できません。
米国バージョンの Microsoft Jet データベース エンジンを使用していない場合でも、日付を含むフィールドを検索する場合は、米国の日付形式 (月日) を使用する必要があります。そうしないと、一致するレコードが見つからない可能性があります。
ODBC データベースと大きなダイナセットを操作する場合、特に大きなレコードセットを操作する場合は、検索操作の使用が遅くなる場合があります。 カスタマイズされた ORDERBY または WHERE 句、パラメーター クエリ、または特定のインデックス付きレコードを取得する
CDaoQuerydef
オブジェクトで SQL クエリを使用することで、パフォーマンスを向上させることができます。
関連情報については、DAO ヘルプのトピック「FindFirst、FindLast、FindNext、FindPrevious メソッド」を参照してください。
CDaoRecordset::FindPrev
このメンバー関数を呼び出して、指定した条件に一致する前のレコードを検索します。
BOOL FindPrev(LPCTSTR lpszFilter);
パラメーター
lpszFilter
レコードの検索に使用される文字列式 (sql ステートメントの WHERE 句など WHERE)。
戻り値
一致するレコードが見つかった場合は 0 以外、それ以外の場合は 0。
解説
FindPrev
メンバー関数は、現在のレコードで検索を開始し、レコードセットの先頭に向かって後方に検索します。
(特定の条件を満たすレコードだけでなく) すべてのレコードを検索に含める場合は、いずれかの移動操作を使用してレコード間を移動します。 テーブル型レコードセット内のレコードを検索するには、 Seek
メンバー関数を呼び出します。
条件に一致するレコードが見つからない場合、現在のレコード ポインターは不確定になり、 FindPrev
は 0 を返します。 レコードセットに条件を満たす複数のレコードが含まれている場合、 FindFirst
は最初の出現箇所を検索し、 FindNext
は次の出現箇所を検索します。
注意事項
現在のレコードを編集する場合は、別のレコードに移動する前に、 Update
メンバー関数を呼び出して変更を保存してください。 更新せずに別のレコードに移動すると、変更は警告なしで失われます。
Find 操作の 1 つを使用することは、 MoveFirst
または MoveNext
の呼び出しと同じではありませんが、単に条件を指定せずに最初または次のレコードを最新の状態にします。 移動操作では、検索操作に従うことができます。
検索操作を使用する場合は、次の点に注意してください。
Find
が 0 以外の値を返す場合、現在のレコードは定義されません。 この場合は、現在のレコード ポインターを有効なレコードに戻す必要があります。前方スクロールのみのスナップショットタイプのレコードセットでは、検索操作を使用できません。
米国バージョンの Microsoft Jet データベース エンジンを使用していない場合でも、日付を含むフィールドを検索する場合は、米国の日付形式 (月日) を使用する必要があります。そうしないと、一致するレコードが見つからない可能性があります。
ODBC データベースと大きなダイナセットを操作する場合、特に大きなレコードセットを操作する場合は、検索操作の使用が遅くなる場合があります。 カスタマイズされた ORDERBY または WHERE 句、パラメーター クエリ、または特定のインデックス付きレコードを取得する
CDaoQuerydef
オブジェクトで SQL クエリを使用することで、パフォーマンスを向上させることができます。
関連情報については、DAO ヘルプのトピック「FindFirst、FindLast、FindNext、FindPrevious メソッド」を参照してください。
CDaoRecordset::GetAbsolutePosition
レコードセット オブジェクトの現在のレコードのレコード番号を返します。
long GetAbsolutePosition();
戻り値
0 からレコードセット内のレコードの数までの整数。 レコードセット内の現在のレコードの序数位置に対応します。
解説
基になる DAO オブジェクトの AbsolutePosition プロパティ値は 0 から始まります。0 に設定すると、レコードセットの最初のレコードが参照されます。 GetRecordCount を呼び出すことによって、レコードセット内に設定されたレコードの数を確認できます。 GetRecordCount
を呼び出すには、カウントを決定するためにすべてのレコードにアクセスする必要があるため、時間がかかる場合があります。
レコードセットにレコードがない場合と同様に、現在のレコードがない場合は、- 1 が返されます。 現在のレコードが削除されると、AbsolutePosition プロパティの値は定義されず、MFC は参照されている場合に例外をスローします。 ダイナセットタイプのレコードセットの場合、新しいレコードがシーケンスの末尾に追加されます。
Note
このプロパティは、サロゲート レコード番号として使用するためのものではありません。 ブックマークは、特定の位置を保持して戻す推奨される方法であり、現在のレコードをすべての種類のレコードセット オブジェクトに配置する唯一の方法です。 特に、特定のレコードの位置は、そのレコードの前にあるレコードが削除されるときに変更されます。 また、レコードセット内の個々のレコードの順序は、 ORDERBY 句を使用して SQL ステートメントで作成されない限り保証されないため、レコードセットが再作成された場合、特定のレコードが同じ絶対位置を持つことも保証されません。
Note
このメンバー関数は、ダイナセットタイプおよびスナップショットタイプのレコードセットに対してのみ有効です。
関連情報については、DAO ヘルプの「AbsolutePosition プロパティ」を参照してください。
CDaoRecordset::GetBookmark
このメンバー関数を呼び出して、特定のレコードのブックマーク値を取得します。
COleVariant GetBookmark();
戻り値
現在のレコードのブックマークを表す値を返します。
解説
レコードセット オブジェクトが作成または開かれると、レコードがサポートされている場合、各レコードには一意のブックマークが既に設定されています。 レコードセットがブックマークをサポートしているかどうかを判断するには、 CanBookmark
を呼び出します。
ブックマークの値を COleVariant
オブジェクトに割り当てることで、現在のレコードのブックマークを保存できます。 別のレコードに移動した後、そのレコードにすばやく戻るために、そのCOleVariant
オブジェクトの値に対応するパラメーターを使用してSetBookmark
を呼び出します。
Note
Requery を呼び出すと、DAO ブックマークが変更されます。
関連情報については、DAO ヘルプの「Bookmark プロパティ」を参照してください。
CDaoRecordset::GetCacheSize
キャッシュされたレコードの数を取得するには、このメンバー関数を呼び出します。
long GetCacheSize();
戻り値
ODBC データ ソースからローカルにキャッシュされるデータを含むダイナセットタイプのレコードセット内のレコードの数を指定する値。
解説
データ キャッシュにより、ダイナセット タイプのレコードセット オブジェクトを介してリモート サーバーからデータを取得するアプリケーションのパフォーマンスが向上します。 キャッシュは、アプリケーションの実行中にデータが再度要求された場合に、サーバーから最近取得されたデータを保持するローカル メモリ内の領域です。 データが要求されると、Microsoft Jet データベース エンジンは、要求されたデータをサーバーから取得するのではなく、最初にキャッシュをチェックします。これには時間がかかります。 ODBC データ ソースから取得されていないデータはキャッシュに保存されません。
接続されたテーブルなどの ODBC データ ソースには、ローカル キャッシュを使用できます。
関連情報については、DAO ヘルプの「CacheSize、CacheStart プロパティ」のトピックを参照してください。
CDaoRecordset::GetCacheStart
このメンバー関数を呼び出して、キャッシュするレコードセットの最初のレコードのブックマーク値を取得します。
COleVariant GetCacheStart();
戻り値
キャッシュするレコードセット内の最初のレコードのブックマークを指定する COleVariant
。
解説
Microsoft Jet データベース エンジンは、キャッシュ範囲内のレコードをキャッシュから要求し、サーバーからキャッシュ範囲外のレコードを要求します。
Note
キャッシュから取得されたレコードには、他のユーザーによってソース データに同時に行われた変更は反映されません。
関連情報については、DAO ヘルプの「CacheSize、CacheStart プロパティ」のトピックを参照してください。
CDaoRecordset::GetCurrentIndex
このメンバー関数を呼び出して、インデックス付きテーブル型の CDaoRecordset
オブジェクトで現在使用されているインデックスを決定します。
CString GetCurrentIndex();
戻り値
テーブル型レコードセットで現在使用されているインデックスの名前を含む CString
。 インデックスが設定されていない場合は、空の文字列を返します。
解説
このインデックスは、テーブル型レコードセット内のレコードを並べ替える基準であり、レコードを検索するために Seek メンバー関数によって使用されます。
CDaoRecordset
オブジェクトは複数のインデックスを持つことができますが、一度に使用できるインデックスは 1 つだけです (ただし、CDaoTableDef オブジェクトには複数のインデックスが定義されている場合があります)。
関連情報については、DAO ヘルプの「Index オブジェクト」および「現在のインデックス」の定義を参照してください。
CDaoRecordset::GetDateCreated
このメンバー関数を呼び出して、ベース テーブルが作成された日時を取得します。
COleDateTime GetDateCreated();
戻り値
ベース テーブルが作成された日時を表す COleDateTime オブジェクト。
解説
日付と時刻の設定は、ベース テーブルが作成されたコンピューターから派生します。
関連情報については、DAO ヘルプの「DateCreated,LastUpdated プロパティ」を参照してください。
CDaoRecordset::GetDateLastUpdated
このメンバー関数を呼び出して、スキーマが最後に更新された日時を取得します。
COleDateTime GetDateLastUpdated();
戻り値
基本テーブル構造 (スキーマ) が最後に更新された日時を表す COleDateTime オブジェクト。
解説
日付と時刻の設定は、ベース テーブル構造 (スキーマ) が最後に更新されたコンピューターから派生します。
関連情報については、DAO ヘルプの「DateCreated,LastUpdated プロパティ」を参照してください。
CDaoRecordset::GetDefaultDBName
このメンバー関数を呼び出して、このレコードセットのデータベースの名前を決定します。
virtual CString GetDefaultDBName();
戻り値
このレコードセットの派生元データベースのパスと名前を含む CString
。
解説
CDaoDatabase へのポインターなしでレコードセットが作成された場合、このパスはレコードセットによって既定のデータベースを開くために使用されます。 既定では、この関数は空の文字列を返します。 ClassWizard が CDaoRecordset
から新しいレコードセットを派生させると、この関数が作成されます。
次の例は、文字列を正しく解釈するために必要な、文字列内での二重円記号 (\\) の使用を示しています。
CString CCustSet::GetDefaultDBName()
{
return _T("c:\\mydir\\datasrc.mdb");
}
CDaoRecordset::GetDefaultSQL
フレームワークは、このメンバー関数を呼び出して、レコードセットの基になっている既定の SQL ステートメントを取得します。
virtual CString GetDefaultSQL();
戻り値
既定の SQL ステートメントを含む CString
。
解説
これは、テーブル名または SQL SELECT ステートメントです。
ClassWizard を使用してレコードセット クラスを宣言することで、既定の SQL ステートメントを間接的に定義すると、ClassWizard によってこのタスクが実行されます。
null SQL 文字列を Open に渡すと、レコードセットのテーブル名または SQL を決定するためにこの関数が呼び出されます。
CDaoRecordset::GetEditMode
このメンバー関数を呼び出して、次のいずれかの値である編集の状態を確認します。
short GetEditMode();
戻り値
現在のレコードの編集状態を示す値を返します。
解説
値 | 説明 |
---|---|
dbEditNone |
編集操作は進行中です。 |
dbEditInProgress |
Edit が呼び出されました。 |
dbEditAdd |
AddNew が呼び出されました。 |
関連情報については、DAO ヘルプの「EditMode プロパティ」を参照してください。
CDaoRecordset::GetFieldCount
レコードセットで定義されているフィールド (列) の数を取得するには、このメンバー関数を呼び出します。
short GetFieldCount();
戻り値
レコードセット内のフィールドの数。
解説
関連情報については、DAO ヘルプの「Count プロパティ」を参照してください。
CDaoRecordset::GetFieldInfo
レコードセット内のフィールドに関する情報を取得するには、このメンバー関数を呼び出します。
void GetFieldInfo(
int nIndex,
CDaoFieldInfo& fieldinfo,
DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);
void GetFieldInfo(
LPCTSTR lpszName,
CDaoFieldInfo& fieldinfo,
DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);
パラメーター
nIndex
レコードセットの Fields コレクション内の定義済みフィールドの 0 から始まるインデックス。インデックスによる参照用です。
fieldinfo
CDaoFieldInfo 構造体への参照。
dwInfoOptions
取得するレコードセットに関する情報を指定するオプション。 使用可能なオプションと、関数が返される原因を示します。 パフォーマンスを最大限に高めるには、必要な情報のレベルのみを取得します。
AFX_DAO_PRIMARY_INFO
(既定値)名前、型、サイズ、属性AFX_DAO_SECONDARY_INFO
主な情報に加えて、序数の位置、必須、ゼロ長の許可、照合順序、外部名、ソース フィールド、ソース テーブルAFX_DAO_ALL_INFO
プライマリとセカンダリの情報に加えて、既定値、検証規則、検証テキスト
lpszName
フィールドの名前。
解説
関数の 1 つのバージョンでは、インデックスでフィールドを検索できます。 もう 1 つのバージョンでは、名前でフィールドを検索できます。
返される情報の説明については、 CDaoFieldInfo 構造体を参照してください。 この構造体には、 dwInfoOptions の説明に記載されている情報の項目に対応するメンバーがあります。 1 つのレベルで情報を要求すると、以前のレベルの情報も取得されます。
関連情報については、DAO ヘルプの「Attributes プロパティ」を参照してください。
CDaoRecordset::GetFieldValue
レコードセット内のデータを取得するには、このメンバー関数を呼び出します。
virtual void GetFieldValue(
LPCTSTR lpszName,
COleVariant& varValue);
virtual void GetFieldValue(
int nIndex,
COleVariant& varValue);
virtual COleVariant GetFieldValue(LPCTSTR lpszName);
virtual COleVariant GetFieldValue(int nIndex);
パラメーター
lpszName
フィールドの名前を含む文字列へのポインター。
varValue
フィールドの値を格納する COleVariant
オブジェクトへの参照。
nIndex
インデックスで検索するレコードセットの Fields コレクション内のフィールドの 0 から始まるインデックス。
戻り値
値を返す 2 つのバージョンの GetFieldValue
は、フィールドの値を含む COleVariant オブジェクトを返します。
解説
フィールドは、名前または序数で検索できます。
Note
COleVariant
オブジェクトを返すバージョンを呼び出すのではなく、COleVariant
オブジェクト参照をパラメーターとして受け取るこのメンバー関数のいずれかのバージョンを呼び出す方が効率的です。 この関数の後者のバージョンは、下位互換性のために保持されます。
GetFieldValue
および SetFieldValue を使用して、DoFieldExchange メカニズムを使用して列を静的にバインドするのではなく、実行時にフィールドを動的にバインドします。
GetFieldValue
と DoFieldExchange
メカニズムを組み合わせてパフォーマンスを向上させることができます。 たとえば、 GetFieldValue
を使用してオンデマンドでのみ必要な値を取得し、その呼び出しをインターフェイスの [詳細情報] ボタンに割り当てます。
関連情報については、DAO ヘルプの「フィールド オブジェクト」および「値プロパティ」のトピックを参照してください。
CDaoRecordset::GetIndexCount
このメンバー関数を呼び出して、テーブル型レコードセットで使用できるインデックスの数を決定します。
short GetIndexCount();
戻り値
テーブル型レコードセット内のインデックスの数。
解説
GetIndexCount
は、レコードセット内のすべてのインデックスをループ処理する場合に便利です。 そのためには、GetIndexInfo
でGetIndexCount
を使用します。 ダイナセットタイプまたはスナップショットタイプのレコードセットでこのメンバー関数を呼び出すと、MFC は例外をスローします。
関連情報については、DAO ヘルプの「Attributes プロパティ」を参照してください。
CDaoRecordset::GetIndexInfo
レコードセットの基になるベース テーブルで定義されているインデックスに関するさまざまな種類の情報を取得するには、このメンバー関数を呼び出します。
void GetIndexInfo(
int nIndex,
CDaoIndexInfo& indexinfo,
DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);
void GetIndexInfo(
LPCTSTR lpszName,
CDaoIndexInfo& indexinfo,
DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);
パラメーター
nIndex
テーブルの Indexes コレクション内の 0 から始まるインデックス。数値の位置による参照用です。
indexinfo
CDaoIndexInfo 構造体への参照。
dwInfoOptions
取得するインデックスに関する情報を指定するオプション。 使用可能なオプションと、関数が返される原因を示します。 パフォーマンスを最大限に高めるには、必要な情報のレベルのみを取得します。
AFX_DAO_PRIMARY_INFO
(既定値)名前、フィールド情報、フィールドAFX_DAO_SECONDARY_INFO
プライマリ情報に加えて、プライマリ、一意、クラスター化、IgnoreNulls、Required、ForeignAFX_DAO_ALL_INFO
プライマリとセカンダリの情報に加えて、個別のカウント
lpszName
名前で検索するためのインデックス オブジェクトの名前へのポインター。
解説
関数の 1 つのバージョンでは、コレクション内の位置でインデックスを検索できます。 もう 1 つのバージョンでは、名前でインデックスを検索できます。
返される情報の説明については、 CDaoIndexInfo 構造体を参照してください。 この構造体には、 dwInfoOptions の説明に記載されている情報の項目に対応するメンバーがあります。 1 つのレベルで情報を要求すると、以前のレベルの情報も取得されます。
関連情報については、DAO ヘルプの「Attributes プロパティ」を参照してください。
CDaoRecordset::GetLastModifiedBookmark
このメンバー関数を呼び出して、最近追加または更新されたレコードのブックマークを取得します。
COleVariant GetLastModifiedBookmark();
戻り値
最近追加または変更されたレコードを示すブックマークを含む COleVariant
。
解説
レコードセット オブジェクトが作成または開かれると、レコードがサポートされている場合、各レコードには一意のブックマークが既に設定されています。 GetBookmark を呼び出して、レコードセットがブックマークをサポートしているかどうかを判断します。 レコードセットがブックマークをサポートしていない場合は、 CDaoException
がスローされます。
レコードを追加すると、レコードセットの末尾に表示され、現在のレコードではありません。 新しいレコードを最新の状態にするには、 GetLastModifiedBookmark
を呼び出し、 SetBookmark
を呼び出して新しく追加されたレコードに戻ります。
関連情報については、DAO ヘルプの「LastModified プロパティ」を参照してください。
CDaoRecordset::GetLockingMode
このメンバー関数を呼び出して、レコードセットに対して有効なロックの種類を決定します。
BOOL GetLockingMode();
戻り値
ロックの種類がペシミスティックの場合は 0 以外、オプティミスティック レコード ロックの場合は 0。
解説
ペシミスティック ロックが有効な場合、編集中のレコードを含むデータ ページは、 Edit メンバー関数を呼び出すとすぐにロックされます。 ページは、 Update または Close メンバー関数、または Move 操作または Find 操作を呼び出すとロック解除されます。
オプティミスティック ロックが有効な場合、レコードを含むデータ ページは、レコードが Update
メンバー関数で更新されている間のみロックされます。
ODBC データ ソースを使用する場合、ロック モードは常にオプティミスティックです。
関連情報については、DAO ヘルプの「LockEdits プロパティ」および「マルチユーザー アプリケーションでの動作のロック」に関するトピックを参照してください。
CDaoRecordset::GetName
このメンバー関数を呼び出して、レコードセットの名前を取得します。
CString GetName();
戻り値
レコードセットの名前を含む CString
。
解説
レコードセットの名前は文字で始まる必要があり、最大 40 文字を含めることができます。 数字とアンダースコア文字を含めることができますが、句読点やスペースを含めることはできません。
関連情報については、DAO ヘルプの「Name プロパティ」を参照してください。
CDaoRecordset::GetParamValue
このメンバー関数を呼び出して、基になる DAOParameter オブジェクトに格納されている指定されたパラメーターの現在の値を取得します。
virtual COleVariant GetParamValue(int nIndex);
virtual COleVariant GetParamValue(LPCTSTR lpszName);
パラメーター
nIndex
基になる DAOParameter オブジェクト内のパラメーターの数値位置。
lpszName
必要な値を持つパラメーターの名前。
戻り値
パラメーターの値を含むクラス COleVariant のオブジェクト。
解説
パラメーターには、名前またはコレクション内の数値の位置でアクセスできます。
関連情報については、DAO ヘルプのトピック「パラメーター オブジェクト」を参照してください。
CDaoRecordset::GetPercentPosition
ダイナセットタイプまたはスナップショットタイプのレコードセットを操作する場合、レコードセットを完全に設定する前に GetPercentPosition
を呼び出すと、移動の量は、 GetRecordCountを呼び出すことによって示されたアクセスされたレコードの数に対して相対的になります。
float GetPercentPosition();
戻り値
レコードセット内のレコードの割合に基づいて、レコードセット オブジェクト内の現在のレコードのおおよその位置を示す 0 から 100 までの数値。
解説
最後のレコードに移動するには、 MoveLast を呼び出してすべてのレコードセットの作成を完了しますが、これにはかなりの時間がかかる場合があります。
インデックスのないテーブルを含め、3 種類のレコードセット オブジェクトすべてに対して GetPercentPosition
を呼び出すことができます。 ただし、前方スクロール スナップショットや、外部データベースに対するパススルー クエリから開かれたレコードセットでは、 GetPercentPosition
を呼び出すことはできません。 現在のレコードがない場合、または現在のレコードが削除されている場合は、 CDaoException
がスローされます。
関連情報については、DAO ヘルプの「PercentPosition プロパティ」を参照してください。
CDaoRecordset::GetRecordCount
このメンバー関数を呼び出して、アクセスされたレコードセット内のレコードの数を確認します。
long GetRecordCount();
戻り値
レコードセット オブジェクトでアクセスされるレコードの数を返します。
解説
GetRecordCount
では、すべてのレコードがアクセスされるまで、ダイナセットタイプまたはスナップショットタイプのレコードセットに含まれるレコードの数は示されません。 このメンバー関数呼び出しが完了するまでにかなりの時間がかかる場合があります。
最後のレコードにアクセスすると、戻り値はレコードセット内の削除されていないレコードの合計数を示します。 最後のレコードに強制的にアクセスするには、レコードセットの MoveLast
または FindLast
メンバー関数を呼び出します。 また、SQL カウントを使用して、クエリから返されるおおよそのレコード数を決定することもできます。
アプリケーションがダイナセットタイプのレコードセット内のレコードを削除すると、 GetRecordCount
の戻り値が減少します。 ただし、他のユーザーによって削除されたレコードは、現在のレコードが削除されたレコードに配置されるまで、 GetRecordCount
には反映されません。 レコード数に影響を与えるトランザクションを実行し、その後トランザクションをロールバックした場合、 GetRecordCount
は残りのレコードの実際の数を反映しません。
スナップショットタイプのレコードセットからの GetRecordCount
の値は、基になるテーブルの変更の影響を受けません。
テーブル型レコードセットの GetRecordCount
の値は、テーブル内のレコードの概数を反映し、テーブル レコードが追加および削除されるとすぐに影響を受けます。
レコードのないレコードセットは、値 0 を返します。 アタッチされたテーブルまたは ODBC データベースを使用する場合、 GetRecordCount
は常に - 1 を返します。 レコードセットで Requery
メンバー関数を呼び出すと、クエリが再実行された場合と同様に、 GetRecordCount
の値がリセットされます。
関連情報については、DAO ヘルプの「RecordCount プロパティ」を参照してください。
CDaoRecordset::GetSQL
このメンバー関数を呼び出して、レコードセットを開いたときにレコードセットのレコードを選択するために使用された SQL ステートメントを取得します。
CString GetSQL() const;
戻り値
SQL ステートメントを含む CString
。
解説
これは通常、SQL SELECT ステートメントです。
通常、 GetSQL
によって返される文字列は、 lpszSQL パラメーター内のレコードセットに渡した文字列とは異なります Open メンバー関数。 これは、レコードセットは、 Open
に渡した内容、ClassWizard で指定した内容、および m_strFilter および m_strSort データ メンバーで指定した内容に基づいて完全な SQL ステートメントを構築するためです。
Note
このメンバー関数は、 Open
を呼び出した後にのみ呼び出します。
関連情報については、DAO ヘルプの「SQL プロパティ」を参照してください。
CDaoRecordset::GetType
レコードセットを開いた後、このメンバー関数を呼び出して、レコードセット オブジェクトの型を決定します。
short GetType();
戻り値
レコードセットの種類を示す次のいずれかの値。
dbOpenTable
テーブル型レコードセットdbOpenDynaset
ダイナセットタイプレコードセットdbOpenSnapshot
スナップショットタイプのレコードセット
解説
関連情報については、DAO ヘルプの「Type プロパティ」を参照してください。
CDaoRecordset::GetValidationRule
このメンバー関数を呼び出して、データの検証に使用される規則を決定します。
CString GetValidationRule();
戻り値
変更またはテーブルに追加されたレコードのデータを検証する値を含む CString
オブジェクト。
解説
このルールはテキストベースであり、基になるテーブルが変更されるたびに適用されます。 データが有効でない場合、MFC は例外をスローします。 返されるエラー メッセージは、基になるフィールド オブジェクトの ValidationText プロパティのテキスト (指定されている場合)、または基になるフィールド オブジェクトの ValidationRule プロパティで指定された式のテキストです。 GetValidationText を呼び出して、エラー メッセージのテキストを取得できます。
たとえば、月の日を必要とするレコード内のフィールドには、"DAY BETWEEN 1 AND 31" などの検証規則がある場合があります。
関連情報については、DAO ヘルプの「ValidationRule プロパティ」を参照してください。
CDaoRecordset::GetValidationText
基になるフィールド オブジェクトの ValidationText プロパティのテキストを取得するには、このメンバー関数を呼び出します。
CString GetValidationText();
戻り値
フィールドの値が基になるフィールド オブジェクトの検証規則を満たしていない場合に表示されるメッセージのテキストを含む CString
オブジェクト。
解説
関連情報については、DAO ヘルプの「ValidationText プロパティ」を参照してください。
CDaoRecordset::IsBOF
レコードからレコードまでスクロールする前に、このメンバー関数を呼び出して、レコードセットの最初のレコードの前に移動したかどうかを確認します。
BOOL IsBOF() const;
戻り値
レコードセットにレコードが含まれている場合、または最初のレコードの前に後方にスクロールした場合は 0 以外。それ以外の場合は 0。
解説
IsBOF
をIsEOF
と共に呼び出して、レコードセットにレコードが含まれているか空であるかを判断することもできます。 Open
を呼び出した直後に、レコードセットにレコードが含まれている場合、IsBOF
は 0 以外の値を返します。 少なくとも 1 つのレコードを含むレコードセットを開くと、最初のレコードが現在のレコードになり、 IsBOF
0 が返されます。
最初のレコードが現在のレコードで、 MovePrev
を呼び出すと、 IsBOF
は 0 以外の値を返します。 IsBOF
が 0 以外の値を返し、MovePrev
を呼び出すと、例外がスローされます。 IsBOF
が 0 以外の値を返した場合、現在のレコードは未定義になり、現在のレコードを必要とするアクションは例外になります。
特定のメソッドが IsBOF
と IsEOF
の設定に及ぼす影響:
Open*
を内部的に呼び出すと、レコードセット内の最初のレコードが現在のレコードMoveFirst
呼び出されます。 そのため、空のレコード セットに対してOpen
を呼び出すと、IsBOF
とIsEOF
が 0 以外の値を返します。 (失敗したMoveFirst
またはMoveLast
呼び出しの動作については、次の表を参照してください)。レコードを正常に見つけるすべての Move 操作により、
IsBOF
とIsEOF
の両方が 0 を返します。AddNew
呼び出しの後に新しいレコードを正常に挿入するUpdate
呼び出しを実行すると、IsBOF
は 0 を返しますが、IsEOF
が既に 0 以外の場合にのみ返されます。IsEOF
の状態は常に変更されません。 Microsoft Jet データベース エンジンで定義されているように、空のレコード セットの現在のレコード ポインターはファイルの末尾に存在するため、現在のレコードの後に新しいレコードが挿入されます。Delete
呼び出しは、レコードセットから残りのレコードのみを削除しても、IsBOF
またはIsEOF
の値は変更されません。
次の表は、 IsBOF
/ IsEOF
のさまざまな組み合わせで許可される移動操作を示しています。
都道府県 | MoveFirst, MoveLast | MovePrev、 Move < 0 |
Move 0 | MoveNext、 Move > 0 |
---|---|---|---|---|
IsBOF =0 以外、IsEOF =0 |
許可 | 例外 | 例外 | 許可 |
IsBOF =0,IsEOF =0 以外 |
許可する | 許可する | 例外 | 例外 |
両方とも 0 以外 | 例外 | 例外 | 例外 | 例外 |
両方 0 | 許可する | 許可 | 許可 | 許可する |
移動操作を許可しても、操作でレコードが正常に検索されるわけではありません。 指定した移動操作の実行が許可され、例外が生成されることを示すだけです。 IsBOF
およびIsEOF
メンバー関数の値は、移動の試行の結果として変更される可能性があります。
レコードが見つからない移動操作が IsBOF
と IsEOF
の設定の値に及ぼす影響を次の表に示します。
操作 | IsBOF | IsEOF |
---|---|---|
MoveFirst , MoveLast |
Nonzero | Nonzero |
Move 0 |
変更なし | 変更なし |
MovePrev 、 Move < 0 |
Nonzero | 変更なし |
MoveNext 、 Move > 0 |
変更なし | Nonzero |
関連情報については、DAO ヘルプのトピック「BOF、EOF プロパティ」を参照してください。
CDaoRecordset::IsDeleted
このメンバー関数を呼び出して、現在のレコードが削除されたかどうかを確認します。
BOOL IsDeleted() const;
戻り値
レコードセットが削除されたレコードに配置されている場合は 0 以外。それ以外の場合は 0。
解説
レコードにスクロールして TRUE (0 以外) を返 IsDeleted
場合は、他のレコードセット操作を実行する前に、別のレコードまでスクロールする必要があります。
Note
スナップショットまたはテーブルタイプのレコードセット内のレコードの削除された状態を確認する必要はありません。 レコードはスナップショットから削除できないため、 IsDeleted
を呼び出す必要はありません。 テーブル型レコードセットの場合、削除されたレコードはレコードセットから実際に削除されます。 自分、別のユーザー、または別のレコードセットでレコードが削除されると、そのレコードに戻ることはできません。 そのため、 IsDeleted
を呼び出す必要はありません。
ダイナセットからレコードを削除すると、そのレコードはレコードセットから削除され、そのレコードに戻ることはできません。 ただし、ダイナセット内のレコードが別のユーザーまたは同じテーブルに基づく別のレコードセットで削除された場合、後でそのレコードにスクロールすると、 IsDeleted
は TRUE を返します。
関連情報については、DAO ヘルプの「Delete メソッド」、「LastModified プロパティ」、「EditMode プロパティ」の各トピックを参照してください。
CDaoRecordset::IsEOF
レコードからレコードまでスクロールして、レコードセットの最後のレコードを超えたかどうかを確認するには、このメンバー関数を呼び出します。
BOOL IsEOF() const;
戻り値
レコードセットにレコードが含まれている場合、または最後のレコードを超えてスクロールした場合は 0 以外。それ以外の場合は 0。
解説
IsEOF
を呼び出して、レコードセットにレコードが含まれているか空であるかを判断することもできます。 Open
を呼び出した直後に、レコードセットにレコードが含まれている場合、IsEOF
は 0 以外の値を返します。 少なくとも 1 つのレコードを含むレコードセットを開くと、最初のレコードが現在のレコードになり、 IsEOF
0 が返されます。
MoveNext
を呼び出すときに最後のレコードが現在のレコードである場合、IsEOF
は 0 以外の値を返します。 IsEOF
が 0 以外の値を返し、MoveNext
を呼び出すと、例外がスローされます。 IsEOF
が 0 以外の値を返した場合、現在のレコードは未定義になり、現在のレコードを必要とするアクションは例外になります。
特定のメソッドが IsBOF
と IsEOF
の設定に及ぼす影響:
Open
を内部的に呼び出すと、レコードセット内の最初のレコードが現在のレコードMoveFirst
呼び出されます。 そのため、空のレコード セットに対してOpen
を呼び出すと、IsBOF
とIsEOF
が 0 以外の値を返します。 (失敗したMoveFirst
呼び出しの動作については、次の表を参照してください)。レコードを正常に見つけるすべての Move 操作により、
IsBOF
とIsEOF
の両方が 0 を返します。AddNew
呼び出しの後に新しいレコードを正常に挿入するUpdate
呼び出しを実行すると、IsBOF
は 0 を返しますが、IsEOF
が既に 0 以外の場合にのみ返されます。IsEOF
の状態は常に変更されません。 Microsoft Jet データベース エンジンで定義されているように、空のレコード セットの現在のレコード ポインターはファイルの末尾に存在するため、現在のレコードの後に新しいレコードが挿入されます。Delete
呼び出しは、レコードセットから残りのレコードのみを削除しても、IsBOF
またはIsEOF
の値は変更されません。
次の表は、 IsBOF
/ IsEOF
のさまざまな組み合わせで許可される移動操作を示しています。
都道府県 | MoveFirst, MoveLast | MovePrev、 Move < 0 |
Move 0 | MoveNext、 Move > 0 |
---|---|---|---|---|
IsBOF =0 以外、IsEOF =0 |
許可 | 例外 | 例外 | 許可 |
IsBOF =0,IsEOF =0 以外 |
許可する | 許可する | 例外 | 例外 |
両方とも 0 以外 | 例外 | 例外 | 例外 | 例外 |
両方 0 | 許可する | 許可 | 許可 | 許可する |
移動操作を許可しても、操作でレコードが正常に検索されるわけではありません。 指定した移動操作の実行が許可され、例外が生成されることを示すだけです。 IsBOF
およびIsEOF
メンバー関数の値は、Move の試行の結果として変更される可能性があります。
レコードが見つからない移動操作が IsBOF
と IsEOF
の設定の値に及ぼす影響を次の表に示します。
操作 | IsBOF | IsEOF |
---|---|---|
MoveFirst , MoveLast |
Nonzero | Nonzero |
Move 0 |
変更なし | 変更なし |
MovePrev 、 Move < 0 |
Nonzero | 変更なし |
MoveNext 、 Move > 0 |
変更なし | Nonzero |
関連情報については、DAO ヘルプのトピック「BOF、EOF プロパティ」を参照してください。
CDaoRecordset::IsFieldDirty
このメンバー関数を呼び出して、ダイナセットの指定されたフィールド データ メンバーに "ダーティ" (変更) のフラグが設定されているかどうかを確認します。
BOOL IsFieldDirty(void* pv);
パラメーター
pv
状態を確認するフィールド データ メンバーへのポインター。または、いずれかのフィールドがダーティかどうかを判断する NULL。
戻り値
指定されたフィールド データ メンバーがダーティとしてフラグが設定されている場合は 0 以外。それ以外の場合は 0。
解説
現在のレコードが (Edit
または AddNew
の呼び出しの後に) CDaoRecordset
のUpdate
メンバー関数の呼び出しによって更新されると、すべてのダーティ フィールド データ メンバーのデータがデータ ソースのレコードに転送されます。 この知識があれば、データ ソースに書き込まれないようにフィールド データ メンバーのフラグを解除して列をマークするなど、さらに手順を実行できます。
IsFieldDirty
は、 DoFieldExchange
によって実装されます。
CDaoRecordset::IsFieldNull
このメンバー関数を呼び出して、レコードセットの指定されたフィールド データ メンバーに Null のフラグが設定されているかどうかを確認します。
BOOL IsFieldNull(void* pv);
パラメーター
pv
状態を確認するフィールド データ メンバーへのポインター。Null を指定して、いずれかのフィールドが Null かどうかを判断します。
戻り値
指定されたフィールド データ メンバーに Null のフラグが設定されている場合は 0 以外。それ以外の場合は 0。
解説
(データベースの用語では、Null は "値を持たない" ことを意味し、C++ の NULL と同じではありません)。フィールド データ メンバーに Null のフラグが設定されている場合、値がない現在のレコードの列として解釈されます。
Note
次のコード例に示すように、状況によっては、 IsFieldNull
の使用が非効率的になる場合があります。
COleVariant varValue;
void *pField = &(rs.m_Age);
int nField = 2;
// this code is inefficient because data
// must be retrieved for both IsFieldNull
// and GetFieldValue
if (!rs.IsFieldNull(pField))
rs.GetFieldValue(nField, varValue);
// this code is more efficient
rs.GetFieldValue(nField, varValue);
if (varValue.vt == VT_NULL)
varValue.Attach(varNewVal); // do something
Note
CDaoRecordset
から派生せずに動的レコード バインドを使用している場合は、例に示すようにVT_NULLを使用してください。
CDaoRecordset::IsFieldNullable
このメンバー関数を呼び出して、指定されたフィールド データ メンバーが "null 許容" かどうかを判断します (Null 値に設定できます。C++ NULL は Null と同じではありません。データベースの用語では、"値を持たない" ことを意味します)。
BOOL IsFieldNullable(void* pv);
パラメーター
pv
状態を確認するフィールド データ メンバーへのポインター。Null を指定して、いずれかのフィールドが Null かどうかを判断します。
戻り値
指定したフィールド データ メンバーを Null にできる場合は 0 以外。それ以外の場合は 0。
解説
Null にできないフィールドには値が必要です。 レコードの追加または更新時にこのようなフィールドを Null に設定しようとすると、データ ソースは追加または更新を拒否し、 Update
は例外をスローします。 この例外は、SetFieldNull
を呼び出すときではなく、Update
を呼び出すときに発生します。
CDaoRecordset::IsOpen
このメンバー関数を呼び出して、レコードセットが開いているかどうかを確認します。
BOOL IsOpen() const;
戻り値
レコードセット オブジェクトの Open
または Requery
メンバー関数が以前に呼び出され、レコードセットが閉じていない場合は 0 以外。それ以外の場合は 0。
解説
CDaoRecordset::m_bCheckCacheForDirtyFields
キャッシュされたフィールドが自動的にダーティ (変更) および Null としてマークされるかどうかを示すフラグが含まれます。
解説
フラグの既定値は TRUE です。 このデータ メンバーの設定は、ダブル バッファリング メカニズム全体を制御します。 フラグを TRUE に設定すると、DFX メカニズムを使用してフィールドごとにキャッシュをオフにすることができます。 フラグを FALSE に設定した場合は、 SetFieldDirty
を呼び出して、自分で SetFieldNull
する必要があります。
Open
を呼び出す前に、このデータ メンバーを設定します。 このメカニズムは、主に使いやすさを目的とします。 変更が行われると、フィールドがダブルバッファリングされるため、パフォーマンスが低下する可能性があります。
CDaoRecordset::m_nFields
レコードセット クラスのフィールド データ メンバーの数と、データ ソースからレコードセットによって選択された列の数を格納します。
解説
レコードセット クラスのコンストラクターは、静的にバインドされたフィールドの正しい数で m_nFields
を初期化する必要があります。 ClassWizard は、この初期化を使用してレコードセット クラスを宣言するときに書き込みます。 手動で記述することもできます。
フレームワークでは、この数値を使用して、フィールド データ メンバーと、データ ソース上の現在のレコードの対応する列の間の相互作用を管理します。
Note
この数は、パラメーター CDaoFieldExchange::outputColumn
でSetFieldType
を呼び出した後にDoFieldExchange
に登録された出力列の数に対応している必要があります。
CDaoRecordset::GetFieldValue
とCDaoRecordset::SetFieldValue
を使用して、列を動的にバインドできます。 その場合、DoFieldExchange
メンバー関数内の DFX 関数呼び出しの数を反映するために、m_nFields
でカウントをインクリメントする必要はありません。
CDaoRecordset::m_nParams
レコードセット クラス内のパラメーター データ メンバーの数 (レコードセットのクエリで渡されたパラメーターの数) を格納します。
解説
レコードセット クラスにパラメーター データ メンバーがある場合、クラスのコンストラクターは正しい数値で m_nParams 初期化する必要があります。 m_nParamsの値の既定値は 0 です。 パラメーター データ メンバーを追加する場合 (手動で行う必要があります)、パラメーターの数を反映するために、クラス コンストラクターに初期化を手動で追加する必要もあります ( m_strFilter または m_strSort 文字列内の '' プレースホルダーの数以上である必要があります)。
フレームワークは、レコードセットのクエリをパラメーター化するときにこの数を使用します。
Note
この数は、パラメーター CFieldExchange::param
でSetFieldType
を呼び出した後にDoFieldExchange
に登録された "params" の数に対応している必要があります。
関連情報については、DAO ヘルプのトピック「パラメーター オブジェクト」を参照してください。
CDaoRecordset::m_pDAORecordset
CDaoRecordset
オブジェクトの基になる DAO レコードセット オブジェクトの OLE インターフェイスへのポインターを格納します。
解説
DAO インターフェイスに直接アクセスする必要がある場合は、このポインターを使用します。
関連情報については、DAO ヘルプの「Recordset オブジェクト」を参照してください。
CDaoRecordset::m_pDatabase
レコードセットがデータ ソースに接続されている CDaoDatabase
オブジェクトへのポインターを格納します。
解説
この変数は 2 つの方法で設定されます。 通常は、レコードセット オブジェクトを構築するときに、既に開いている CDaoDatabase
オブジェクトへのポインターを渡します。 代わりに NULL を渡 CDaoRecordset
、 CDaoDatabase
オブジェクトを作成して開きます。 どちらの場合も、 CDaoRecordset
はこの変数にポインターを格納します。
通常、 m_pDatabase
に格納されているポインターを直接使用する必要はありません。 ただし、 CDaoRecordset
に独自の拡張機能を記述する場合は、ポインターの使用が必要になる場合があります。 たとえば、独自の CDaoException
をスローする場合は、ポインターが必要になる場合があります。
関連情報については、DAO ヘルプの「データベース オブジェクト」を参照してください。
CDaoRecordset::m_strFilter
SQL ステートメントの WHERE 句を作成するために使用される文字列を格納します。
解説
レコードセットをフィルター処理するための予約語 WHERE は含まれません。 このデータ メンバーの使用は、テーブル型のレコードセットには適用できません。 CDaoQueryDef
ポインターを使用してレコードセットを開く場合、m_strFilter
の使用は無効です。
米国バージョンの Microsoft Jet データベース エンジンを使用していない場合でも、日付を含むフィールドをフィルター処理する場合は、米国の日付形式 (月日-年) を使用します。それ以外の場合、データは期待どおりにフィルター処理されない可能性があります。
関連情報については、DAO ヘルプの「フィルター プロパティ」を参照してください。
CDaoRecordset::m_strSort
SQL ステートメントの ORDERBY 句を含む文字列が含まれています。予約語 ORDERBY。
解説
ダイナセットタイプおよびスナップショットタイプのレコードセットオブジェクトを並べ替えることができます。
テーブル型のレコードセット オブジェクトを並べ替えることはできません。 テーブル型レコードセットの並べ替え順序を決定するには、 SetCurrentIndex を呼び出します。
m_strSortを使用しても、CDaoQueryDef
ポインターを使用してレコードセットを開くときには効果がありません。
関連情報については、DAO ヘルプの「並べ替えプロパティ」を参照してください。
CDaoRecordset::Move
現在のレコードからレコードセット lRows レコードを配置するには、このメンバー関数を呼び出します。
virtual void Move(long lRows);
パラメーター
lRows
前後に移動するレコードの数。 正の値は、レコードセットの末尾に向かって前方に移動します。 負の値は、先頭に向かって後方に移動します。
解説
前後に移動できます。 Move( 1 )
は MoveNext
に相当し、 Move( -1 )
は MovePrev
に相当します。
注意事項
レコードセットにレコードがない場合、 Move
関数のいずれかを呼び出すと例外がスローされます。 一般に、移動操作の前に IsBOF
と IsEOF
の両方を呼び出して、レコードセットにレコードがあるかどうかを判断します。 Open
またはRequery
を呼び出した後、IsBOF
またはIsEOF
を呼び出します。
Note
レコードセットの先頭または末尾を超えてスクロールした場合 ( IsBOF
または IsEOF
は 0 以外の値を返します)、 Move
の呼び出しは CDaoException
をスローします。
Note
現在のレコードの更新または追加中に Move
関数のいずれかを呼び出すと、更新は警告なしで失われます。
前方スクロール スナップショットで Move
を呼び出す場合、 lRows パラメーターは正の整数である必要があり、ブックマークは許可されないため、前に進むだけです。
レコードセット内の最初、最後、次、または前のレコードを現在のレコードにするには、 MoveFirst
、 MoveLast
、 MoveNext
、または MovePrev
メンバー関数を呼び出します。
関連情報については、DAO ヘルプの「Move メソッド」および「MoveFirst、MoveLast、MoveNext、MovePrevious メソッド」のトピックを参照してください。
CDaoRecordset::MoveFirst
このメンバー関数を呼び出して、レコードセット内の最初のレコード (存在する場合) を現在のレコードにします。
void MoveFirst();
解説
レコードセットを開いた直後に MoveFirst
を呼び出す必要はありません。 その時点で、最初のレコード (存在する場合) は自動的に現在のレコードになります。
注意事項
レコードセットにレコードがない場合、 Move
関数のいずれかを呼び出すと例外がスローされます。 一般に、移動操作の前に IsBOF
と IsEOF
の両方を呼び出して、レコードセットにレコードがあるかどうかを判断します。 Open
またはRequery
を呼び出した後、IsBOF
またはIsEOF
を呼び出します。
Note
現在のレコードの更新または追加中に Move
関数のいずれかを呼び出すと、更新は警告なしで失われます。
Move
関数を使用して、条件を適用せずにレコード間を移動します。 特定の条件を満たすダイナセット タイプまたはスナップショット タイプのレコードセット オブジェクト内のレコードを検索するには、[検索]操作を使用します。 テーブル型レコードセット オブジェクト内のレコードを検索するには、 Seek
を呼び出します。
レコードセットがテーブル型のレコードセットを参照している場合、移動はテーブルの現在のインデックスに従います。 基になる DAO オブジェクトの Index プロパティを使用して、現在のインデックスを設定できます。 現在のインデックスを設定しない場合、返されるレコードの順序は未定義です。
SQL クエリまたは querydef に基づいてレコードセット オブジェクトに対して MoveLast
を呼び出すと、クエリは強制的に完了し、レコードセット オブジェクトは完全に設定されます。
前方スクロール スナップショットを使用して MoveFirst
または MovePrev
メンバー関数を呼び出すことはできません。
レコードセット オブジェクト内の現在のレコードの位置を特定の数のレコードを前後に移動するには、 Move
を呼び出します。
関連情報については、DAO ヘルプの「Move メソッド」および「MoveFirst、MoveLast、MoveNext、MovePrevious メソッド」のトピックを参照してください。
CDaoRecordset::MoveLast
このメンバー関数を呼び出して、レコードセット内の最後のレコード (存在する場合) を現在のレコードにします。
void MoveLast();
解説
注意事項
レコードセットにレコードがない場合、 Move
関数のいずれかを呼び出すと例外がスローされます。 一般に、移動操作の前に IsBOF
と IsEOF
の両方を呼び出して、レコードセットにレコードがあるかどうかを判断します。 Open
またはRequery
を呼び出した後、IsBOF
またはIsEOF
を呼び出します。
Note
現在のレコードの更新または追加中に Move
関数のいずれかを呼び出すと、更新は警告なしで失われます。
Move
関数を使用して、条件を適用せずにレコード間を移動します。 特定の条件を満たすダイナセット タイプまたはスナップショット タイプのレコードセット オブジェクト内のレコードを検索するには、[検索]操作を使用します。 テーブル型レコードセット オブジェクト内のレコードを検索するには、 Seek
を呼び出します。
レコードセットがテーブル型のレコードセットを参照している場合、移動はテーブルの現在のインデックスに従います。 基になる DAO オブジェクトの Index プロパティを使用して、現在のインデックスを設定できます。 現在のインデックスを設定しない場合、返されるレコードの順序は未定義です。
SQL クエリまたは querydef に基づいてレコードセット オブジェクトに対して MoveLast
を呼び出すと、クエリは強制的に完了し、レコードセット オブジェクトは完全に設定されます。
レコードセット オブジェクト内の現在のレコードの位置を特定の数のレコードを前後に移動するには、 Move
を呼び出します。
関連情報については、DAO ヘルプの「Move メソッド」および「MoveFirst、MoveLast、MoveNext、MovePrevious メソッド」のトピックを参照してください。
CDaoRecordset::MoveNext
このメンバー関数を呼び出して、レコードセット内の次のレコードを現在のレコードにします。
void MoveNext();
解説
前のレコードに移動する前に、 IsBOF
を呼び出しておくことをお勧めします。 IsBOF
が 0 以外の値を返した場合、MovePrev
の呼び出しによってCDaoException
がスローされます。これは、最初のレコードの前に既にスクロールしたか、レコードセットによってレコードが選択されていないことを示します。
注意事項
レコードセットにレコードがない場合、 Move
関数のいずれかを呼び出すと例外がスローされます。 一般に、移動操作の前に IsBOF
と IsEOF
の両方を呼び出して、レコードセットにレコードがあるかどうかを判断します。 Open
またはRequery
を呼び出した後、IsBOF
またはIsEOF
を呼び出します。
Note
現在のレコードの更新または追加中に Move
関数のいずれかを呼び出すと、更新は警告なしで失われます。
Move
関数を使用して、条件を適用せずにレコード間を移動します。 特定の条件を満たすダイナセット タイプまたはスナップショット タイプのレコードセット オブジェクト内のレコードを検索するには、[検索]操作を使用します。 テーブル型レコードセット オブジェクト内のレコードを検索するには、 Seek
を呼び出します。
レコードセットがテーブル型のレコードセットを参照している場合、移動はテーブルの現在のインデックスに従います。 基になる DAO オブジェクトの Index プロパティを使用して、現在のインデックスを設定できます。 現在のインデックスを設定しない場合、返されるレコードの順序は未定義です。
レコードセット オブジェクト内の現在のレコードの位置を特定の数のレコードを前後に移動するには、 Move
を呼び出します。
関連情報については、DAO ヘルプの「Move メソッド」および「MoveFirst、MoveLast、MoveNext、MovePrevious メソッド」のトピックを参照してください。
CDaoRecordset::MovePrev
このメンバー関数を呼び出して、レコードセット内の前のレコードを現在のレコードにします。
void MovePrev();
解説
前のレコードに移動する前に、 IsBOF
を呼び出しておくことをお勧めします。 IsBOF
が 0 以外の値を返した場合、MovePrev
の呼び出しによってCDaoException
がスローされます。これは、最初のレコードの前に既にスクロールしたか、レコードセットによってレコードが選択されていないことを示します。
注意事項
レコードセットにレコードがない場合、 Move
関数のいずれかを呼び出すと例外がスローされます。 一般に、移動操作の前に IsBOF
と IsEOF
の両方を呼び出して、レコードセットにレコードがあるかどうかを判断します。 Open
またはRequery
を呼び出した後、IsBOF
またはIsEOF
を呼び出します。
Note
現在のレコードの更新または追加中に Move
関数のいずれかを呼び出すと、更新は警告なしで失われます。
Move
関数を使用して、条件を適用せずにレコード間を移動します。 特定の条件を満たすダイナセット タイプまたはスナップショット タイプのレコードセット オブジェクト内のレコードを検索するには、[検索]操作を使用します。 テーブル型レコードセット オブジェクト内のレコードを検索するには、 Seek
を呼び出します。
レコードセットがテーブル型のレコードセットを参照している場合、移動はテーブルの現在のインデックスに従います。 基になる DAO オブジェクトの Index プロパティを使用して、現在のインデックスを設定できます。 現在のインデックスを設定しない場合、返されるレコードの順序は未定義です。
前方スクロール スナップショットを使用して MoveFirst
または MovePrev
メンバー関数を呼び出すことはできません。
レコードセット オブジェクト内の現在のレコードの位置を特定の数のレコードを前後に移動するには、 Move
を呼び出します。
関連情報については、DAO ヘルプの「Move メソッド」および「MoveFirst、MoveLast、MoveNext、MovePrevious メソッド」のトピックを参照してください。
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
双方向スクロールを使用するダイナセットタイプのレコードセット。 これが既定です。dbOpenTable
双方向スクロールを含むテーブル型のレコードセット。dbOpenSnapshot
双方向スクロールを使用するスナップショットタイプのレコードセット。
lpszSQL
次のいずれかを含む文字列ポインター:
NULL ポインター。
1 つ以上の tabledef や querydef の名前 (コンマ区切り)。
SQL SELECT ステートメント (必要に応じて、SQL WHERE または ORDERBY 句を使用)。
パススルー クエリ。
nOptions
以下に示すオプションの 1 つ以上。 既定値は0です。 使用できる値は次のとおりです。
dbAppendOnly
新しいレコードのみを追加できます (ダイナセットタイプのレコードセットのみ)。 このオプションは、文字どおり、レコードを追加することしかできないことを意味します。 MFC ODBC データベース クラスには、レコードの取得と追加を許可する追加専用オプションがあります。dbForwardOnly
レコードセットは前方スクロール のみのスナップショットです。dbSeeChanges
編集中のデータを別のユーザーが変更している場合は、例外を生成します。dbDenyWrite
他のユーザーはレコードを変更または追加できません。dbDenyRead
他のユーザーはレコードを表示できません (テーブル型レコードセットのみ)。dbReadOnly
レコードのみを表示できます。他のユーザーが変更できます。dbInconsistent
一貫性のない更新が許可されます (ダイナセットタイプのレコードセットのみ)。dbConsistent
一貫性のある更新のみが許可されます (ダイナセットタイプのレコードセットのみ)。
Note
定数 dbConsistent
と dbInconsistent
は相互に排他的です。 Open
の特定のインスタンスでは、いずれか一方または両方を使用できますが、両方を使用することはできません。
pTableDef
CDaoTableDef オブジェクトへのポインター。 このバージョンは、テーブル型レコードセットに対してのみ有効です。 このオプションを使用する場合、CDaoRecordset
の構築に使用されるCDaoDatabase
ポインターは使用されません。代わりに、tabledef が存在するデータベースが使用されます。
pQueryDef
CDaoQueryDef オブジェクトへのポインター。 このバージョンは、ダイナセットタイプおよびスナップショットタイプのレコードセットに対してのみ有効です。 このオプションを使用する場合、CDaoRecordset
の構築に使用されるCDaoDatabase
ポインターは使用されません。代わりに、querydef が存在するデータベースが使用されます。
解説
Open
を呼び出す前に、レコードセット オブジェクトを構築する必要があります。 これにはいくつかの方法があります。
レコードセット オブジェクトを構築するときに、既に開いている
CDaoDatabase
オブジェクトへのポインターを渡します。レコードセット オブジェクトを構築するときに、開いていない
CDaoDatabase
オブジェクトへのポインターを渡します。 レコードセットはCDaoDatabase
オブジェクトを開きますが、レコードセット オブジェクトが閉じると閉じません。レコードセット オブジェクトを構築するときに、NULL ポインターを渡します。 レコードセット オブジェクトは、
GetDefaultDBName
を呼び出して、Microsoft Access の名前を取得します。開くMDBファイル。 その後、レコードセットはCDaoDatabase
オブジェクトを開き、レコードセットが開いている限り開いたままにします。 レコードセットでClose
を呼び出すと、CDaoDatabase
オブジェクトも閉じられます。Note
レコードセットは、
CDaoDatabase
オブジェクトを開くと、非決定的なアクセス権を持つデータ ソースを開きます。
lpszSQL パラメーターを使用するOpen
のバージョンでは、レコードセットが開いたら、いくつかの方法のいずれかでレコードを取得できます。 1 つ目のオプションは、 DoFieldExchange
に DFX 関数を含める方法です。 2 番目のオプションは、 GetFieldValue
メンバー関数を呼び出して動的バインディングを使用することです。 これらのオプションは、個別に、または組み合わせて実装できます。 これらを組み合わせる場合は、 Open
の呼び出しについて SQL ステートメントを自分で渡す必要があります。
CDaoTableDef
オブジェクトを渡す 2 番目のバージョンのOpen
を使用すると、結果の列をDoFieldExchange
および DFX メカニズムを介してバインドしたり、GetFieldValue
を介して動的にバインドしたりできます。
Note
テーブル型レコードセットのCDaoTableDef
オブジェクトを使用してのみOpen
を呼び出すことができます。
CDaoQueryDef
オブジェクトを渡す 3 番目のバージョンのOpen
を使用すると、そのクエリが実行され、結果の列はDoFieldExchange
と DFX メカニズムを介してバインドしたり、GetFieldValue
を介して動的にバインドしたりできます。
Note
Open
は、ダイナセットタイプおよびスナップショットタイプのレコードセットに対してCDaoQueryDef
オブジェクトを使用してのみ呼び出すことができます。
lpszSQL
パラメーターを使用するOpen
の最初のバージョンでは、次の表に示す条件に基づいてレコードが選択されます。
パラメーター lpszSQL の値。 |
レコードの選択基準 | 例 |
---|---|---|
NULL | GetDefaultSQL の返す文字列。 |
|
1 つ以上の tabledef 名または querydef 名のコンマ区切りのリスト。 | DoFieldExchange で表されるすべての列。 |
"Customer" |
SELECT column-list FROM table-list | 指定した tabledef または querydef の指定された列。 | "SELECT CustId, CustName FROM Customer" |
通常の手順では、Open
に NULL を渡します。その場合、CDaoRecordset
派生クラスの作成時に ClassWizard によって生成されるオーバーライド可能なメンバー関数であるGetDefaultSQL
を呼び出Open
。 この値は、ClassWizard で指定した tabledef や querydef の名前を示します。 代わりに、 lpszSQL パラメーターで他の情報を指定できます。
何を渡しても、 Open
はクエリの最終的な SQL 文字列を構築し (文字列に SQL WHERE および ORDERBY 句を渡した lpszSQL 文字列に追加して)、クエリを実行します。 Open
を呼び出した後でGetSQL
を呼び出すことで、構築された文字列を調べることができます。
レコードセット クラスのフィールド データ メンバーは、選択したデータの列に結び付けられています。 いくつかのレコードが返された場合、最初のレコードが現在のレコードになります。
フィルターや並べ替えなどのレコードセットのオプションを設定する場合は、レコードセット オブジェクトを構築した後、Open
を呼び出す前に、m_strSort
またはm_strFilter
を設定します。 レコードセットが既に開いている後にレコードセット内のレコードを更新する場合は、 Requery
を呼び出します。
ダイナセットタイプまたはスナップショットタイプのレコードセットに対して Open
を呼び出す場合、またはデータ ソースがアタッチされたテーブルを表す SQL ステートメントまたは tabledef を参照している場合、型引数に dbOpenTable
を使用することはできません。その場合、MFC は例外をスローします。 tabledef オブジェクトがアタッチされたテーブルを表しているかどうかを判断するには、 CDaoTableDef オブジェクトを作成し、その GetConnect メンバー関数を呼び出します。
同じレコードを編集または削除するときに、コンピューター上の別のユーザーまたは別のプログラムによって行われた変更をトラップする場合は、 dbSeeChanges
フラグを使用します。 たとえば、2 人のユーザーが同じレコードの編集を開始した場合、 Update
メンバー関数を呼び出す最初のユーザーは成功します。 2 番目のユーザーによって Update
が呼び出されると、 CDaoException
がスローされます。 同様に、2 番目のユーザーが Delete
を呼び出してレコードを削除しようとして、最初のユーザーによって既に変更されている場合は、 CDaoException
が発生します。
通常、更新中にユーザーがこの CDaoException
を取得した場合、コードはフィールドの内容を更新し、新しく変更された値を取得する必要があります。 削除中に例外が発生した場合、コードで新しいレコード データがユーザーに表示され、データが最近変更されたことを示すメッセージが表示される可能性があります。 この時点で、コードは、ユーザーがまだレコードを削除することを望んでいるという確認を要求できます。
ヒント
前方スクロール オプション (dbForwardOnly
) を使用して、アプリケーションが ODBC データ ソースから開かれたレコードセットを 1 回通過する場合のパフォーマンスを向上させます。
関連情報については、DAO ヘルプの「OpenRecordset メソッド」を参照してください。
CDaoRecordset::Requery
レコードセットを再構築 (更新) するには、このメンバー関数を呼び出します。
virtual void Requery();
解説
いくつかのレコードが返された場合、最初のレコードが現在のレコードになります。
自分または他のユーザーがデータ ソースに対して行っている追加と削除をレコードセットに反映させるには、 Requery
を呼び出してレコードセットを再構築する必要があります。 レコードセットがダイナセットの場合、自分または他のユーザーが既存のレコードに対して行った更新が自動的に反映されます (ただし、追加は反映されません)。 レコードセットがスナップショットの場合は、他のユーザーによる編集と追加と削除を反映するために、 Requery
を呼び出す必要があります。
ダイナセットまたはスナップショットの場合は、パラメーター値を使用してレコードセットを再構築するときに Requery
を呼び出します。 新しいフィルターを設定するか、Requery
を呼び出す前にm_strFilter
とm_strSort
を設定して並べ替えます。 Requery
を呼び出す前に、パラメーター データ メンバーに新しい値を割り当てることで、新しいパラメーターを設定します。
レコードセットの再構築が失敗した場合、レコードセットは閉じられます。 Requery
を呼び出す前に、CanRestart
メンバー関数を呼び出してレコードセットを再クエリできるかどうかを判断できます。 CanRestart
は、 Requery
が成功することを保証しません。
注意事項
Open
を呼び出した後でのみ、Requery
を呼び出します。
Note
Requery
を呼び出すと、DAO ブックマークが変更されます。
CanRestart
を呼び出すと 0 が返される場合、ダイナセットタイプまたはスナップショットタイプのレコードセットでRequery
を呼び出すことはできません。また、テーブルタイプのレコードセットで使用することもできません。
Requery
を呼び出した後、IsBOF
とIsEOF
の両方が 0 以外の値を返す場合、クエリはレコードを返さなかったため、レコードセットにデータは含まれません。
関連情報については、DAO ヘルプの「Requery メソッド」を参照してください。
CDaoRecordset::Seek
このメンバー関数を呼び出して、現在のインデックスの指定された条件を満たすインデックス付きテーブル型レコードセット オブジェクト内のレコードを検索し、そのレコードを現在のレコードにします。
BOOL Seek(
LPCTSTR lpszComparison,
COleVariant* pKey1,
COleVariant* pKey2 = NULL,
COleVariant* pKey3 = NULL);
BOOL Seek(
LPCTSTR lpszComparison,
COleVariant* pKeyArray,
WORD nKeys);
パラメーター
lpszComparison
"<"、"<="、"="、">="、または ">" のいずれかの文字列式。
pKey1
インデックスの最初のフィールドに対応する値を持つ COleVariant へのポインター。 必須。
pKey2
インデックス内の 2 番目のフィールド (存在する場合) に対応する値を持つ COleVariant
へのポインター。 既定値は NULL です。
pKey3
インデックス内の 3 番目のフィールド (存在する場合) に対応する値を持つ COleVariant
へのポインター。 既定値は NULL です。
pKeyArray
バリアントの配列へのポインター。 配列サイズは、インデックス内のフィールドの数に対応します。
nKeys
配列のサイズに対応する整数。インデックス内のフィールドの数です。
Note
キーにワイルドカードを指定しません。 ワイルドカードを使用すると、 Seek
は一致するレコードを返しません。
戻り値
一致するレコードが見つかった場合は 0 以外、それ以外の場合は 0。
解説
4 つ以上のフィールドのインデックスを処理するには、 Seek
の 2 番目の (配列) バージョンを使用します。
Seek
では、テーブル型のレコードセットに対する高パフォーマンスのインデックス検索が可能になります。 Seek
を呼び出す前に、SetCurrentIndex
を呼び出して現在のインデックスを設定する必要があります。 インデックスが一意でないキー フィールドを識別する場合、 Seek
は条件を満たす最初のレコードを検索します。 インデックスを設定しない場合は、例外がスローされます。
UNICODE レコードセットを作成しない場合は、 COleVariant
オブジェクトを明示的に ANSI として宣言する必要があります。 これを行うには、COleVariant::COleVariant( lpszSrc , vtSrc ))形式のコンストラクターvtSrcを使用します。 VT_BSTRT
(ANSI)、または vtSrc VT_BSTRT
に設定されたCOleVariant
関数 SetString( lpszSrc , vtSrc )を使用します。
Seek
を呼び出すときは、1 つ以上のキー値と比較演算子 ("<"、"<="、"="、">="、または ">") を渡します。 Seek
は、指定したキー フィールドを検索し、 lpszComparison および pKey1 で指定された条件を満たす最初のレコードを検索します。 見つかったら、 Seek
は 0 以外の値を返し、そのレコードを最新の状態にします。 一致 Seek
見つからない場合、 Seek
は 0 を返し、現在のレコードは未定義です。 DAO を直接使用する場合は、NoMatch プロパティを明示的に確認する必要があります。
lpszComparison
が "="、">="、または ">" の場合、Seek
インデックスの先頭から開始されます。 lpszComparisonが "<" または "<=" の場合、Seek
はインデックスの末尾から始まり、末尾に重複するインデックス エントリがない限り後方に検索されます。 この場合、 Seek
は、インデックスの末尾にある重複するインデックス エントリの中から任意のエントリから始まります。
Seek
を使用するときに、現在のレコードである必要はありません。
特定の条件を満たすダイナセットタイプまたはスナップショットタイプのレコードセット内のレコードを検索するには、検索操作を使用します。 特定の条件を満たすレコードだけでなく、すべてのレコードを含めるには、移動操作を使用してレコード間を移動します。
アタッチテーブルはダイナセットタイプまたはスナップショットタイプのレコードセットとして開く必要があるため、どのタイプのアタッチテーブルでも Seek
を呼び出すことはできません。 ただし、 CDaoDatabase::Open
を呼び出してインストール可能な ISAM データベースを直接開くと、パフォーマンスが低下する可能性がありますが、そのデータベース内のテーブルに対して Seek
を呼び出すことができます。
関連情報については、DAO ヘルプのトピック「Seek メソッド」を参照してください。
CDaoRecordset::SetAbsolutePosition
レコードセット オブジェクトの現在のレコードの相対レコード番号を設定します。
void SetAbsolutePosition(long lPosition);
パラメーター
lPosition
レコードセット内の現在のレコードの序数位置に対応します。
解説
SetAbsolutePosition
を呼び出すと、ダイナセットタイプまたはスナップショットタイプのレコードセット内の序数位置に基づいて、現在のレコードポインターを特定のレコードに配置できます。 現在のレコード番号は、 GetAbsolutePosition を呼び出して確認することもできます。
Note
このメンバー関数は、ダイナセットタイプおよびスナップショットタイプのレコードセットに対してのみ有効です。
基になる DAO オブジェクトの AbsolutePosition プロパティ値は 0 から始まります。0 に設定すると、レコードセットの最初のレコードが参照されます。 設定されたレコードの数より大きい値を設定すると、MFC によって例外がスローされます。 GetRecordCount
メンバー関数を呼び出すことによって、レコードセットに設定されたレコードの数を確認できます。
現在のレコードが削除されると、AbsolutePosition プロパティの値は定義されず、MFC は参照されている場合に例外をスローします。 新しいレコードがシーケンスの末尾に追加されます。
Note
このプロパティは、サロゲート レコード番号として使用するためのものではありません。 ブックマークは引き続き、特定の位置を保持して戻す推奨される方法であり、ブックマークをサポートするすべての種類のレコードセット オブジェクトに現在のレコードを配置する唯一の方法です。 特に、特定のレコードの位置は、そのレコードの前にあるレコードが削除されるときに変更されます。 また、レコードセット内の個々のレコードの順序は、 ORDERBY 句を使用して SQL ステートメントで作成されない限り保証されないため、レコードセットが再作成された場合、特定のレコードが同じ絶対位置を持つことも保証されません。
関連情報については、DAO ヘルプの「AbsolutePosition プロパティ」を参照してください。
CDaoRecordset::SetBookmark
このメンバー関数を呼び出して、指定したブックマークを含むレコードにレコードセットを配置します。
void SetBookmark(COleVariant varBookmark);
パラメーター
varBookmark
特定のレコードのブックマーク値を格納している COleVariant オブジェクト。
解説
レコードセット オブジェクトが作成または開かれると、その各レコードには一意のブックマークが既に存在します。 現在のレコードのブックマークを取得するには、 GetBookmark
を呼び出し、値を COleVariant
オブジェクトに保存します。 保存されたブックマーク値を使用して SetBookmark
を呼び出すことで、後でそのレコードに戻ることができます。
Note
Requery を呼び出すと、DAO ブックマークが変更されます。
UNICODE レコードセットを作成しない場合は、 COleVariant
オブジェクトを明示的に ANSI として宣言する必要があります。 これを行うには、COleVariant::COleVariant( lpszSrc , vtSrc ))形式のコンストラクターvtSrcを使用します。 VT_BSTRT
(ANSI)、または vtSrc VT_BSTRT
に設定されたCOleVariant
関数 SetString( lpszSrc , vtSrc )を使用します。
関連情報については、DAO ヘルプの「Bookmark プロパティ」および「Bookmarkable プロパティ」のトピックを参照してください。
CDaoRecordset::SetCacheSize
このメンバー関数を呼び出して、キャッシュするレコードの数を設定します。
void SetCacheSize(long lSize);
パラメーター
lSize
レコードの数を指定します。 一般的な値は 100 です。 0 に設定すると、キャッシュがオフになります。 この設定は、5 から 1,200 レコードの間である必要があります。 キャッシュで大量のメモリが使用される場合があります。
解説
キャッシュは、アプリケーションの実行中にデータが再度要求された場合に、サーバーから最近取得されたデータを保持するローカル メモリ内の領域です。 データ キャッシュにより、ダイナセット タイプのレコードセット オブジェクトを介してリモート サーバーからデータを取得するアプリケーションのパフォーマンスが向上します。 データが要求されると、Microsoft Jet データベース エンジンは、要求されたデータをサーバーから取得するのではなく、最初にキャッシュをチェックします。これには時間がかかります。 ODBC データ ソースから取得されていないデータはキャッシュに保存されません。
接続されたテーブルなどの ODBC データ ソースには、ローカル キャッシュを使用できます。 キャッシュを作成するには、リモート データ ソースからレコードセット オブジェクトを開き、 SetCacheSize
と SetCacheStart
メンバー関数を呼び出してから、 FillCache
メンバー関数を呼び出すか、Move 操作のいずれかを使用してレコードをステップ実行します。 SetCacheSize
メンバー関数の lSize パラメーターは、アプリケーションが一度に操作できるレコードの数に基づいて指定できます。 たとえば、画面に表示するデータのソースとしてレコードセットを使用している場合は、 SetCacheSize
lSize パラメーターを 20 として渡して、一度に 20 個のレコードを表示できます。
関連情報については、DAO ヘルプの「CacheSize、CacheStart プロパティ」のトピックを参照してください。
CDaoRecordset::SetCacheStart
このメンバー関数を呼び出して、キャッシュするレコードセットの最初のレコードのブックマークを指定します。
void SetCacheStart(COleVariant varBookmark);
パラメーター
varBookmark
キャッシュするレコードセットの最初のレコードのブックマークを指定する COleVariant 。
解説
SetCacheStart
メンバー関数の varBookmark パラメーターには、任意のレコードのブックマーク値を使用できます。 現在のレコードでキャッシュを開始するレコードを作成し、 SetBookmark を使用してそのレコードのブックマークを確立し、ブックマーク値を SetCacheStart
メンバー関数のパラメーターとして渡します。
Microsoft Jet データベース エンジンは、キャッシュ範囲内のレコードをキャッシュから要求し、サーバーからキャッシュ範囲外のレコードを要求します。
キャッシュから取得されたレコードには、他のユーザーによってソース データに同時に行われた変更は反映されません。
キャッシュされたすべてのデータを強制的に更新するには、SetCacheSize
の lSize パラメーターを 0 として渡し、最初に要求したキャッシュのサイズでSetCacheSize
をもう一度呼び出してから、FillCache
メンバー関数を呼び出します。
UNICODE レコードセットを作成しない場合は、 COleVariant
オブジェクトを明示的に ANSI として宣言する必要があります。 これを行うには、COleVariant::COleVariant( lpszSrc , vtSrc ))形式のコンストラクターvtSrcを使用します。 VT_BSTRT
(ANSI)、または vtSrc VT_BSTRT
に設定されたCOleVariant
関数 SetString( lpszSrc , vtSrc )を使用します。
関連情報については、DAO ヘルプの「CacheSize、CacheStart プロパティ」を参照してください。
CDaoRecordset::SetCurrentIndex
テーブル型レコードセットにインデックスを設定するには、このメンバー関数を呼び出します。
void SetCurrentIndex(LPCTSTR lpszIndex);
パラメーター
lpszIndex
設定するインデックスの名前を含むポインター。
解説
ベース テーブル内のレコードは、特定の順序で格納されません。 インデックスを設定すると、データベースから返されるレコードの順序が変更されますが、レコードが格納される順序には影響しません。 指定したインデックスは既に定義されている必要があります。 存在しないインデックス オブジェクトを使用しようとした場合、または Seek を呼び出すときにインデックスが設定されていない場合、MFC は例外をスローします。
CDaoTableDef::CreateIndex を呼び出し、基になる tabledef の Indexes コレクションに新しいインデックスを追加するには、CDaoTableDef::Append を呼び出してから、レコードセットを再度開きます。
テーブル型レコードセットから返されるレコードは、基になる tabledef に対して定義されたインデックスによってのみ並べ替えることができます。 他の順序でレコードを並べ替えるには、CDaoRecordset::m_strSort に格納されている SQL ORDERBY 句を使用して、ダイナセットタイプまたはスナップショットタイプのレコードセットを開くことができます。
関連情報については、DAO ヘルプの「Index オブジェクト」および「現在のインデックス」の定義を参照してください。
CDaoRecordset::SetFieldDirty
レコードセットのフィールド データ メンバーに変更または変更されていないフラグを設定するには、このメンバー関数を呼び出します。
void SetFieldDirty(
void* pv,
BOOL bDirty = TRUE);
パラメーター
pv
レコードセットまたは NULL のフィールド データ メンバーのアドレスを格納します。 NULL の場合、レコードセット内のすべてのフィールド データ メンバーにフラグが設定されます。 (C++ NULL は、データベース用語の Null と同じではありません。つまり、"値がありません")。
bDirty
フィールド データ メンバーに "ダーティ" (変更) のフラグを設定する場合は TRUE。 それ以外の場合、フィールド データ メンバーに "clean" (変更なし) のフラグが設定される場合は FALSE。
解説
フィールドを変更せずにマークすると、フィールドが更新されません。
フレームワークは、変更されたフィールド データ メンバーが DAO レコード フィールド交換 (DFX) メカニズムによってデータ ソース上のレコードに確実に書き込まれるようにマークします。 フィールドの値を変更すると、通常、フィールドは自動的にダーティに設定されるため、自分で SetFieldDirty
を呼び出す必要はほとんどありませんが、フィールド データ メンバー内の値に関係なく、列が明示的に更新または挿入されるようにすることが必要な場合があります。 DFX メカニズムでは、PSEUDONULL の使用も採用されています。 詳細については、「 CDaoFieldExchange::m_nOperation」を参照してください。
ダブル バッファリング メカニズムが使用されていない場合、フィールドの値を変更しても、フィールドはダーティとして自動的に設定されません。 この場合、フィールドをダーティとして明示的に設定する必要があります。 m_bCheckCacheForDirtyFieldsに含まれるフラグは、この自動フィールド チェックを制御します。
関数の最初の引数に NULL を使用すると、CDaoFieldExchange
内の param フィールドではなく、すべてのoutputColumn
フィールドに関数が適用されます。 たとえば、呼び出し
SetFieldDirty(NULL);
は、 outputColumn
フィールドのみを NULL に設定します。 param フィールドは影響を受けません。
paramで作業するには、次のように、作業する個々のparamの実際のアドレスを指定する必要があります。
SetFieldDirty(&m_strParam);
つまり、outputColumn
フィールドと同様に、すべての param フィールドを NULL に設定することはできません。
SetFieldDirty
は、 DoFieldExchange
によって実装されます。
CDaoRecordset::SetFieldNull
このメンバー関数を呼び出して、レコードセットのフィールド データ メンバーに Null (具体的には値を持たない) または Null 以外の値としてフラグを設定します。
void SetFieldNull(
void* pv,
BOOL bNull = TRUE);
パラメーター
pv
レコードセットまたは NULL のフィールド データ メンバーのアドレスを格納します。 NULL の場合、レコードセット内のすべてのフィールド データ メンバーにフラグが設定されます。 (C++ NULL は、データベース用語の Null と同じではありません。つまり、"値がありません")。
bNull
フィールド データ メンバーに値なし (Null) のフラグを設定する場合は 0 以外。 フィールド データ メンバーに Null 以外のフラグを設定する場合は、それ以外の場合は 0。
解説
SetFieldNull
は、 DoFieldExchange
メカニズムでバインドされたフィールドに使用されます。
レコードセットに新しいレコードを追加すると、すべてのフィールド データ メンバーが最初に Null 値に設定され、"ダーティ" (変更済み) としてフラグが設定されます。 データ ソースからレコードを取得する場合、その列には既に値が含まれるか、Null になります。 フィールドを Null にするのが適切でない場合は、 CDaoException がスローされます。
たとえば、ダブル バッファリング メカニズムを使用している場合、現在のレコードのフィールドに値を指定しない場合は、bNull TRUE に設定されたSetFieldNull
を呼び出して Null としてフラグを設定します。 フィールドが以前に Null とマークされていて、値を指定する場合は、その新しい値を設定します。 SetFieldNull
で Null フラグを削除する必要はありません。 フィールドを Null にできるかどうかを判断するには、 IsFieldNullable を呼び出します。
ダブル バッファリング メカニズムを使用していない場合、フィールドの値を変更しても、フィールドはダーティおよび Null 以外として自動的に設定されません。 ダーティ フィールドと Null 以外のフィールドを具体的に設定する必要があります。 m_bCheckCacheForDirtyFieldsに含まれるフラグは、この自動フィールド チェックを制御します。
DFX メカニズムでは、PSEUDONULL を使用します。 詳細については、「 CDaoFieldExchange::m_nOperation」を参照してください。
関数の最初の引数に NULL を使用すると、CDaoFieldExchange
内の param フィールドではなく、outputColumn
フィールドにのみ関数が適用されます。 たとえば、呼び出し
SetFieldNull(NULL);
は、 outputColumn
フィールドのみを NULL に設定します。 param フィールドは影響を受けません。
CDaoRecordset::SetFieldValue
このメンバー関数を呼び出して、序数位置または文字列の値を変更することによって、フィールドの値を設定します。
virtual void SetFieldValue(
LPCTSTR lpszName,
const COleVariant& varValue);
virtual void SetFieldValue(
int nIndex,
const COleVariant& varValue);
void SetFieldValue(
LPCTSTR lpszName,
LPCTSTR lpszValue);
void SetFieldValue(
int nIndex,
LPCTSTR lpszValue);
パラメーター
lpszName
フィールドの名前を含む文字列へのポインター。
varValue
フィールドの内容の値を含む COleVariant オブジェクトへの参照。
nIndex
レコードセットの Fields コレクション内のフィールドの序数位置を表す整数 (0 から始まる)。
lpszValue
フィールドの内容の値を含む文字列へのポインター。
解説
SetFieldValue
と GetFieldValue を使用して、DoFieldExchange メカニズムを使用して列を静的にバインドするのではなく、実行時にフィールドを動的にバインドします。
UNICODE レコードセットを作成しない場合は、COleVariant
パラメーターを含まない形式のSetFieldValue
を使用するか、COleVariant
オブジェクトを明示的に ANSI で宣言する必要があります。 これを行うには、COleVariant::COleVariant( lpszSrc , vtSrc ))形式のコンストラクターvtSrcを使用します。 VT_BSTRT
(ANSI)、または vtSrc VT_BSTRT
に設定されたCOleVariant
関数 SetString( lpszSrc , vtSrc )を使用します。
関連情報については、DAO ヘルプの「フィールド オブジェクト」および「値プロパティ」のトピックを参照してください。
CDaoRecordset::SetFieldValueNull
このメンバー関数を呼び出して、フィールドを Null 値に設定します。
void SetFieldValueNull(int nIndex);
void SetFieldValueNull(LPCTSTR lpszName);
パラメーター
nIndex
レコードセット内のフィールドのインデックス。0 から始まるインデックスによる参照用です。
lpszName
名前で検索するレコードセット内のフィールドの名前。
解説
C++ NULL は Null と同じではありません。データベースの用語では、"値を持たない" ことを意味します。
関連情報については、DAO ヘルプの「フィールド オブジェクト」および「値プロパティ」のトピックを参照してください。
CDaoRecordset::SetLockingMode
レコードセットのロックの種類を設定するには、このメンバー関数を呼び出します。
void SetLockingMode(BOOL bPessimistic);
パラメーター
bPessimistic
ロックの種類を示すフラグ。
解説
ペシミスティック ロックが有効な場合、編集中のレコードを含む 2K ページは、 Edit
メンバー関数を呼び出すとすぐにロックされます。 Update
またはClose
メンバー関数、または Move 操作または Find 操作を呼び出すと、ページのロックが解除されます。
オプティミスティック ロックが有効な場合、レコードを含む 2K ページは、レコードが Update
メンバー関数で更新されている間のみロックされます。
ページがロックされている場合、他のユーザーは同じページのレコードを編集できません。 SetLockingMode
を呼び出して 0 以外の値を渡し、別のユーザーが既にページをロックしている場合、Edit
を呼び出すと例外がスローされます。 他のユーザーは、ロックされたページからデータを読み取ることができます。
ページが別のユーザーによってロックされている間に、 SetLockingMode
を 0 の値で呼び出し、後で Update
を呼び出すと、例外が発生します。 別のユーザーによってレコードに加えられた変更を確認するには (変更を失う)、現在のレコードのブックマーク値を使用して SetBookmark
メンバー関数を呼び出します。
ODBC データ ソースを使用する場合、ロック モードは常にオプティミスティックです。
CDaoRecordset::SetParamValue
実行時にレコードセット内のパラメーターの値を設定するには、このメンバー関数を呼び出します。
virtual void SetParamValue(
int nIndex,
const COleVariant& varValue);
virtual void SetParamValue(
LPCTSTR lpszName,
const COleVariant& varValue);
パラメーター
nIndex
querydef の Parameters コレクション内のパラメーターの数値位置。
var
設定する値。「解説」を参照してください。
lpszName
値を設定するパラメーターの名前。
解説
パラメーターは、レコードセットの SQL 文字列の一部として既に確立されている必要があります。 パラメーターには、名前またはコレクション内のインデックス位置を使用してアクセスできます。
COleVariant
オブジェクトとして設定する値を指定します。 COleVariant
オブジェクトで目的の値と型を設定する方法については、クラス COleVariant を参照してください。 UNICODE レコードセットを作成しない場合は、 COleVariant
オブジェクトを明示的に ANSI として宣言する必要があります。 これを行うには、COleVariant::COleVariant( lpszSrc , vtSrc ))形式のコンストラクターvtSrcを使用します。 VT_BSTRT
(ANSI)、または vtSrc VT_BSTRT
に設定されたCOleVariant
関数 SetString( lpszSrc , vtSrc )を使用します。
CDaoRecordset::SetParamValueNull
パラメーターを Null 値に設定するには、このメンバー関数を呼び出します。
void SetParamValueNull(int nIndex);
void SetParamValueNull(LPCTSTR lpszName);
パラメーター
nIndex
レコードセット内のフィールドのインデックス。0 から始まるインデックスによる参照用です。
lpszName
名前で検索するレコードセット内のフィールドの名前。
解説
C++ NULL は Null と同じではありません。データベースの用語では、"値を持たない" ことを意味します。
CDaoRecordset::SetPercentPosition
レコードセット内のレコードの割合に基づいて、レコードセット オブジェクト内の現在のレコードのおおよその位置を変更する値を設定するには、このメンバー関数を呼び出します。
void SetPercentPosition(float fPosition);
パラメーター
fPosition
0 から 100 の範囲の数。
解説
ダイナセットタイプまたはスナップショットタイプのレコードセットを操作する場合は、最初に最後のレコードに移動してレコードセットを設定してから、 SetPercentPosition
を呼び出します。 レコードセットを完全に設定する前に SetPercentPosition
を呼び出した場合、移動の量は、 GetRecordCount の値によって示されるアクセスされたレコードの数に対して相対的です。 最後のレコードに移動するには、 MoveLast
を呼び出します。
SetPercentPosition
を呼び出すと、その値に対応するおおよその位置にあるレコードが現在の位置になります。
Note
レコードセット内の特定のレコードに現在のレコードを移動する SetPercentPosition
を呼び出すことはお勧めしません。 代わりに、 SetBookmark メンバー関数を呼び出します。
関連情報については、DAO ヘルプの「PercentPosition プロパティ」を参照してください。
CDaoRecordset::Update
AddNew
またはメンバー関数の呼び出し後に、このメンバー関数Edit
呼び出します。
virtual void Update();
解説
この呼び出しは、 AddNew
または Edit
操作を完了するために必要です。
AddNew
とEdit
の両方で、追加または編集されたデータをデータ ソースに保存するために配置する編集バッファーを準備します。 Update
はデータを保存します。 変更済みとしてマークまたは検出されたフィールドのみが更新されます。
データ ソースがトランザクションをサポートしている場合は、トランザクションの Update
呼び出し (およびその対応する AddNew
または Edit
呼び出し) を行うことができます。
注意事項
AddNew
またはEdit
を最初に呼び出さずにUpdate
を呼び出すと、Update
はCDaoException
をスローします。 AddNew
またはEdit
を呼び出す場合は、MoveNext を呼び出す前にUpdate
を呼び出すかレコードセットまたはデータ ソース接続を閉じる必要があります。 それ以外の場合、変更は通知なしで失われます。
レコードセット オブジェクトがマルチユーザー環境で悲観的にロックされている場合、レコードは更新が完了するまで Edit
使用された時点からロックされたままになります。 レコードセットが楽観的にロックされている場合、レコードはロックされ、データベースで更新される直前に事前に編集されたレコードと比較されます。 Edit
を呼び出してからレコードが変更された場合、Update
操作は失敗し、MFC は例外をスローします。 ロック モードは、 SetLockingMode
で変更できます。
Note
オプティミスティック ロックは、ODBC やインストール可能な ISAM などの外部データベース形式で常に使用されます。
関連情報については、DAO ヘルプの「AddNew メソッド」、「CancelUpdate メソッド」、「Delete メソッド」、「LastModified プロパティ」、「Update メソッド」、「EditMode プロパティ」の各トピックを参照してください。
関連項目
CObject クラス
階層図
CDaoTableDef クラス
CDaoWorkspace クラス
CDaoDatabase クラス
CDaoQueryDef クラス