次の方法で共有


CDaoRecordset::Edit

更新 : 2007 年 11 月

現在のレコードを変更できるようにします。

virtual void Edit( );

解説

一度 Edit メンバ関数を呼び出すと、現在のレコードのフィールドに対して行われた変更は、コピー バッファにコピーされます。レコードを変更した後、変更を保存するために Update を呼び出します。Edit は、レコードセットのデータ メンバの値を保存します。Edit を呼び出し、変更して再度 Edit を呼び出すと、レコードの値は最初の Edit の呼び出しの前の値に戻ります。

h1x2k51d.alert_caution(ja-jp,VS.90).gif注意 :

レコードを編集し、その後 Update を呼び出さずに、他のレコードに移動する操作を行うと、警告なしでその変更は失われます。さらに、レコードセットまたは親のデータベースを閉じると、編集されたレコードは警告なしで破棄されます。

列を Null (データを持たない状態) にすることによって更新する場合もあります。Null に更新するには、フィールドを Null としてマークするため、パラメータに TRUE を渡して SetFieldNull を呼び出します。これは、列の更新も行います。値が変更されていなくても、フィールドをデータ ソースに書き込むようにする場合は、パラメータに TRUE を渡して SetFieldDirty を呼び出します。この処理は、フィールドの値が Null の場合でも機能します。

フレームワークは変更されたフィールド データ メンバをマークし、DAO レコード フィールド エクスチェンジ (DFX) 機構がデータ ソースのレコードに書き込むようにします。フィールドの値を変更すると、通常、そのフィールドは自動的にダーティに設定されます。したがって、SetFieldDirty を手動で呼び出す必要はほとんどありません。ただし、フィールド データ メンバの値にかかわらず、列を明示的に更新または挿入する必要がある場合は、この関数を使用します。DFX 機構では PSEUDONULL も使用できます。詳細については、「CDaoFieldExchange::m_nOperation」を参照してください。

ダブル バッファリング機構が使用されていない場合、フィールドの値が変更されても、自動的にダーティとして設定されません。この場合、明示的にそのフィールドをダーティに設定する必要があります。フィールドの自動チェックは、m_bCheckCacheForDirtyFields が保持するフラグによって制御されます。

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

h1x2k51d.alert_note(ja-jp,VS.90).gifメモ :

ODBC やインストールできる ISAM など、外部データベース形式では常に共有ロックが使用されます。

現在のレコードは、Edit 呼び出しの後でも現在のレコードのままです。Edit を呼び出すには、現在のレコードが存在する必要があります。現在のレコードがないか、レコードセットがテーブル タイプのレコードセット オブジェクト、またはダイナセット タイプのレコードセット オブジェクトを参照していないと、例外がスローされます。次の状態で Edit を呼び出すと、CDaoException がスローされます。

  • 現在のレコードはありません。

  • データベース、またはレコードセットが読み込み専用である。

  • レコードに更新を許可するフィールドがない。

  • データベースまたはレコードセットがほかのユーザーにより、排他アクセスで開かれている。

  • ほかのユーザーが、レコードを含むページをロックしている。

データ ソースでトランザクションがサポートされている場合は、トランザクションの一部として Edit を呼び出すことができます。レコードセットが開かれた後、Edit を呼び出す前に、CDaoWorkspace::BeginTrans を呼び出す必要があることに注意してください。また、CDaoWorkspace::CommitTrans の呼び出しが、Edit 操作を完了するための Update 呼び出しの代わりにはならないことにも注意してください。トランザクションの詳細については、CDaoWorkspaceクラスを参照してください。

関連情報については、DAO ヘルプの「AddNew Method」、「Edit Method」、「Delete Method」、「Update Method」、および「Updatable Property」を参照してください。

必要条件

ヘッダー : afxdao.h

参照

参照

CDaoRecordset クラス

階層図

CDaoRecordset::AddNew

CDaoRecordset::CancelUpdate

CDaoRecordset::CanTransact

CDaoRecordset::Delete

CDaoRecordset::Update

その他の技術情報

CDaoRecordset のメンバ