次の方法で共有


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 オブジェクト」を参照してください。

継承階層

CObject

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。

解説

dbForwardOnlyOpen を呼び出す場合、レコードセットは前方にスクロールすることしかできません。

関連情報については、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();

解説

CloseCDaoRecordset オブジェクトを破棄しないため、同じデータ ソースまたは別のデータ ソースでOpenを呼び出すことによって、オブジェクトを再利用できます。

保留中のすべての AddNew または Edit ステートメントが取り消され、保留中のすべてのトランザクションがロールバックされます。 保留中の追加または編集を保持する場合は、レコードセットごとにCloseを呼び出す前にUpdateを呼び出します。

Closeを呼び出した後、Openをもう一度呼び出すことができます。 これにより、レコードセット オブジェクトを再利用できます。 可能であれば、 Requery を呼び出す方が適切な方法です。

関連情報については、DAO ヘルプの「Close メソッド」を参照してください。

CDaoRecordset::D elete

このメンバー関数を呼び出して、開いているダイナセット タイプまたはテーブル タイプのレコードセット オブジェクトの現在のレコードを削除します。

virtual void Delete();

解説

削除が成功した後、レコードセットのフィールド データ メンバーは Null 値に設定され、削除されたレコードから移動するには、レコードセット ナビゲーション メンバー関数 ( MoveSeekSetBookmark など) のいずれかを明示的に呼び出す必要があります。 レコードセットからレコードを削除する場合は、 Deleteを呼び出す前にレコードセットに現在のレコードが存在する必要があります。それ以外の場合、MFC は例外をスローします。

Delete は現在のレコードを削除し、アクセスできないようにします。 削除されたレコードは編集または使用できませんが、最新の状態のままです。 ただし、別のレコードに移動すると、削除されたレコードを再び最新の状態にすることはできません。

注意事項

レコードセットは更新可能で、 Deleteを呼び出すときにレコードセット内に有効なレコードが存在する必要があります。 たとえば、レコードを削除しても、 Delete を再度呼び出す前に新しいレコードまでスクロールしない場合、 DeleteCDaoException をスローします。

トランザクションを使用し、 CDaoWorkspace::Rollback メンバー関数を呼び出すと、レコードの削除を取り消すことができます。 ベース テーブルが連鎖削除リレーションシップのプライマリ テーブルである場合、現在のレコードを削除すると、外部テーブル内の 1 つ以上のレコードが削除される場合もあります。 詳細については、DAO ヘルプの「連鎖削除」の定義を参照してください。

AddNewEditとは異なり、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 は仮想関数であるため、オーバーライドして独自の実装を追加できます。 FindFirstFindLastFindNext、および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 メカニズムを使用して列を静的にバインドするのではなく、実行時にフィールドを動的にバインドします。

GetFieldValueDoFieldExchange メカニズムを組み合わせてパフォーマンスを向上させることができます。 たとえば、 GetFieldValue を使用してオンデマンドでのみ必要な値を取得し、その呼び出しをインターフェイスの [詳細情報] ボタンに割り当てます。

関連情報については、DAO ヘルプの「フィールド オブジェクト」および「値プロパティ」のトピックを参照してください。

CDaoRecordset::GetIndexCount

このメンバー関数を呼び出して、テーブル型レコードセットで使用できるインデックスの数を決定します。

short GetIndexCount();

戻り値

テーブル型レコードセット内のインデックスの数。

解説

GetIndexCount は、レコードセット内のすべてのインデックスをループ処理する場合に便利です。 そのためには、GetIndexInfoGetIndexCountを使用します。 ダイナセットタイプまたはスナップショットタイプのレコードセットでこのメンバー関数を呼び出すと、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、Foreign

  • AFX_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。

解説

IsBOFIsEOFと共に呼び出して、レコードセットにレコードが含まれているか空であるかを判断することもできます。 Openを呼び出した直後に、レコードセットにレコードが含まれている場合、IsBOFは 0 以外の値を返します。 少なくとも 1 つのレコードを含むレコードセットを開くと、最初のレコードが現在のレコードになり、 IsBOF 0 が返されます。

