CDaoRecordset クラス
データ ソースから選択された 1 組のレコードセットを表現します。
構文
class CDaoRecordset : public CObject
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CDaoRecordset::CDaoRecordset | CDaoRecordset オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CDaoRecordset::AddNew | 新しいレコードを追加する準備をします。 Update を呼び出して追加を完了します。 |
CDaoRecordset::CanAppend | AddNew メンバー関数を使用してレコードセットに新しいレコードを追加できる場合は、0 以外の値を返します。 |
CDaoRecordset::CanBookmark | レコードセットがブックマークをサポートしている場合は、0 以外の値を返します。 |
CDaoRecordset::CancelUpdate | 編集操作または 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 | インデックス付きの CString テーブル型で最近使用されたインデックスの名前を含む値を返します CDaoRecordset 。 |
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
派生クラスのタイプ セーフな C++ メンバーを使用したレコード フィールドの読み取りと更新をCDaoRecordset
サポートします。 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 クラスを参照してください。 呼び出す前に CDaoWorkspace::BeginTrans を呼び出すAddNew
必要があることに注意してください。
Open メンバー関数が呼び出されていないレコードセットの呼び出AddNew
しは無効です。 追加できないレコードセットを呼び出AddNew
すと、A CDaoException
がスローされます。 CanAppend を呼び出すことで、レコードセットが更新可能かどうかを判断できます。
フレームワークは、変更されたフィールド データ メンバーが DAO レコード フィールド交換 (DFX) メカニズムによってデータ ソースのレコードに確実に書き込まれるようにマークします。 通常、フィールドの値を変更すると、フィールドダーティが自動的に設定されるため、SetFieldDirty を自分で呼び出す必要はほとんどありませんが、フィールド データ メンバー内の値に関係なく、列が明示的に更新または挿入されるようにしたい場合があります。 DFX メカニズムでは、P Standard Edition UDO 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();
解説
たとえば、アプリケーションが Or AddNew
メンバー関数をEdit
呼び出し、Update を呼び出していない場合は、CancelUpdate
呼び出された後またはAddNew
呼び出された変更Edit
を取り消します。
Note
レコードがダブル バッファリングされている場合 (つまり、フィールドの自動チェックが有効になっている場合)、呼び出しCancelUpdate
はメンバー変数を以前AddNew
またはEdit
呼び出された値に復元します。
保留中またはAddNew
操作がないEdit
場合は、 CancelUpdate
MFC によって例外がスローされます。 GetEditMode メンバー関数を呼び出して、取り消すことができる保留中の操作があるかどうかを判断します。
関連情報については、DAO ヘルプのトピック「CancelUpdate メソッド」を参照してください。
CDaoRecordset::CanRestart
このメンバー関数を呼び出して、レコードセットがメンバー関数を呼び出 Requery
すことによってクエリの再起動 (レコードの更新) を許可するかどうかを判断します。
BOOL CanRestart();
戻り値
レコードセットのクエリを再度実行するために呼び出すことができる場合 Requery
は 0 以外、それ以外の場合は 0。
解説
テーブル型レコードセットはサポート Requery
されていません。
サポートされていない場合Requery
は、[閉じる] を呼び出し、[開く] を呼び出してデータを更新します。 パラメーター値が変更された後で、レコードセット オブジェクトの基になるパラメーター クエリを更新するために呼び出 Requery
すことができます。
関連情報については、DAO ヘルプの「Restartable プロパティ」を参照してください。
CDaoRecordset::CanScroll
このメンバー関数を呼び出して、レコードセットがスクロールを許可するかどうかを判断します。
BOOL CanScroll() const;
戻り値
レコードをスクロールできる場合は 0 以外、それ以外の場合は 0。
解説
Open with をdbForwardOnly
呼び出すと、レコードセットは前方にのみスクロールできます。
関連情報については、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
。
オブジェクトを自動的に構築して接続するには、 CDaoDatabase
NULL をレコードセット コンストラクターに渡します。 これは便利なショートカットであり、レコードセットを作成する前にオブジェクトを CDaoDatabase
構築して接続する必要はありません。 オブジェクトが CDaoDatabase
開かない場合は、既定の ワークスペースを使用する CDaoWorkspace オブジェクトも自動的に作成されます。 詳細については、「CDaoDatabase::CDaoDatabase」を参照してください。
CDaoRecordset::Close
オブジェクトを CDaoRecordset
閉じると、関連付けられているデータベース内の開いているレコードセットのコレクションからオブジェクトが削除されます。
virtual void Close();
解説
Close
オブジェクトはCDaoRecordset
破棄されないため、同じデータ ソースまたは別のデータ ソースを呼び出Open
すことによって、オブジェクトを再利用できます。
保留中 のすべての AddNew ステートメントまたは Edit ステートメントが取り消され、保留中のすべてのトランザクションがロールバックされます。 保留中の追加または編集を保持する場合は、レコードセットごとに呼び出す前に Update を呼び出Close
します。
呼び出した後にもう一度呼び出Open
Close
すことができます。 これにより、レコードセット オブジェクトを再利用できます。 可能であれば、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
呼び出しの後Update
に Delete
.
関連情報については、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 のパラメーターを指定してフィールド Null をマークする呼び出し SetFieldNull
を行います。これにより、列も更新されます。 値が変更されていない場合でもフィールドをデータ ソースに書き込む場合は、TRUE のパラメーターを指定して呼び出 SetFieldDirty
します。 これは、フィールドの値が Null の場合でも機能します。
フレームワークは、変更されたフィールド データ メンバーが DAO レコード フィールド交換 (DFX) メカニズムによってデータ ソースのレコードに確実に書き込まれるようにマークします。 通常、フィールドの値を変更すると、フィールドダーティが自動的に設定されるため、SetFieldDirty を自分で呼び出す必要はほとんどありませんが、フィールド データ メンバー内の値に関係なく、列が明示的に更新または挿入されるようにしたい場合があります。 DFX メカニズムでは、P Standard Edition UDO NULL も使用されます。 詳細については、「CDaoFieldExchange::m_nOperation」を 参照してください。
ダブル バッファリング メカニズムが使用されていない場合、フィールドの値を変更しても、フィールドは自動的にダーティとして設定されません。 この場合は、フィールドダーティを明示的に設定する必要があります。 m_bCheckCacheForDirtyFieldsに含まれるフラグは、この自動フィールドのチェックを制御します。
レコードセット オブジェクトがマルチユーザー環境で悲観的にロックされている場合、その時点Edit
からロックされたレコードメインは更新が完了するまで使用されます。 レコードセットが楽観的にロックされている場合、レコードはロックされ、データベースで更新される直前に事前に編集されたレコードと比較されます。 呼び出 Edit
してからレコードが変更された場合、操作は Update
失敗し、MFC は例外をスローします。 でロックモード SetLockingMode
を変更できます。
Note
オプティミスティック ロックは、ODBC やインストール可能な ISAM などの外部データベース形式で常に使用されます。
現在のレコードは、呼び出Edit
した後メイン現在のレコードです。 呼び出すには Edit
、現在のレコードが存在する必要があります。 現在のレコードがない場合、またはレコードセットが開いているテーブルタイプまたはダイナセットタイプのレコードセットオブジェクトを参照していない場合は、例外が発生します。 呼び出すと Edit
、次の条件下で a CDaoException
がスローされます。
現在のレコードはありません。
データベースまたはレコードセットは読み取り専用です。
レコード内のフィールドは更新できません。
データベースまたはレコードセットは、別のユーザーが排他的に使用するために開かれました。
別のユーザーがレコードを含むページをロックしました。
データ ソースがトランザクションをサポートしている場合は、呼び出しを Edit
トランザクションの一部にすることができます。 呼び出す前に、レコードセットを開いた後に呼び出CDaoWorkspace::BeginTrans
Edit
す必要があることに注意してください。 また、呼び出し CDaoWorkspace::CommitTrans
は、操作を完了するための呼び出し Update
の代わりではないことに Edit
注意してください。 トランザクションの詳細については、クラス CDaoWorkspace
を参照してください。
関連情報については、DAO ヘルプのトピック「AddNew メソッド」、「メソッドの編集」、「メソッドの削除」、「メソッドの更新」、および「更新可能なプロパティ」を参照してください。
CDaoRecordset::FillCache
レコードセットから指定した数のレコードをキャッシュするには、このメンバー関数を呼び出します。
void FillCache(
long* pSize = NULL,
COleVariant* pBookmark = NULL);
パラメーター
pSize
キャッシュに格納する行数を指定します。 このパラメーターを省略した場合、値は基になる DAO オブジェクトの CacheSize プロパティ設定によって決まります。
pBookmark
ブックマークを指定する COleVariant。 キャッシュは、このブックマークによって示されるレコードから開始して塗りつぶされます。 このパラメーターを省略すると、基になる DAO オブジェクトの CacheStart プロパティによって示されるレコードからキャッシュが塗りつぶされます。
解説
キャッシュを使用すると、リモート サーバーからデータを取得またはフェッチするアプリケーションのパフォーマンスが向上します。 キャッシュとは、アプリケーションの実行中にデータが再び要求される可能性があることを前提として、サーバーから最後にフェッチされたデータを保持するローカル メモリ内の領域です。 データが要求されると、Microsoft Jet データベース エンジンは、サーバーからデータをフェッチするのではなく、最初にデータのキャッシュをチェックします。これには時間がかかります。 ODBC 以外のデータ ソースでデータ キャッシュを使用しても、データはキャッシュに保存されないため、効果はありません。
キャッシュがフェッチされる際にレコードが格納されるのを待つのではなく、メンバー関数を呼び出すことで、いつでもキャッシュを明示的に FillCache
埋めることができます。 これは、一度に 1 つではなく一度に複数のレコードをフェッチするため FillCache
、キャッシュを埋めるより高速な方法です。 たとえば、各スクリーンフルなレコードが表示されている間に、アプリケーションを呼び出 FillCache
して次のスクリーンフルレコードをフェッチすることができます。
レコードセット オブジェクトでアクセスされる ODBC データベースには、ローカル キャッシュを使用できます。 キャッシュを作成するには、リモート データ ソースからレコードセット オブジェクトを開き、レコードセットの SetCacheSize
メンバー関数を SetCacheStart
呼び出します。 lSize と lBookmark によって指定された範囲の一部または全部が範囲外の範囲が作成されたSetCacheStart
SetCacheSize
場合、この範囲外のレコードセットの部分は無視され、キャッシュに読み込まれません。 リモート データ ソースで reメイン より多くのレコードを要求した場合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
レコードの検索に使用される文字列式 (WHERE という単語のない SQL ステートメントの WHERE 句など)。 次に例を示します。
rs.Find(AFX_DAO_FIRST, _T("EmployeeID = 7"));
rs.Find(AFX_DAO_NEXT, _T("LastName = 'Jones'"));
戻り値
一致するレコードが見つかった場合は 0 以外、それ以外の場合は 0。
解説
文字列の最初、次、前、または最後のインスタンスを見つけることができます。 Find
は仮想関数であるため、オーバーライドして独自の実装を追加できます。 、、およびメンバー関数はFindFirst
メンバー関数をFind
呼び出して、すべての Find 操作の動作を制御するために使用Find
できます。FindPrev
FindNext
FindLast
テーブル型レコードセット内のレコードを検索するには、Seek メンバー関数を呼び出します。
ヒント
レコードのセットが小さいほど、より効果的 Find
になります。 一般に、特に ODBC データでは、必要なレコードだけを取得する新しいクエリを作成することをお勧めします。
関連情報については、DAO ヘルプのトピック「FindFirst、FindLast、FindNext、FindPrevious メソッド」を参照してください。
CDaoRecordset::FindFirst
このメンバー関数を呼び出して、指定した条件に一致する最初のレコードを検索します。
BOOL FindFirst(LPCTSTR lpszFilter);
パラメーター
Lpszfilter
レコードの検索に使用される文字列式 (WHERE という単語のない SQL ステートメントの WHERE 句など)。
戻り値
一致するレコードが見つかった場合は 0 以外、それ以外の場合は 0。
解説
メンバー関数は FindFirst
、レコードセットの先頭から検索を開始し、レコードセットの末尾まで検索します。
(特定の条件を満たすレコードだけでなく) すべてのレコードを検索に含める場合は、いずれかの移動操作を使用してレコード間を移動します。 テーブル型レコードセット内のレコードを検索するには、メンバー関数を Seek
呼び出します。
条件に一致するレコードが見つからない場合、現在のレコード ポインターは不確定になり FindFirst
、0 が返されます。 レコードセットに条件を満たす複数のレコードが含まれている場合は、 FindFirst
最初の出現箇所を検索し、 FindNext
次に出現するレコードを検索します。
注意事項
現在のレコードを編集する場合は、別のレコードに移動する前にメンバー関数を Update
呼び出して変更を保存してください。 更新せずに別のレコードに移動すると、変更は警告なしで失われます。
メンバー関数は Find
、次の表に示す位置と方向から検索します。
検索操作 | Begin | 検索の方向 |
---|---|---|
FindFirst |
レコードセットの先頭 | レコードセットの末尾 |
FindLast |
レコードセットの末尾 | レコードセットの先頭 |
FindNext |
現在のレコード | レコードセットの末尾 |
FindPrevious |
現在のレコード | レコードセットの先頭 |
Note
呼び出 FindLast
すと、検索を開始する前に、Microsoft Jet データベース エンジンによってレコードセットが完全に設定されます (まだ完了していない場合)。 最初の検索には、後続の検索よりも長い時間がかかる場合があります。
Find 操作の 1 つを使用することは、呼び出し MoveFirst
と MoveNext
同じではなく、条件を指定せずに最初または次のレコードを最新の状態にするだけです。 移動操作では、検索操作に従うことができます。
検索操作を使用する場合は、次の点に注意してください。
0 以外の値が返された場合
Find
、現在のレコードは定義されません。 この場合は、現在のレコード ポインターを有効なレコードに戻す必要があります。前方スクロールスナップショットタイプのレコードセットでは、検索操作を使用できません。
米国バージョンの Microsoft Jet データベース エンジンを使用していない場合でも、日付を含むフィールドを検索する場合は、米国の日付形式 (月日-年) を使用する必要があります。そうしないと、一致するレコードが見つからない可能性があります。
ODBC データベースと大きなダイナセットを操作する場合、特に大きなレコードセットを操作する場合は、検索操作の使用が遅くなる場合があります。 カスタマイズされた ORDERBY 句、 WHERE 句、パラメーター クエリ、または
CDaoQuerydef
特定のインデックス付きレコードを取得するオブジェクトで SQL クエリを使用することで、パフォーマンスを向上させることができます。
関連情報については、DAO ヘルプのトピック「FindFirst、FindLast、FindNext、FindPrevious メソッド」を参照してください。
CDaoRecordset::FindLast
このメンバー関数を呼び出して、指定した条件に一致する最後のレコードを検索します。
BOOL FindLast(LPCTSTR lpszFilter);
パラメーター
Lpszfilter
レコードの検索に使用される文字列式 (WHERE という単語のない SQL ステートメントの WHERE 句など)。
戻り値
一致するレコードが見つかった場合は 0 以外、それ以外の場合は 0。
解説
メンバー関数は FindLast
、レコードセットの末尾で検索を開始し、レコードセットの先頭に向かって後方に検索します。
(特定の条件を満たすレコードだけでなく) すべてのレコードを検索に含める場合は、いずれかの移動操作を使用してレコード間を移動します。 テーブル型レコードセット内のレコードを検索するには、メンバー関数を Seek
呼び出します。
条件に一致するレコードが見つからない場合、現在のレコード ポインターは不確定になり FindLast
、0 が返されます。 レコードセットに条件を満たす複数のレコードが含まれている場合は、 FindFirst
最初の出現箇所を検索し、 FindNext
最初の出現箇所の後に次の出現箇所を検索します。
注意事項
現在のレコードを編集する場合は、別のレコードに移動する前にメンバー関数を Update
呼び出して変更を保存してください。 更新せずに別のレコードに移動すると、変更は警告なしで失われます。
Find 操作の 1 つを使用することは、呼び出し MoveFirst
と MoveNext
同じではなく、条件を指定せずに最初または次のレコードを最新の状態にするだけです。 移動操作では、検索操作に従うことができます。
検索操作を使用する場合は、次の点に注意してください。
0 以外の値が返された場合
Find
、現在のレコードは定義されません。 この場合は、現在のレコード ポインターを有効なレコードに戻す必要があります。前方スクロールスナップショットタイプのレコードセットでは、検索操作を使用できません。
米国バージョンの Microsoft Jet データベース エンジンを使用していない場合でも、日付を含むフィールドを検索する場合は、米国の日付形式 (月日-年) を使用する必要があります。そうしないと、一致するレコードが見つからない可能性があります。
ODBC データベースと大きなダイナセットを操作する場合、特に大きなレコードセットを操作する場合は、検索操作の使用が遅くなる場合があります。 カスタマイズされた ORDERBY 句、 WHERE 句、パラメーター クエリ、または
CDaoQuerydef
特定のインデックス付きレコードを取得するオブジェクトで SQL クエリを使用することで、パフォーマンスを向上させることができます。
関連情報については、DAO ヘルプのトピック「FindFirst、FindLast、FindNext、FindPrevious メソッド」を参照してください。
CDaoRecordset::FindNext
このメンバー関数を呼び出して、指定した条件に一致する次のレコードを検索します。
BOOL FindNext(LPCTSTR lpszFilter);
パラメーター
Lpszfilter
レコードの検索に使用される文字列式 (WHERE という単語のない SQL ステートメントの WHERE 句など)。
戻り値
一致するレコードが見つかった場合は 0 以外、それ以外の場合は 0。
解説
メンバー関数は FindNext
、現在のレコードで検索を開始し、レコードセットの末尾まで検索します。
(特定の条件を満たすレコードだけでなく) すべてのレコードを検索に含める場合は、いずれかの移動操作を使用してレコード間を移動します。 テーブル型レコードセット内のレコードを検索するには、メンバー関数を Seek
呼び出します。
条件に一致するレコードが見つからない場合、現在のレコード ポインターは不確定になり FindNext
、0 が返されます。 レコードセットに条件を満たす複数のレコードが含まれている場合は、 FindFirst
最初の出現箇所を検索し、 FindNext
次に出現するレコードを検索します。
注意事項
現在のレコードを編集する場合は、別のレコードに移動する前にメンバー関数を Update
呼び出して変更を保存してください。 更新せずに別のレコードに移動すると、変更は警告なしで失われます。
Find 操作の 1 つを使用することは、呼び出し MoveFirst
と MoveNext
同じではなく、条件を指定せずに最初または次のレコードを最新の状態にするだけです。 移動操作では、検索操作に従うことができます。
検索操作を使用する場合は、次の点に注意してください。
0 以外の値が返された場合
Find
、現在のレコードは定義されません。 この場合は、現在のレコード ポインターを有効なレコードに戻す必要があります。前方スクロールスナップショットタイプのレコードセットでは、検索操作を使用できません。
米国バージョンの Microsoft Jet データベース エンジンを使用していない場合でも、日付を含むフィールドを検索する場合は、米国の日付形式 (月日-年) を使用する必要があります。そうしないと、一致するレコードが見つからない可能性があります。
ODBC データベースと大きなダイナセットを操作する場合、特に大きなレコードセットを操作する場合は、検索操作の使用が遅くなる場合があります。 カスタマイズされた ORDERBY 句、 WHERE 句、パラメーター クエリ、または
CDaoQuerydef
特定のインデックス付きレコードを取得するオブジェクトで SQL クエリを使用することで、パフォーマンスを向上させることができます。
関連情報については、DAO ヘルプのトピック「FindFirst、FindLast、FindNext、FindPrevious メソッド」を参照してください。
CDaoRecordset::FindPrev
このメンバー関数を呼び出して、指定した条件に一致する前のレコードを検索します。
BOOL FindPrev(LPCTSTR lpszFilter);
パラメーター
Lpszfilter
レコードの検索に使用される文字列式 (WHERE という単語のない SQL ステートメントの WHERE 句など)。
戻り値
一致するレコードが見つかった場合は 0 以外、それ以外の場合は 0。
解説
メンバー関数は FindPrev
、現在のレコードで検索を開始し、レコードセットの先頭に向かって後方に検索します。
(特定の条件を満たすレコードだけでなく) すべてのレコードを検索に含める場合は、いずれかの移動操作を使用してレコード間を移動します。 テーブル型レコードセット内のレコードを検索するには、メンバー関数を Seek
呼び出します。
条件に一致するレコードが見つからない場合、現在のレコード ポインターは不確定になり FindPrev
、0 が返されます。 レコードセットに条件を満たす複数のレコードが含まれている場合は、 FindFirst
最初の出現箇所を検索し、 FindNext
次に出現するレコードを検索します。
注意事項
現在のレコードを編集する場合は、別のレコードに移動する前にメンバー関数を Update
呼び出して変更を保存してください。 更新せずに別のレコードに移動すると、変更は警告なしで失われます。
Find 操作の 1 つを使用することは、呼び出し MoveFirst
と MoveNext
同じではなく、条件を指定せずに最初または次のレコードを最新の状態にするだけです。 移動操作では、検索操作に従うことができます。
検索操作を使用する場合は、次の点に注意してください。
0 以外の値が返された場合
Find
、現在のレコードは定義されません。 この場合は、現在のレコード ポインターを有効なレコードに戻す必要があります。前方スクロールスナップショットタイプのレコードセットでは、検索操作を使用できません。
米国バージョンの 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();
戻り値
キャッシュするレコードセット内の最初のレコードのブックマークを指定する A 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();
戻り値
このレコードセットの派生元データベースのパスと名前を含む A CString
。
解説
CDaoDatabase へのポインターなしでレコードセットが作成された場合、このパスはレコードセットによって既定のデータベースを開くために使用されます。 既定では、この関数は空の文字列を返します。 ClassWizard から新しいレコードセット CDaoRecordset
を派生させると、この関数が作成されます。
次の例は、文字列を正しく解釈するために必要な、文字列内での二重円記号 (\\) の使用を示しています。
CString CCustSet::GetDefaultDBName()
{
return _T("c:\\mydir\\datasrc.mdb");
}
CDaoRecordset::GetDefaultSQL
フレームワークは、このメンバー関数を呼び出して、レコードセットの基になっている既定の SQL ステートメントを取得します。
virtual CString GetDefaultSQL();
戻り値
既定の SQL ステートメントを含む A CString
。
解説
これは、テーブル名または SQL Standard Edition LECT ステートメントです。
ClassWizard を使用してレコードセット クラスを宣言することで、既定の SQL ステートメントを間接的に定義すると、ClassWizard によってこのタスクが実行されます。
Open に NULL SQL 文字列を渡すと、この関数が呼び出され、レコードセットのテーブル名または SQL が決定されます。
CDaoRecordset::GetEditMode
このメンバー関数を呼び出して、次のいずれかの値である編集の状態を確認します。
short GetEditMode();
戻り値
現在のレコードの編集状態を示す値を返します。
解説
Value | 説明 |
---|---|
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
このメンバー関数のいずれかのバージョンを呼び出す方が効率的です。 この関数の後者のバージョンは、下位互換性のために保持されます。
DoFieldExchange メカニズムを使用して列を静的にバインドするのではなく、実行時にフィールドを動的にバインドするには、SetFieldValue を使用GetFieldValue
します。
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 を呼び出して、レコードセットがブックマークをサポートしているかどうかを判断します。 レコードセットがブックマークをサポートしていない場合は、a 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
すことはできません。 現在のレコードがない場合、または現在のレコードが削除されている場合は、a CDaoException
がスローされます。
関連情報については、DAO ヘルプの「PercentPosition プロパティ」を参照してください。
CDaoRecordset::GetRecordCount
このメンバー関数を呼び出して、アクセスされたレコードセット内のレコードの数を確認します。
long GetRecordCount();
戻り値
レコードセット オブジェクトでアクセスされるレコードの数を返します。
解説
GetRecordCount
は、すべてのレコードがアクセスされるまで、ダイナセットタイプまたはスナップショットタイプのレコードセットに含まれるレコードの数を示しません。 このメンバー関数呼び出しが完了するまでにかなりの時間がかかる場合があります。
最後のレコードにアクセスすると、戻り値はレコードセット内の削除されていないレコードの合計数を示します。 最後のレコードに強制的にアクセスするには、レコードセットの MoveLast
or FindLast
メンバー関数を呼び出します。 また、SQL カウントを使用して、クエリから返されるおおよそのレコード数を決定することもできます。
アプリケーションがダイナセットタイプのレコードセット内のレコードを削除すると、戻り値は GetRecordCount
減少します。 ただし、他のユーザーによって削除された GetRecordCount
レコードは、現在のレコードが削除されたレコードに配置されるまで反映されません。 レコード数に影響を与えるトランザクションを実行した後にトランザクションをロールバックした場合、GetRecordCount
再メインレコードの実際の数は反映されません。
スナップショット型レコードセットからのGetRecordCount
値は、基になるテーブルの変更の影響を受けません。
テーブル型レコードセットの GetRecordCount
値は、テーブル内のおおよそのレコード数を反映し、テーブル レコードが追加および削除されるとすぐに影響を受けます。
レコードのないレコードセットは、値 0 を返します。 アタッチされたテーブルまたは ODBC データベースを操作する場合は、 GetRecordCount
常に - 1 を返します。 レコードセットで Requery
メンバー関数を呼び出すと、クエリが再実行された場合と同じように値 GetRecordCount
がリセットされます。
関連情報については、DAO ヘルプの「RecordCount プロパティ」を参照してください。
CDaoRecordset::GetSQL
このメンバー関数を呼び出して、レコードセットを開いたときにレコードセットのレコードを選択するために使用された SQL ステートメントを取得します。
CString GetSQL() const;
戻り値
SQL ステートメントを含む A CString
。
解説
これは通常、SQL Standard Edition LECT ステートメントです。
通常、返されるGetSQL
文字列は、lpszSQL パラメーターのレコードセットに Open メンバー関数に渡した文字列とは異なります。 これは、渡した内容、ClassWizard で指定したOpen
内容、および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 BETW Enterprise Edition N 1 AND 31" などの検証規則がある場合があります。
関連情報については、DAO ヘルプの「ValidationRule プロパティ」を参照してください。
CDaoRecordset::GetValidationText
基になるフィールド オブジェクトの ValidationText プロパティのテキストを取得するには、このメンバー関数を呼び出します。
CString GetValidationText();
戻り値
CString
フィールドの値が基になるフィールド オブジェクトの検証規則を満たしていない場合に表示されるメッセージのテキストを含むオブジェクト。
解説
関連情報については、DAO ヘルプの「ValidationText プロパティ」を参照してください。
CDaoRecordset::IsBOF
レコードからレコードまでスクロールする前に、このメンバー関数を呼び出して、レコードセットの最初のレコードの前に移動したかどうかを確認します。
BOOL IsBOF() const;
戻り値
レコードセットにレコードが含まれている場合、または最初のレコードの前に後方にスクロールした場合は 0 以外。それ以外の場合は 0。
解説
また、レコードセットにレコードが含まれているか空であるかを判断するために、一緒IsEOF
に呼び出IsBOF
すこともできます。 呼び出 Open
した直後に、レコードセットにレコードが含まれている場合は、 IsBOF
0 以外の値が返されます。 少なくとも 1 つのレコードを含むレコードセットを開くと、最初のレコードが現在のレコードになり、 IsBOF
0 が返されます。
最初のレコードが現在のレコードであり、呼び出 MovePrev
した場合は、 IsBOF
0 以外の値が返されます。 IsBOF
0 以外の値を返し、呼び出MovePrev
すと、例外がスローされます。 0 以外の値が返された場合 IsBOF
、現在のレコードは未定義になり、現在のレコードを必要とするアクションは例外になります。
特定のメソッド IsBOF
の効果と IsEOF
設定:
内部的に呼び出すと
Open*
、レコードセット内の最初のレコードが現在のレコードになります。MoveFirst
そのため、空のレコード セットを呼び出すとOpen
、0 以外のIsBOF
レコードがIsEOF
返されます。 (失敗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 | 許可 | 許可 | 許可 | 許可 |
移動操作を許可しても、操作でレコードが正常に検索されるわけではありません。 指定した移動操作の実行が許可され、例外が生成されないことを示すだけです。 およびIsEOF
メンバー関数のIsBOF
値は、移動の試行の結果として変更される可能性があります。
レコードが見つからない移動操作の値とIsEOF
設定への影響を次のIsBOF
表に示します。
操作 | IsBOF | Iseof |
---|---|---|
MoveFirst , MoveLast |
0 以外 | 0 以外 |
Move 0 |
変更なし | 変更なし |
MovePrev 、 Move < 0 |
0 以外 | 変更なし |
MoveNext 、 Move > 0 |
変更なし | 0 以外 |
関連情報については、DAO ヘルプのトピック「BOF、EOF プロパティ」を参照してください。
CDaoRecordset::IsDeleted
このメンバー関数を呼び出して、現在のレコードが削除されたかどうかを確認します。
BOOL IsDeleted() const;
戻り値
レコードセットが削除されたレコードに配置されている場合は 0 以外。それ以外の場合は 0。
解説
レコードにスクロールして IsDeleted
TRUE (0 以外) を返す場合は、他のレコードセット操作を実行する前に、別のレコードまでスクロールする必要があります。
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
すと、例外がスローされます。 0 以外の値が返された場合 IsEOF
、現在のレコードは未定義になり、現在のレコードを必要とするアクションは例外になります。
特定のメソッド IsBOF
の効果と IsEOF
設定:
内部的に呼び出すと
Open
、レコードセット内の最初のレコードが現在のレコードになります。MoveFirst
そのため、空のレコード セットを呼び出すとOpen
、0 以外のIsBOF
レコードがIsEOF
返されます。 (失敗した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 の試行の結果として変更される可能性があります。
レコードが見つからない移動操作の値とIsEOF
設定への影響を次のIsBOF
表に示します。
操作 | IsBOF | Iseof |
---|---|---|
MoveFirst , MoveLast |
0 以外 | 0 以外 |
Move 0 |
変更なし | 変更なし |
MovePrev 、 Move < 0 |
0 以外 | 変更なし |
MoveNext 、 Move > 0 |
変更なし | 0 以外 |
関連情報については、DAO ヘルプのトピック「BOF、EOF プロパティ」を参照してください。
CDaoRecordset::IsFieldDirty
このメンバー関数を呼び出して、ダイナセットの指定されたフィールド データ メンバーに "ダーティ" (変更) のフラグが設定されているかどうかを確認します。
BOOL IsFieldDirty(void* pv);
パラメーター
Pv
状態をチェックするフィールド データ メンバーへのポインター。フィールドのいずれかがダーティされているかどうかを判断する場合は NULL。
戻り値
指定したフィールド データ メンバーにダーティフラグが設定されている場合は 0 以外、それ以外の場合は 0。
解説
現在のレコードがメンバー関数の呼び出し (または呼び出Update
しの後) によって更新されると、すべてのダーティフィールド データ メンバーのデータがデータ ソースのCDaoRecordset
レコードにEdit
AddNew
転送されます。 この知識があれば、フィールド データ メンバーのフラグを解除して列をマークし、データ ソースに書き込まれないようにするなど、さらに手順を実行できます。
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
、例外をスローします。 この例外は、呼び出し時ではなく、呼び出Update
SetFieldNull
し時に発生します。
CDaoRecordset::IsOpen
このメンバー関数を呼び出して、レコードセットが開いているかどうかを確認します。
BOOL IsOpen() const;
戻り値
レコードセット オブジェクト Open
または Requery
メンバー関数が以前に呼び出され、レコードセットが閉じていない場合は 0 以外。それ以外の場合は 0。
解説
CDaoRecordset::m_bCheckCacheForDirtyFields
キャッシュされたフィールドが自動的にダーティ (変更) および Null としてマークされるかどうかを示すフラグが含まれています。
解説
フラグの既定値は TRUE です。 このデータ メンバーの設定は、ダブル バッファリング メカニズム全体を制御します。 フラグを TRUE に設定すると、DFX メカニズムを使用してフィールドごとにキャッシュをオフにすることができます。 フラグを FAL Standard Edition に設定する場合は、自分でSetFieldNull
呼び出すSetFieldDirty
必要があります。
呼び出す Open
前に、このデータ メンバーを設定します。 このメカニズムは、主に使いやすさを目的とします。 変更が行われると、フィールドがダブルバッファリングされるため、パフォーマンスが低下する可能性があります。
CDaoRecordset::m_nFields
レコードセット クラスのフィールド データ メンバーの数と、データ ソースからレコードセットによって選択された列の数を格納します。
解説
レコードセット クラスのコンストラクターは、静的にバインドされたフィールドの正しい数で初期化 m_nFields
する必要があります。 ClassWizard は、この初期化を使用してレコードセット クラスを宣言するときに書き込みます。 手動で記述することもできます。
フレームワークでは、この数値を使用して、フィールド データ メンバーと、データ ソース上の現在のレコードの対応する列の間の相互作用を管理します。
Note
この数は、パラメーターCDaoFieldExchange::outputColumn
を使用した呼び出しの後にDoFieldExchange
登録された出力列の数に対応するSetFieldType
必要があります。
を使用CDaoRecordset::GetFieldValue
CDaoRecordset::SetFieldValue
して列を動的にバインドできます。 その場合は、メンバー関数内の m_nFields
DFX 関数呼び出しの数を反映するためにカウントをインクリメントする DoFieldExchange
必要はありません。
CDaoRecordset::m_nParams
レコードセット クラス内のパラメーター データ メンバーの数 (レコードセットのクエリで渡されたパラメーターの数) を格納します。
解説
レコードセット クラスにパラメーター データ メンバーがある場合、クラスのコンストラクターは正しい数値でm_nParams初期化する必要があります。 m_nParamsの値の既定値は 0 です。 パラメーター データ メンバーを追加する場合 (手動で行う必要があります)、パラメーターの数を反映するために、クラス コンストラクターに初期化を手動で追加する必要もあります (m_strFilterまたはm_strSort文字列内の '' プレースホルダーの数以上である必要があります)。
フレームワークは、レコードセットのクエリをパラメーター化するときにこの数を使用します。
Note
この番号は、パラメーターCFieldExchange::param
を呼び出した後にDoFieldExchange
登録された "params" の数に対応するSetFieldType
必要があります。
関連情報については、DAO ヘルプのトピック「パラメーター オブジェクト」を参照してください。
CDaoRecordset::m_pDAORecordset
オブジェクトの基になる DAO レコードセット オブジェクトの OLE インターフェイスへのポインターを CDaoRecordset
格納します。
解説
DAO インターフェイスに直接アクセスする必要がある場合は、このポインターを使用します。
関連情報については、DAO ヘルプの「Recordset オブジェクト」を参照してください。
CDaoRecordset::m_pDatabase
レコードセットがデータ ソースに CDaoDatabase
接続されているオブジェクトへのポインターを格納します。
解説
この変数は 2 つの方法で設定されます。 通常は、レコードセット オブジェクトを構築するときに、既に開 CDaoDatabase
いているオブジェクトへのポインターを渡します。 代わりに NULL を渡す場合は、 CDaoRecordset
オブジェクトを CDaoDatabase
作成して開きます。 どちらの場合も、 CDaoRecordset
ポインターをこの変数に格納します。
通常、格納されている m_pDatabase
ポインターを直接使用する必要はありません。 ただし、独自の拡張機能を記述する CDaoRecordset
場合は、ポインターを使用する必要がある場合があります。 たとえば、独自 CDaoException
のポインターをスローする場合は、ポインターが必要になる場合があります。
関連情報については、DAO ヘルプの「データベース オブジェクト」を参照してください。
CDaoRecordset::m_strFilter
SQL ステートメントの WHERE 句を構築するために使用される文字列を格納します。
解説
レコードセットをフィルター処理するための予約語 WHERE は含まれません。 このデータ メンバーの使用は、テーブル型のレコードセットには適用されません。 ポインターを m_strFilter
使用してレコードセットを開く場合、使用しても CDaoQueryDef
効果はありません。
米国バージョンの Microsoft Jet データベース エンジンを使用していない場合でも、日付を含むフィールドをフィルター処理する場合は、米国の日付形式 (月日-年) を使用します。それ以外の場合、データは期待どおりにフィルター処理されない可能性があります。
関連情報については、DAO ヘルプの「フィルター プロパティ」を参照してください。
CDaoRecordset::m_strSort
予約語 ORDERBY を含まない SQL ステートメントの ORDERBY 句を含む文字列を格納します。
解説
ダイナセットタイプおよびスナップショットタイプのレコードセットオブジェクトを並べ替えることができます。
テーブルタイプのレコードセットオブジェクトを並べ替えることはできません。 テーブル型レコードセットの並べ替え順序を決定するには、SetCurrentIndex を呼び出 します。
ポインターを 使用してレコードセットを開く場合、m_strSort を使用 CDaoQueryDef
しても効果はありません。
関連情報については、DAO ヘルプの「並べ替えプロパティ」を参照してください。
CDaoRecordset::Move
このメンバー関数を呼び出して、現在のレコードのレコードセット lRows レコードを配置します。
virtual void Move(long lRows);
パラメーター
lRows
前後に移動するレコードの数。 正の値は、レコードセットの末尾に向かって前方に移動します。 負の値は、先頭に向かって後方に移動します。
解説
前後に移動できます。 Move( 1 )
は 、 にMoveNext
相当MovePrev
し、.Move( -1 )
注意事項
レコードセットにレコードがない場合、 Move
いずれかの関数を呼び出すと例外がスローされます。 一般に、移動操作のIsEOF
前後の両方IsBOF
を呼び出して、レコードセットにレコードがあるかどうかを判断します。 呼び出した後、またはいずれかの呼び出Open
しを行いますIsEOF
。IsBOF
Requery
Note
レコードセットの先頭または末尾をスクロールした ( IsBOF
または IsEOF
0 以外の値を返す) 場合は、呼び出し Move
がスロー CDaoException
されます。
Note
現在のレコードの更新または追加中に Move
いずれかの関数を呼び出すと、更新は警告なしで失われます。
前方スクロール スナップショットを呼び出Move
す場合、lRows パラメーターは正の整数である必要があり、ブックマークは許可されないため、前に進むだけです。
レコードセット内の最初、最後、次、または前のレコードを現在のレコードにするには、関数 、、MoveNext
MoveLast
またはMovePrev
メンバー関数をMoveFirst
呼び出します。
関連情報については、DAO ヘルプの「Move メソッド」および「MoveFirst、MoveLast、MoveNext、MovePrevious メソッド」のトピックを参照してください。
CDaoRecordset::MoveFirst
このメンバー関数を呼び出して、レコードセット内の最初のレコード (存在する場合) を現在のレコードにします。
void MoveFirst();
解説
レコードセットを開いた直後に呼び出す MoveFirst
必要はありません。 その時点で、最初のレコード (存在する場合) は自動的に現在のレコードになります。
注意事項
レコードセットにレコードがない場合、 Move
いずれかの関数を呼び出すと例外がスローされます。 一般に、移動操作のIsEOF
前後の両方IsBOF
を呼び出して、レコードセットにレコードがあるかどうかを判断します。 呼び出した後、またはいずれかの呼び出Open
しを行いますIsEOF
。IsBOF
Requery
Note
現在のレコードの更新または追加中に Move
いずれかの関数を呼び出すと、更新は警告なしで失われます。
条件を Move
適用せずにレコードからレコードに移動するには、この関数を使用します。 検索操作を使用して、特定の条件を満たすダイナセット タイプまたはスナップショットタイプのレコードセット オブジェクト内のレコードを検索します。 テーブル型レコードセット オブジェクト内のレコードを検索するには、次を呼び出します Seek
。
レコードセットがテーブル型のレコードセットを参照している場合、移動はテーブルの現在のインデックスに従います。 基になる DAO オブジェクトの Index プロパティを使用して、現在のインデックスを設定できます。 現在のインデックスを設定しない場合、返されるレコードの順序は未定義です。
SQL クエリまたは querydef に基づいてレコードセット オブジェクトを呼び出 MoveLast
すと、クエリが強制的に完了し、レコードセット オブジェクトが完全に設定されます。
前方スクロール スナップショットで MoveFirst
or MovePrev
メンバー関数を呼び出すことはできません。
レコードセット オブジェクト内の現在のレコードの位置を特定の数のレコードを前後に移動するには、次を呼び出します Move
。
関連情報については、DAO ヘルプの「Move メソッド」および「MoveFirst、MoveLast、MoveNext、MovePrevious メソッド」のトピックを参照してください。
CDaoRecordset::MoveLast
このメンバー関数を呼び出して、レコードセット内の最後のレコード (存在する場合) を現在のレコードにします。
void MoveLast();
解説
注意事項
レコードセットにレコードがない場合、 Move
いずれかの関数を呼び出すと例外がスローされます。 一般に、移動操作のIsEOF
前後の両方IsBOF
を呼び出して、レコードセットにレコードがあるかどうかを判断します。 呼び出した後、またはいずれかの呼び出Open
しを行いますIsEOF
。IsBOF
Requery
Note
現在のレコードの更新または追加中に Move
いずれかの関数を呼び出すと、更新は警告なしで失われます。
条件を Move
適用せずにレコードからレコードに移動するには、この関数を使用します。 検索操作を使用して、特定の条件を満たすダイナセット タイプまたはスナップショットタイプのレコードセット オブジェクト内のレコードを検索します。 テーブル型レコードセット オブジェクト内のレコードを検索するには、次を呼び出します Seek
。
レコードセットがテーブル型のレコードセットを参照している場合、移動はテーブルの現在のインデックスに従います。 基になる DAO オブジェクトの Index プロパティを使用して、現在のインデックスを設定できます。 現在のインデックスを設定しない場合、返されるレコードの順序は未定義です。
SQL クエリまたは querydef に基づいてレコードセット オブジェクトを呼び出 MoveLast
すと、クエリが強制的に完了し、レコードセット オブジェクトが完全に設定されます。
レコードセット オブジェクト内の現在のレコードの位置を特定の数のレコードを前後に移動するには、次を呼び出します Move
。
関連情報については、DAO ヘルプの「Move メソッド」および「MoveFirst、MoveLast、MoveNext、MovePrevious メソッド」のトピックを参照してください。
CDaoRecordset::MoveNext
このメンバー関数を呼び出して、レコードセット内の次のレコードを現在のレコードにします。
void MoveNext();
解説
前のレコードに移動する前に呼び出 IsBOF
しておくことをお勧めします。 if をスロー CDaoException
IsBOF
するMovePrev
呼び出しは、0 以外の値を返します。これは、最初のレコードの前に既にスクロールしたか、レコードセットによって選択されたレコードがないことを示します。
注意事項
レコードセットにレコードがない場合、 Move
いずれかの関数を呼び出すと例外がスローされます。 一般に、移動操作のIsEOF
前後の両方IsBOF
を呼び出して、レコードセットにレコードがあるかどうかを判断します。 呼び出した後、またはいずれかの呼び出Open
しを行いますIsEOF
。IsBOF
Requery
Note
現在のレコードの更新または追加中に Move
いずれかの関数を呼び出すと、更新は警告なしで失われます。
条件を Move
適用せずにレコードからレコードに移動するには、この関数を使用します。 検索操作を使用して、特定の条件を満たすダイナセット タイプまたはスナップショットタイプのレコードセット オブジェクト内のレコードを検索します。 テーブル型レコードセット オブジェクト内のレコードを検索するには、次を呼び出します Seek
。
レコードセットがテーブル型のレコードセットを参照している場合、移動はテーブルの現在のインデックスに従います。 基になる DAO オブジェクトの Index プロパティを使用して、現在のインデックスを設定できます。 現在のインデックスを設定しない場合、返されるレコードの順序は未定義です。
レコードセット オブジェクト内の現在のレコードの位置を特定の数のレコードを前後に移動するには、次を呼び出します Move
。
関連情報については、DAO ヘルプの「Move メソッド」および「MoveFirst、MoveLast、MoveNext、MovePrevious メソッド」のトピックを参照してください。
CDaoRecordset::MovePrev
このメンバー関数を呼び出して、レコードセット内の前のレコードを現在のレコードにします。
void MovePrev();
解説
前のレコードに移動する前に呼び出 IsBOF
しておくことをお勧めします。 if をスロー CDaoException
IsBOF
するMovePrev
呼び出しは、0 以外の値を返します。これは、最初のレコードの前に既にスクロールしたか、レコードセットによって選択されたレコードがないことを示します。
注意事項
レコードセットにレコードがない場合、 Move
いずれかの関数を呼び出すと例外がスローされます。 一般に、移動操作のIsEOF
前後の両方IsBOF
を呼び出して、レコードセットにレコードがあるかどうかを判断します。 呼び出した後、またはいずれかの呼び出Open
しを行いますIsEOF
。IsBOF
Requery
Note
現在のレコードの更新または追加中に Move
いずれかの関数を呼び出すと、更新は警告なしで失われます。
条件を Move
適用せずにレコードからレコードに移動するには、この関数を使用します。 検索操作を使用して、特定の条件を満たすダイナセット タイプまたはスナップショットタイプのレコードセット オブジェクト内のレコードを検索します。 テーブル型レコードセット オブジェクト内のレコードを検索するには、次を呼び出します Seek
。
レコードセットがテーブル型のレコードセットを参照している場合、移動はテーブルの現在のインデックスに従います。 基になる DAO オブジェクトの Index プロパティを使用して、現在のインデックスを設定できます。 現在のインデックスを設定しない場合、返されるレコードの順序は未定義です。
前方スクロール スナップショットで MoveFirst
or 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 Standard Edition LECT ステートメント (必要に応じて、SQL WHERE 句または ORDERBY 句を使用)。
パススルー クエリ。
nOptions
以下に示すオプションの 1 つ以上。 既定値は 0 です。 使用できる値は次のとおりです。
dbAppendOnly
新しいレコードのみを追加できます (ダイナセットタイプのレコードセットのみ)。 このオプションは、文字どおり、レコードを追加することしかできないことを意味します。 MFC ODBC データベース クラスには、レコードの取得と追加を許可する追加専用オプションがあります。dbForwardOnly
レコードセットは前方スクロールスナップショットです。dbSeeChanges
編集中のデータを別のユーザーが変更している場合は、例外を生成します。dbDenyWrite
他のユーザーはレコードを変更または追加できません。dbDenyRead
他のユーザーはレコードを表示できません (テーブル型レコードセットのみ)。dbReadOnly
レコードのみを表示できます。他のユーザーが変更できます。dbInconsistent
一貫性のない更新が許可されます (ダイナセットタイプのレコードセットのみ)。dbConsistent
一貫性のある更新のみが許可されます (ダイナセットタイプのレコードセットのみ)。
Note
定数であり dbConsistent
、 dbInconsistent
相互に排他的です。 一方または他方を使用できますが、特定の Open
インスタンスでは両方を使用することはできません。
pTableDef
CDaoTableDef オブジェクトへのポインター。 このバージョンは、テーブル型レコードセットに対してのみ有効です。 このオプションを使用する場合、 CDaoDatabase
作成に使用される CDaoRecordset
ポインターは使用されません。代わりに、tabledef が存在するデータベースが使用されます。
pQueryDef
CDaoQueryDef オブジェクトへのポインター。 このバージョンは、ダイナセットタイプおよびスナップショットタイプのレコードセットに対してのみ有効です。 このオプションを CDaoDatabase
使用する場合、構築 CDaoRecordset
に使用されるポインターは使用されません。代わりに、querydef が存在するデータベースが使用されます。
解説
呼び出す Open
前に、レコードセット オブジェクトを構築する必要があります。 これにはいくつかの方法があります。
レコードセット オブジェクトを構築するときに、既に開いているオブジェクトへの
CDaoDatabase
ポインターを渡します。レコードセット オブジェクトを構築するときに、開かっていないオブジェクトへのポインターを
CDaoDatabase
渡します。 レコードセットはオブジェクトをCDaoDatabase
開きますが、レコードセット オブジェクトが閉じると閉じません。レコードセット オブジェクトを構築するときに、NULL ポインターを渡します。 レコードセット オブジェクトは、Microsoft Access の名前を取得するために呼び出します
GetDefaultDBName
。開くMDBファイル。 その後、レコードセットはオブジェクトをCDaoDatabase
開き、レコードセットが開いている限り開いたままにします。 レコードセットを呼び出Close
すと、CDaoDatabase
オブジェクトも閉じられます。Note
レコードセットがオブジェクトを
CDaoDatabase
開くと、非決定的アクセス権を持つデータ ソースが開きます。
lpszSQL パラメーターを使用するバージョンOpen
では、レコードセットを開くと、いくつかの方法のいずれかでレコードを取得できます。 1 つ目のオプションは、DFX 関数を使用することです DoFieldExchange
。 2 番目のオプションは、メンバー関数を呼び出して動的バインディングを GetFieldValue
使用することです。 これらのオプションは、個別に、または組み合わせて実装できます。 これらを組み合わせる場合は、SQL ステートメントを自分 Open
で渡す必要があります。
オブジェクトを渡す CDaoTableDef
2 番目のOpen
バージョンを使用すると、結果の列を使用してバインドしたり、DFX メカニズムを介してDoFieldExchange
GetFieldValue
動的にバインドしたりできます。
Note
テーブル型レコードセットのオブジェクトのみをCDaoTableDef
使用して呼び出Open
すことができます。
オブジェクトを渡す CDaoQueryDef
3 番目のOpen
バージョンを使用すると、そのクエリが実行され、結果の列を使用してバインドしたり、DFX メカニズムを介してDoFieldExchange
GetFieldValue
動的にバインドしたりできます。
Note
ダイナセットタイプおよびスナップショットタイプのレコードセットに対してのみ、オブジェクトを使用してCDaoQueryDef
呼び出Open
すことができます。
パラメーターを使用lpszSQL
する最初のバージョンでは、次のOpen
表に示す条件に基づいてレコードが選択されます。
パラメーター lpszSQL の値。 |
レコードの選択基準 | 例 |
---|---|---|
NULL | GetDefaultSQL の返す文字列。 |
|
1 つ以上の tabledef 名または querydef 名のコンマ区切りのリスト。 | で DoFieldExchange 表されるすべての列。 |
"Customer" |
Standard Edition LECT column-list FROM table-list | 指定した tabledef または querydef の指定された列。 | "SELECT CustId, CustName FROM Customer" |
通常のプロシージャは、Open
-derived クラスの作成時CDaoRecordset
に Open
ClassWizard によって生成されるオーバーライド可能なメンバー関数を 、その場合は呼び出しGetDefaultSQL
に NULL を渡すことです。 この値は、ClassWizard で指定した tabledef や querydef の名前を示します。 代わりに、lpszSQL パラメーターで他の情報を指定できます。
渡した内容に関係なく、Open
クエリの最終的な SQL 文字列を構築し (文字列には、渡した lpszSQL 文字列に SQL WHERE 句と ORDERBY 句が追加されている可能性があります)、クエリを実行します。 呼び出Open
し後に呼び出GetSQL
すことで、構築された文字列を調べることができます。
レコードセット クラスのフィールド データ メンバーは、選択したデータの列に結び付けられています。 いくつかのレコードが返された場合、最初のレコードが現在のレコードになります。
フィルターや並べ替えなどのレコードセットのオプションを設定する場合は、レコードセット オブジェクトを作成した後、または呼び出すOpen
前に設定m_strSort
m_strFilter
します。 レコードセットが既に開いている後にレコードセット内のレコードを更新する場合は、 を呼び出します Requery
。
ダイナセットタイプまたはスナップショットタイプのレコードセットを呼び出すOpen
場合、またはデータ ソースがアタッチされたテーブルを表す SQL ステートメントまたは tabledef を参照している場合は、型引数に使用dbOpenTable
できません。その場合、MFC は例外をスローします。 tabledef オブジェクトがアタッチされたテーブルを表しているかどうかを確認するには、CDaoTableDef オブジェクトを作成し、その GetConnect メンバー関数を呼び出します。
同じレコードを dbSeeChanges
編集または削除するときに、コンピューター上の別のユーザーまたは別のプログラムによって行われた変更をトラップする場合は、フラグを使用します。 たとえば、2 人のユーザーが同じレコードの編集を開始した場合、メンバー関数を呼び出す最初のユーザーは Update
成功します。 2 番目のユーザーによって呼び出されると Update
、a CDaoException
がスローされます。 同様に、2 番目のユーザーがレコードの削除を呼び出 Delete
そうとしたときに、最初のユーザーによって既に変更されている場合は、a 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
保証しません。
注意事項
あなたが呼び出した後にのみ呼び出 Requery
します Open
.
Note
Requery を呼び出すと、DAO ブックマークが変更されます。
呼び出しで 0 が返された場合、ダイナセットタイプまたはスナップショットタイプのレコードセットを呼び出Requery
CanRestart
すことはできません。また、テーブルタイプのレコードセットで使用することもできません。
呼び出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
インデックス内の COleVariant
2 番目のフィールド (存在する場合) に対応する値を指すポインター。 既定値は NULL です。
pKey3
インデックス内の COleVariant
3 番目のフィールド (存在する場合) に対応する値を指すポインター。 既定値は NULL です。
pKeyArray
バリアントの配列へのポインター。 配列サイズは、インデックス内のフィールドの数に対応します。
nKeys
配列のサイズに対応する整数。インデックス内のフィールドの数です。
Note
キーにワイルドカードを指定しないでください。 ワイルドカードでは、Seek
一致するレコードが返されません。
戻り値
一致するレコードが見つかった場合は 0 以外、それ以外の場合は 0。
解説
4 つ以上のフィールドの Seek
インデックスを処理するには、2 番目の (配列) バージョンを使用します。
Seek
では、テーブル型のレコードセットに対する高パフォーマンスのインデックス検索が可能になります。 呼び出Seek
す前に呼び出SetCurrentIndex
すことによって、現在のインデックスを設定する必要があります。 インデックスが一意でないキー フィールドを識別する場合は、 Seek
条件を満たす最初のレコードを検索します。 インデックスを設定しない場合は、例外がスローされます。
UNICODE レコードセットを作成しない場合は、オブジェクトを COleVariant
明示的に ANSI として宣言する必要があることに注意してください。 これを行うには、vtSrc を (ANSI) に設定VT_BSTRT
したコンストラクターの COleVariant::COleVariant(lpszSrc,vtSrc) 形式を使用するか、関数 SetString(lpszSrc,vtSrc) を vtSrc に設定してVT_BSTRT
使用COleVariant
します。
呼び出 Seek
すときに、1 つ以上のキー値と比較演算子 (""<、"="、"<="、"="、">="、または "">) を渡します。 Seek
は、指定したキー フィールドを検索し、lpszComparison および pKey1 で指定された条件を満たす最初のレコードを検索します。 見つかったら、 Seek
0 以外の値を返し、そのレコードを最新の状態にします。 一致の検索に失敗した場合 Seek
は Seek
0 を返し、現在のレコードは未定義です。 DAO を直接使用する場合は、NoMatch プロパティを明示的にチェックする必要があります。
"="、">="、または ">"の場合lpszComparison
は、Seek
インデックスの先頭から開始します。 lpszComparison が "<" または "<=" の場合は、インデックスの末尾から開始し、Seek
末尾に重複するインデックス エントリがない限り、後方に検索します。 この場合、 Seek
インデックスの末尾にある重複するインデックス エントリの中から任意のエントリから開始します。
使用 Seek
するときに現在のレコードである必要はありません。
特定の条件を満たすダイナセットタイプまたはスナップショットタイプのレコードセット内のレコードを検索するには、検索操作を使用します。 特定の条件を満たすレコードだけでなく、すべてのレコードを含めるには、移動操作を使用してレコード間を移動します。
アタッチテーブルはダイナセットタイプまたはスナップショットタイプのレコードセットとして開く必要があるため、任意のタイプのアタッチテーブルを呼び出Seek
すことはできません。 ただし、インストール可能な ISAM データベースを直接開くために呼び出 CDaoDatabase::Open
す場合は、パフォーマンスが低下する可能性がありますが、そのデータベース内のテーブルを呼び出 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 として宣言する必要があります。 これを行うには、vtSrc を (ANSI) に設定VT_BSTRT
したコンストラクターの COleVariant::COleVariant(lpszSrc,vtSrc) 形式を使用するか、関数 SetString(lpszSrc,vtSrc) を vtSrc に設定してVT_BSTRT
使用COleVariant
します。
関連情報については、DAO ヘルプの「Bookmark プロパティ」および「Bookmarkable プロパティ」のトピックを参照してください。
CDaoRecordset::SetCacheSize
このメンバー関数を呼び出して、キャッシュするレコードの数を設定します。
void SetCacheSize(long lSize);
パラメーター
lSize
レコードの数を指定します。 一般的な値は 100 です。 0 に設定すると、キャッシュがオフになります。 この設定は、5 から 1200 レコードの間である必要があります。 キャッシュで大量のメモリが使用される場合があります。
解説
キャッシュは、アプリケーションの実行中にデータが再度要求される場合に、サーバーから最後に取得したデータを保持するローカル メモリ内の領域です。 データ キャッシュにより、ダイナセット タイプのレコードセット オブジェクトを介してリモート サーバーからデータを取得するアプリケーションのパフォーマンスが向上します。 データが要求されると、Microsoft Jet データベース エンジンは、要求されたデータのキャッシュをサーバーから取得するのではなく、最初にキャッシュをチェックします。これには時間がかかります。 ODBC データ ソースから取得されていないデータはキャッシュに保存されません。
接続されたテーブルなどの ODBC データ ソースには、ローカル キャッシュを使用できます。 キャッシュを作成するには、リモート データ ソースからレコードセット オブジェクトを開き、メンバー関数とSetCacheStart
メンバー関数をSetCacheSize
呼び出してから、メンバー関数を呼び出FillCache
すか、Move 操作のいずれかを使用してレコードをステップ実行します。 メンバー関数の SetCacheSize
lSize パラメーターは、アプリケーションが一度に操作できるレコードの数に基づいて指定できます。 たとえば、画面に表示するデータのソースとしてレコードセットを使用している場合は、lSize パラメーターを 20 として渡SetCacheSize
して、一度に 20 個のレコードを表示できます。
関連情報については、DAO ヘルプの「CacheSize、CacheStart プロパティ」のトピックを参照してください。
CDaoRecordset::SetCacheStart
このメンバー関数を呼び出して、キャッシュするレコードセットの最初のレコードのブックマークを指定します。
void SetCacheStart(COleVariant varBookmark);
パラメーター
varBookmark
キャッシュするレコードセットの最初のレコードのブックマークを指定する COleVariant。
解説
メンバー関数の varBookmark パラメーターには、任意のレコードのブックマーク値をSetCacheStart
使用できます。 現在のレコードでキャッシュを開始するレコードを作成し、SetBookmark を使用してそのレコードのブックマークを確立し、ブックマーク値をメンバー関数のSetCacheStart
パラメーターとして渡します。
Microsoft Jet データベース エンジンは、キャッシュ範囲内のレコードをキャッシュから要求し、サーバーからキャッシュ範囲外のレコードを要求します。
キャッシュから取得されたレコードには、他のユーザーがソース データに同時に行った変更は反映されません。
キャッシュされたすべてのデータを強制的に更新するには、lSize パラメーターSetCacheSize
を 0 として渡し、最初に要求したキャッシュのサイズを指定して再度呼び出SetCacheSize
してから、メンバー関数をFillCache
呼び出します。
UNICODE レコードセットを作成しない場合は、オブジェクトを COleVariant
明示的に ANSI として宣言する必要があります。 これを行うには、vtSrc を (ANSI) に設定VT_BSTRT
したコンストラクターの COleVariant::COleVariant(lpszSrc,vtSrc) 形式を使用するか、関数 SetString(lpszSrc,vtSrc) を vtSrc に設定してVT_BSTRT
使用COleVariant
します。
関連情報については、DAO ヘルプの「CacheSize、CacheStart プロパティ」を参照してください。
CDaoRecordset::SetCurrentIndex
テーブル型レコードセットにインデックスを設定するには、このメンバー関数を呼び出します。
void SetCurrentIndex(LPCTSTR lpszIndex);
パラメーター
lpszIndex
設定するインデックスの名前を含むポインター。
解説
ベース テーブル内のレコードは、特定の順序で格納されません。 インデックスを設定すると、データベースから返されるレコードの順序は変更されますが、レコードが格納される順序には影響しません。 指定したインデックスは既に定義されている必要があります。 存在しないインデックス オブジェクトを使用しようとした場合、または Seek を呼び出すときにインデックスが設定されていない場合、MFC は例外をスローします。
CDaoTableDef::CreateIndex を呼び出し、CDaoTableDef::Append を呼び出してレコードセットを再度開くことで、基になる tabledef の Indexes コレクションに新しいインデックスを追加することで、テーブルの新しいインデックスを作成できます。
テーブル型レコードセットから返されるレコードは、基になる 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。 それ以外の場合STANDARD EDITIONフィールド データ メンバーに "クリーン" (変更なし) のフラグが設定される場合は FAL。
解説
フィールドを変更せずにマークすると、フィールドは更新されません。
フレームワークは、変更されたフィールド データ メンバーが DAO レコード フィールド交換 (DFX) メカニズムによってデータ ソースのレコードに確実に書き込まれるようにマークします。 通常、フィールドの値を変更すると、フィールドダーティが自動的に設定されるため、自分で呼び出すSetFieldDirty
必要はほとんどありませんが、フィールド データ メンバー内の値に関係なく、列が明示的に更新または挿入されるようにしたい場合があります。 DFX メカニズムでは、P Standard Edition UDONULL も使用されます。 詳細については、「CDaoFieldExchange::m_nOperation」を 参照してください。
ダブル バッファリング メカニズムが使用されていない場合、フィールドの値を変更しても、フィールドは自動的にダーティとして設定されません。 この場合、フィールドを明示的にダーティとして設定する必要があります。 m_bCheckCacheForDirtyFieldsに含まれるフラグは、この自動フィールドのチェックを制御します。
Note
Edit または AddNew を呼び出した後にのみ、このメンバー関数を呼び出します。
関数の最初の引数に NULL を使用すると、パラメーター フィールドではなく、すべてのoutputColumn
フィールドにCDaoFieldExchange
関数が適用されます。 たとえば、呼び出し
SetFieldDirty(NULL);
はフィールドのみを outputColumn
NULL に設定します。 param フィールドは影響を受けません。
パラメーターを操作するには、次のように、作業する個々のパラメーターの実際のアドレスを指定する必要があります。
SetFieldDirty(&m_strParam);
つまり、フィールドと同様outputColumn
に、すべてのパラメーター フィールドを 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 とマークされていて、値を指定する場合は、新しい値を設定するだけです。 を使用して Null フラグ SetFieldNull
を削除する必要はありません。 フィールドを Null にできるかどうかを判断するには、IsFieldNullable を呼び出します。
ダブル バッファリング メカニズムを使用していない場合、フィールドの値を変更しても、フィールドは自動的に ダーティ と Null 以外に設定されません。 ダーティフィールドと Null 以外のフィールドを明示的に設定する必要があります。 m_bCheckCacheForDirtyFieldsに含まれるフラグは、この自動フィールドのチェックを制御します。
DFX メカニズムでは、P Standard Edition UDONULL を使用します。 詳細については、「CDaoFieldExchange::m_nOperation」を 参照してください。
Note
Edit または AddNew を呼び出した後にのみ、このメンバー関数を呼び出します。
関数の最初の引数に NULL を使用すると、パラメーター フィールドではなくCDaoFieldExchange
フィールドにのみ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
フィールドの内容の値を含む文字列へのポインター。
解説
DoFieldExchange メカニズムを使用して列を静的にバインドするのではなく、実行時にフィールドを動的にバインドするには、GetFieldValue を使用SetFieldValue
します。
UNICODE レコードセットを作成しない場合は、パラメーターを含COleVariant
まない形式SetFieldValue
を使用するか、オブジェクトを COleVariant
ANSI で明示的に宣言する必要があります。 これを行うには、vtSrc を (ANSI) に設定VT_BSTRT
したコンストラクターの COleVariant::COleVariant(lpszSrc,vtSrc) 形式を使用するか、関数 SetString(lpszSrc,vtSrc) を vtSrc に設定してVT_BSTRT
使用COleVariant
します。
関連情報については、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
すとすぐにロックされます。 ページは、またはメンバー関数または Close
Move 操作または Find 操作を呼び出Update
すとロック解除されます。
オプティミスティック ロックが有効な場合、レコードを含む 2K ページは、レコードがメンバー関数で Update
更新されている間のみロックされます。
ページがロックされている場合、他のユーザーは同じページのレコードを編集できません。 0 以外の値を呼び出 SetLockingMode
して渡し、別のユーザーが既にページをロックしている場合は、呼び出 Edit
すときに例外がスローされます。 他のユーザーは、ロックされたページからデータを読み取ることができます。
ページが別のユーザーによってロックされている間に 0 個の値を指定して呼び出し、後で呼び出SetLockingMode
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 として宣言する必要があります。 これを行うには、vtSrc を (ANSI) に設定VT_BSTRT
したコンストラクターの COleVariant::COleVariant(lpszSrc,vtSrc) 形式を使用するか、関数 SetString(lpszSrc,vtSrc) を vtSrc に設定してVT_BSTRT
使用COleVariant
します。
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
すと、その値に対応するおおよその位置にあるレコードが現在の位置になります。
関連情報については、DAO ヘルプの「PercentPosition プロパティ」を参照してください。
CDaoRecordset::Update
or Edit
メンバー関数の呼び出し後に、このメンバー関数をAddNew
呼び出します。
virtual void Update();
解説
この呼び出しは、またはEdit
操作をAddNew
完了するために必要です。
また AddNew
、 Edit
データ ソースに保存するために追加または編集されたデータを配置する編集バッファーを準備します。 Update
はデータを保存します。 変更済みとしてマークまたは検出されたフィールドのみが更新されます。
データ ソースがトランザクションをサポートしている場合は、トランザクションの Update
呼び出し (およびその対応する AddNew
呼 Edit
び出し) の一部を行うことができます。
注意事項
最初にいずれかの呼び出しを行わずに呼び出Update
すとEdit
AddNew
、 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 クラス
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示