CDaoRecordset::AddNew
更新 : 2007 年 11 月
テーブル タイプのレコードセット、またはダイナセット タイプのレコードセットに新しいレコードを追加します。
virtual void AddNew( );
解説
レコードのフィールドは、初期状態では Null になります。(C++ での NULL とは異なり、データベースの専門用語では、NULL は "値を持たない" ことを意味します。)追加操作を完了するには Update メンバ関数を呼び出します。Update は、データ ソースに変更内容を保存します。
注意 : |
---|
レコードを編集し、Update を呼び出さずに他のレコードにスクロールすると、その変更は失われ、警告もされません。 |
AddNew を呼び出して、ダイナセット タイプのレコードセットにレコードを追加すると、レコードはレコードセットで参照できるようになり、基になるテーブルに追加され、新しい CDaoRecordset オブジェクトでも参照できるようになります。
新しいレコードの位置は、レコードセットの型に依存します。
ダイナセット タイプのレコードセットでは、新しいレコードの挿入位置が保証されません。Microsoft Jet 3.0 では、パフォーマンスと並列処理を考慮して、この動作が変更されています。新しく追加したレコードを現在のレコードにするには、最後に変更したレコードのブックマークを取得し、このブックマーク位置に移動します。
rs.SetBookmark(rs.GetLastModifiedBookmark());
インデックスが指定されているテーブル タイプのレコードセットでは、レコードは並べ替え順序で適切な位置に挿入されます。インデックスが指定されていないときは、新しいレコードは、レコードセットの最後に追加されます。
AddNew が呼び出される前に現在のレコードだったレコードは、現在のレコードのままです。新しいレコードを現在のレコードとするとき、およびレコードセットがブックマークをサポートしているときは、基になる DAO レコードセット オブジェクトの LastModified プロパティの設定で示されるブックマークに対して、SetBookmark を呼び出します。この関数を呼び出すことは、追加されたレコードの中のカウンタ (自動インクリメント) フィールドの値を調べるのに有用です。詳細については、「CDaoRecordset::GetLastModifiedBookmark」を参照してください。
データベースがトランザクションをサポートしていると、トランザクションの一部として AddNew を呼び出すことができます。ドランザクションの詳細については、「CDaoWorkspace クラス」クラスを参照してください。AddNew を呼び出す前に、CDaoWorkspace::BeginTrans を呼び出します。
Open メンバ関数を呼び出していないレコードセットに対して、AddNew を呼び出すことは不正です。追加できないレコードセットに対して AddNew を呼び出すと、CDaoException がスローされます。CanAppend を呼び出して、レコードセットが更新できるかどうかを調べることができます。
フレームワークは変更されたフィールド データ メンバをマークし、DAO レコード フィールド エクスチェンジ (DFX) 機構がデータ ソースのレコードに書き込むようにします。フィールドの値を変更すると、通常、そのフィールドは自動的にダーティに設定されます。したがって、SetFieldDirty を手動で呼び出す必要はほとんどありません。ただし、フィールド データ メンバの値にかかわらず、列を明示的に更新または挿入する必要がある場合は、この関数を使用します。DFX 機構では PSEUDONULL も使用できます。詳細については、「CDaoFieldExchange::m_nOperation」を参照してください。
ダブル バッファリング機構が使用されていない場合、フィールドの値が変更されても、自動的にダーティとして設定されません。この場合、明示的にそのフィールドをダーティに設定する必要があります。フィールドの自動チェックは、m_bCheckCacheForDirtyFields が保持するフラグによって制御されます。
メモ : |
---|
レコードがダブルバッファ化されていると (つまり、自動フィールド チェックが有効であると)、CancelUpdate の呼び出しは、メンバ変数を AddNew または Edit が呼び出される前の値に戻します。 |
関連情報については、DAO ヘルプの「AddNew Method」、「CancelUpdate Method」、「LastModified Property」、および「EditMode Property」を参照してください。
必要条件
ヘッダー : afxdao.h