最初のレコードが現在のレコードで、 MovePrevを呼び出すと、 IsBOF は 0 以外の値を返します。 IsBOFが 0 以外の値を返し、MovePrevを呼び出すと、例外がスローされます。 IsBOFが 0 以外の値を返した場合、現在のレコードは未定義になり、現在のレコードを必要とするアクションは例外になります。

特定のメソッドが IsBOFIsEOF の設定に及ぼす影響:

  • Open*を内部的に呼び出すと、レコードセット内の最初のレコードが現在のレコードMoveFirst呼び出されます。 そのため、空のレコード セットに対して Open を呼び出すと、 IsBOFIsEOF が 0 以外の値を返します。 (失敗した MoveFirst または MoveLast 呼び出しの動作については、次の表を参照してください)。

  • レコードを正常に見つけるすべての Move 操作により、 IsBOFIsEOF の両方が 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メンバー関数の値は、移動の試行の結果として変更される可能性があります。

レコードが見つからない移動操作が IsBOFIsEOF の設定の値に及ぼす影響を次の表に示します。

操作 IsBOF IsEOF
MoveFirst, MoveLast Nonzero Nonzero
Move 0 変更なし 変更なし
MovePrevMove< 0 Nonzero 変更なし
MoveNextMove> 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 以外の値を返した場合、現在のレコードは未定義になり、現在のレコードを必要とするアクションは例外になります。

特定のメソッドが IsBOFIsEOF の設定に及ぼす影響:

  • Openを内部的に呼び出すと、レコードセット内の最初のレコードが現在のレコードMoveFirst呼び出されます。 そのため、空のレコード セットに対して Open を呼び出すと、 IsBOFIsEOF が 0 以外の値を返します。 (失敗した MoveFirst 呼び出しの動作については、次の表を参照してください)。

  • レコードを正常に見つけるすべての Move 操作により、 IsBOFIsEOF の両方が 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 の試行の結果として変更される可能性があります。

レコードが見つからない移動操作が IsBOFIsEOF の設定の値に及ぼす影響を次の表に示します。

操作 IsBOF IsEOF
MoveFirst, MoveLast Nonzero Nonzero
Move 0 変更なし 変更なし
MovePrevMove< 0 Nonzero 変更なし
MoveNextMove> 0 変更なし Nonzero

関連情報については、DAO ヘルプのトピック「BOF、EOF プロパティ」を参照してください。

CDaoRecordset::IsFieldDirty

このメンバー関数を呼び出して、ダイナセットの指定されたフィールド データ メンバーに "ダーティ" (変更) のフラグが設定されているかどうかを確認します。

BOOL IsFieldDirty(void* pv);

パラメーター

pv
状態を確認するフィールド データ メンバーへのポインター。または、いずれかのフィールドがダーティかどうかを判断する NULL。

戻り値

指定されたフィールド データ メンバーがダーティとしてフラグが設定されている場合は 0 以外。それ以外の場合は 0。

解説

現在のレコードが (Edit または AddNew の呼び出しの後に) CDaoRecordsetUpdateメンバー関数の呼び出しによって更新されると、すべてのダーティ フィールド データ メンバーのデータがデータ ソースのレコードに転送されます。 この知識があれば、データ ソースに書き込まれないようにフィールド データ メンバーのフラグを解除して列をマークするなど、さらに手順を実行できます。

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::outputColumnSetFieldTypeを呼び出した後にDoFieldExchangeに登録された出力列の数に対応している必要があります。

CDaoRecordset::GetFieldValueCDaoRecordset::SetFieldValueを使用して、列を動的にバインドできます。 その場合、DoFieldExchange メンバー関数内の DFX 関数呼び出しの数を反映するために、m_nFieldsでカウントをインクリメントする必要はありません。

