次の方法で共有


JetPrepareUpdate 関数

適用対象: Windows |Windows Server

JetPrepareUpdate 関数

JetPrepareUpdate 関数は、新しいレコードを挿入したり、既存のレコードを新しい値に置き換えたりするために、更新を実行する最初の操作です。 更新は、JetPrepareUpdate を呼び出し、JetSetColumn または JetSetColumns を 0 回以上呼び出し、最後に JetUpdate を呼び出して操作を完了することによって行われます。 JetPrepareUpdateJetUpdate は更新操作の境界を設定し、インデックスに入力されたレコードの最終更新状態のみを保持する場合に重要です。 これはどちらもより効率的ですが、設定された列操作よりも有効な状態とデータが一致する必要がある場合にも必要です。

レコードの挿入または置換にはいくつかの異なるオプションがあり、以下で詳しく説明します。

    JET_ERR JET_API JetPrepareUpdate(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in          unsigned long prep
    );

パラメーター

sesid

この呼び出しに使用するセッション。

tableid

この呼び出しに使用するカーソル。

準備

更新プログラムの準備に使用できるオプションには、次のものが含まれます。

説明

JET_prepCancel

このフラグにより、 JetPrepareUpdate はこのカーソルの更新を取り消します。

JET_prepInsert

このフラグにより、カーソルは新しいレコードの挿入を準備します。 すべてのデータは、レコードの既定の状態に初期化されます。 テーブルに自動インクリメント列がある場合、更新が最終的に成功したか、失敗したか、取り消されたかに関係なく、このレコードに新しい値が割り当てられます。

JET_prepInsertCopy

このフラグにより、カーソルは既存のレコードのコピーの挿入を準備します。 このオプションを使用する場合は、現在のレコードが存在する必要があります。 新しいレコードの初期状態は、現在のレコードからコピーされます。 レコード外に格納されている長い値は、事実上コピーされます。

JET_prepInsertCopyDeleteOriginal

このフラグにより、カーソルは同じレコードの挿入、および削除または元のレコードの挿入を準備します。 主キーが変更された場合に使用されます。

JET_prepReplace

このフラグにより、カーソルは現在のレコードの置き換えを準備します。 テーブルにバージョン列がある場合、バージョン列はそのシーケンスの次の値に設定されます。 この更新が完了しない場合、レコードのバージョン値は影響を受けません。 このセッションが完了する前に他のセッションがこのレコードを更新しないように、レコードに対して更新ロックが行われます。

JET_prepReplaceNoLock

このフラグはJET_prepReplaceに似ていますが、他のセッションがこのレコードを更新できないようにするためのロックは行われません。 代わりに、このセッションは JetUpdate を 呼び出して更新を完了したときにJET_errWriteConflictを受け取る場合があります。

戻り値

この関数は、次のいずれかの戻りコードを 使用して、JET_ERR データ型を返します。 考えられる ESE エラーの詳細については、「 拡張ストレージ エンジン エラーエラー処理パラメーター」を参照してください。

リターン コード

説明

JET_errSuccess

操作は正常に完了しました。

JET_errAlreadyPrepared

JetPrepareUpdate は準備に有効なフラグを指定して呼び出されましたが、JET_prepCancelではなく、カーソルは既に準備済みの状態でした。

JET_errClientRequestToStopJetService

JetStopService の呼び出しの結果、セッションに関連付けられたインスタンスのすべてのアクティビティが停止したため、操作を完了できません。

JET_errInstanceUnavailable

セッションに関連付けられているインスタンスで、そのデータの整合性を保護するためにすべてのデータへのアクセスを取り消す必要がある致命的なエラーが発生したため、操作を完了できません。 このエラーは、Windows XP 以降のリリースでのみ返されます。

JET_errInvalidParameter

指定された準備フラグが有効なフラグではありません。

JET_errNotInitialized

セッションに関連付けられているインスタンスがまだ初期化されていないため、操作を完了できません。

JET_errNotInTransaction

SLV 列を含むレコードを置き換えるために、JetPrepareUpdate が呼び出されました。 SLV 列。 SLV 列は一般的な使用を目的とした機能ではないことに注意してください。 この機能は、Microsoft Exchange インフラストラクチャをサポートするために使用され、アプリケーションで使用することを意図したものではありません。

JET_errRestoreInProgress

セッションに関連付けられているインスタンスで復元操作が進行中のため、操作を完了できません。

JET_errRollbackError

JetPrepareUpdate はJET_prepCancelで呼び出されましたが、JET_coltypLongText型の列や型JET_coltypLongBinaryの列に加えられたすべての変更をロールバックできませんでした。

JET_errSessionSharingViolation

このフラグは、複数のスレッドから同時に同じセッションで使用することはできません。 このエラーは、Windows XP 以降のリリースでのみ返されます。

JET_errTermInProgress

セッションに関連付けられているインスタンスがシャットダウンされているため、操作を完了できません。

JET_errUpdateNotPrepared

JetPrepareUpdate がJET_prepCancelで呼び出されましたが、カーソルが準備された状態にありません。

成功すると、カーソルは目的の更新のために準備された状態に変更されます。または、JET_prepCancelの場合、カーソルは準備されていない状態に戻され、変更はすべて破棄されます。

失敗した場合、カーソルの状態は変更されません。 エラーがJET_errRollbackErrorされた場合、カーソルの状態は準備されていない状態に変更されますが、すべての変更が元に戻されたわけではありません。

注釈

レコードのコピーを挿入することは、レコードがJET_coltypLongText型やJET_coltypLongBinaryのデータを共有する場合に重要な最適化です。 このデータは、大きい場合はレコード外に格納され、複数のレコードで同じ物理的なデータ表現を共有できます。 この場合、いずれかのレコードからデータを更新できますが、その場合、各レコードに独自のコピーが含まれるようにデータがバーストされます。 別のレコードからの変更によって、あるレコードのデータを変更することはできません。 また、別のレコードの更新によって 1 つのレコードの更新をブロックすることはできません。 これは ESE の中心的な機能であり、レコード レベル ロックと呼ばれます。

JetUpdate 操作が失敗すると、カーソルは更新準備済み状態になります。 これは、更新状態の再作成を必要とせずに、間違った列値などの一部のエラーを修正できるようにするためです。 つまり、カーソルが更新を破棄するすべての場合は、JET_prepCancelを使用して JetPrepareUpdate を明示的に呼び出す必要があります。

要件

要件

Client

Windows Vista、Windows XP、または Windows 2000 Professional が必要です。

[サーバー]

Windows Server 2008、Windows Server 2003、または Windows 2000 Server が必要です。

Header

Esent.h で宣言されています。

Library

ESENT.lib を使用します。

[DLL]

ESENT.dllが必要です。

参照

JET_ERR
JET_SESID
JET_TABLEID
JetRetrieveColumn
JetSetColumn
JetUpdate