CDaoRecordset::m_nParams

レコードセット クラス内のパラメーター データ メンバーの数 (レコードセットのクエリで渡されたパラメーターの数) を格納します。

解説

レコードセット クラスにパラメーター データ メンバーがある場合、クラスのコンストラクターは正しい数値で m_nParams 初期化する必要があります。 m_nParamsの値の既定値は 0 です。 パラメーター データ メンバーを追加する場合 (手動で行う必要があります)、パラメーターの数を反映するために、クラス コンストラクターに初期化を手動で追加する必要もあります ( m_strFilter または m_strSort 文字列内の '' プレースホルダーの数以上である必要があります)。

フレームワークは、レコードセットのクエリをパラメーター化するときにこの数を使用します。

Note

この数は、パラメーター CFieldExchange::paramSetFieldTypeを呼び出した後にDoFieldExchangeに登録された "params" の数に対応している必要があります。

関連情報については、DAO ヘルプのトピック「パラメーター オブジェクト」を参照してください。

CDaoRecordset::m_pDAORecordset

CDaoRecordset オブジェクトの基になる DAO レコードセット オブジェクトの OLE インターフェイスへのポインターを格納します。

解説

DAO インターフェイスに直接アクセスする必要がある場合は、このポインターを使用します。

関連情報については、DAO ヘルプの「Recordset オブジェクト」を参照してください。

CDaoRecordset::m_pDatabase

レコードセットがデータ ソースに接続されている CDaoDatabase オブジェクトへのポインターを格納します。

解説

この変数は 2 つの方法で設定されます。 通常は、レコードセット オブジェクトを構築するときに、既に開いている CDaoDatabase オブジェクトへのポインターを渡します。 代わりに NULL を渡 CDaoRecordsetCDaoDatabase オブジェクトを作成して開きます。 どちらの場合も、 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 関数のいずれかを呼び出すと例外がスローされます。 一般に、移動操作の前に IsBOFIsEOF の両方を呼び出して、レコードセットにレコードがあるかどうかを判断します。 OpenまたはRequeryを呼び出した後、IsBOFまたはIsEOFを呼び出します。

Note

レコードセットの先頭または末尾を超えてスクロールした場合 ( IsBOF または IsEOF は 0 以外の値を返します)、 Move の呼び出しは CDaoExceptionをスローします。

Note

現在のレコードの更新または追加中に Move 関数のいずれかを呼び出すと、更新は警告なしで失われます。

前方スクロール スナップショットで Move を呼び出す場合、 lRows パラメーターは正の整数である必要があり、ブックマークは許可されないため、前に進むだけです。

レコードセット内の最初、最後、次、または前のレコードを現在のレコードにするには、 MoveFirstMoveLastMoveNext、または MovePrev メンバー関数を呼び出します。

関連情報については、DAO ヘルプの「Move メソッド」および「MoveFirst、MoveLast、MoveNext、MovePrevious メソッド」のトピックを参照してください。

CDaoRecordset::MoveFirst

このメンバー関数を呼び出して、レコードセット内の最初のレコード (存在する場合) を現在のレコードにします。

void MoveFirst();

解説

レコードセットを開いた直後に MoveFirst を呼び出す必要はありません。 その時点で、最初のレコード (存在する場合) は自動的に現在のレコードになります。

注意事項

レコードセットにレコードがない場合、 Move 関数のいずれかを呼び出すと例外がスローされます。 一般に、移動操作の前に IsBOFIsEOF の両方を呼び出して、レコードセットにレコードがあるかどうかを判断します。 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 関数のいずれかを呼び出すと例外がスローされます。 一般に、移動操作の前に IsBOFIsEOF の両方を呼び出して、レコードセットにレコードがあるかどうかを判断します。 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 関数のいずれかを呼び出すと例外がスローされます。 一般に、移動操作の前に IsBOFIsEOF の両方を呼び出して、レコードセットにレコードがあるかどうかを判断します。 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 関数のいずれかを呼び出すと例外がスローされます。 一般に、移動操作の前に IsBOFIsEOF の両方を呼び出して、レコードセットにレコードがあるかどうかを判断します。 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

定数 dbConsistentdbInconsistent は相互に排他的です。 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_strFilterm_strSortを設定して並べ替えます。 Requeryを呼び出す前に、パラメーター データ メンバーに新しい値を割り当てることで、新しいパラメーターを設定します。

レコードセットの再構築が失敗した場合、レコードセットは閉じられます。 Requeryを呼び出す前に、CanRestart メンバー関数を呼び出してレコードセットを再クエリできるかどうかを判断できます。 CanRestart は、 Requery が成功することを保証しません。

注意事項

Openを呼び出した後でのみ、Requeryを呼び出します。

Note

Requeryを呼び出すと、DAO ブックマークが変更されます。

CanRestartを呼び出すと 0 が返される場合、ダイナセットタイプまたはスナップショットタイプのレコードセットでRequeryを呼び出すことはできません。また、テーブルタイプのレコードセットで使用することもできません。

Requeryを呼び出した後、IsBOFIsEOFの両方が 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 データ ソースには、ローカル キャッシュを使用できます。 キャッシュを作成するには、リモート データ ソースからレコードセット オブジェクトを開き、 SetCacheSizeSetCacheStart メンバー関数を呼び出してから、 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 データベース エンジンは、キャッシュ範囲内のレコードをキャッシュから要求し、サーバーからキャッシュ範囲外のレコードを要求します。

キャッシュから取得されたレコードには、他のユーザーによってソース データに同時に行われた変更は反映されません。

キャッシュされたすべてのデータを強制的に更新するには、SetCacheSizelSize パラメーターを 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に含まれるフラグは、この自動フィールド チェックを制御します。

Note

このメンバー関数は、 Edit または AddNew を呼び出した後にのみ呼び出します。

関数の最初の引数に 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」を参照してください。

Note

このメンバー関数は、 Edit または AddNew を呼び出した後にのみ呼び出します。

関数の最初の引数に 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
フィールドの内容の値を含む文字列へのポインター。

解説

SetFieldValueGetFieldValue を使用して、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 操作を完了するために必要です。

AddNewEditの両方で、追加または編集されたデータをデータ ソースに保存するために配置する編集バッファーを準備します。 Update はデータを保存します。 変更済みとしてマークまたは検出されたフィールドのみが更新されます。

データ ソースがトランザクションをサポートしている場合は、トランザクションの Update 呼び出し (およびその対応する AddNew または Edit 呼び出し) を行うことができます。

注意事項

AddNewまたはEditを最初に呼び出さずにUpdateを呼び出すと、UpdateCDaoExceptionをスローします。 AddNewまたはEditを呼び出す場合は、MoveNext を呼び出す前にUpdateを呼び出すかレコードセットまたはデータ ソース接続を閉じる必要があります。 それ以外の場合、変更は通知なしで失われます。

レコードセット オブジェクトがマルチユーザー環境で悲観的にロックされている場合、レコードは更新が完了するまで Edit 使用された時点からロックされたままになります。 レコードセットが楽観的にロックされている場合、レコードはロックされ、データベースで更新される直前に事前に編集されたレコードと比較されます。 Editを呼び出してからレコードが変更された場合、Update操作は失敗し、MFC は例外をスローします。 ロック モードは、 SetLockingModeで変更できます。

Note

オプティミスティック ロックは、ODBC やインストール可能な ISAM などの外部データベース形式で常に使用されます。

関連情報については、DAO ヘルプの「AddNew メソッド」、「CancelUpdate メソッド」、「Delete メソッド」、「LastModified プロパティ」、「Update メソッド」、「EditMode プロパティ」の各トピックを参照してください。

関連項目

CObject クラス
階層図
CDaoTableDef クラス
CDaoWorkspace クラス
CDaoDatabase クラス
CDaoQueryDef クラス