JetUpdate2 関数
適用対象: Windows |Windows Server
JetUpdate2 関数
JetUpdate2 関数は、テーブルに新しい行を挿入したり、既存の行を更新したりする更新操作を実行します。 この関数には、更新の実行中に設定できる grbit オプションの一覧が含まれています。 テーブル行の削除は、 JetDelete を呼び出すことによって実行されます。
Windows Server 2003: JetUpdate2 は Windows Server 2003 で導入されています。
JetUpdate2 は、挿入または更新を実行する最後の手順です。 更新は、 JetPrepareUpdate を呼び出してから JetSetColumn または JetSetColumns を 1 回以上呼び出してレコードの状態を設定することによって開始されます。 最後に、 JetUpdate2 が呼び出され、更新操作が完了します。 インデックスは JetUpdate または JetUpdate2 によってのみ更新され、JetSetColumn または JetSetColumns の間は更新されません。
JET_ERR JET_API JetUpdate2(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__out_opt void* pvBookmark,
__in unsigned long cbBookmark,
__out_opt unsigned long* pcbActual,
__in const JET_GRBIT grbit
);
パラメーター
sesid
この呼び出しに使用するセッション。
tableid
この呼び出しに使用するカーソル。
pvBookmark
挿入された行に対して返されるブックマークへのポインター。
cbBookmark
pvBookmark が指すバッファーのサイズ。
pcbActual
pvBookmark で返される挿入行のブックマークの返されるサイズ。
grbit
この呼び出しに使用するオプションを含むビットのグループ。これには、次の 0 個以上が含まれます。
値 |
説明 |
---|---|
JET_bitUpdateCheckESE97Compatibility |
このフラグを設定すると、Windows 2000 バージョンの ESE で更新プログラムが実行できなかった場合にエラーが返されます。これにより、新しいバージョンの ESE よりも、各レコード内の複数値列インスタンスの最大数が小さくなります。 これは、Windows 2000 でホストされているアプリケーションと Windows Server 2003 以降のバージョンの ESE でホストされているアプリケーションの間でデータをレプリケートするアプリケーションでのみ重要です。 ほとんどのアプリケーションでは必要ありません。 |
戻り値
この関数は、次のいずれかの戻りコードを 使用して、JET_ERR データ型を返します。 考えられる ESE エラーの詳細については、「 拡張ストレージ エンジン エラー と エラー処理パラメーター」を参照してください。
リターン コード |
説明 |
---|---|
JET_errSuccess |
操作は正常に完了しました。 |
JET_errBufferTooSmall |
レコード ブックマークの指定されたバッファーは、レコード ブックマークを格納するのに十分な大きさではありません。 |
JET_errClientRequestToStopJetService |
JetStopService の呼び出しの結果、セッションに関連付けられたインスタンスのすべてのアクティビティが停止したため、操作を完了できません。 |
JET_errDiskFull |
更新操作では、データベース ファイルの増加、またはログ ファイルの割り当てが必要ですが、データベース ファイルまたはログ シリーズが存在するディスク ドライブがいっぱいです。 または、データベース ファイルが FAT32 形式のボリューム上にあり、データベース ファイルは FAT32 のファイルごとの制限である 4GBytes です。 |
JET_errInstanceUnavailable |
セッションに関連付けられているインスタンスで、そのデータの整合性を保護するためにすべてのデータへのアクセスを取り消す必要がある致命的なエラーが発生したため、操作を完了できません。 Windows XP: このエラーは、Windows XP 以降のリリースでのみ返されます。 |
JET_errInvalidParameter |
JetPrepareUpdate 関数の指定された prep パラメーターが有効なフラグではありません。 |
JET_errKeyDuplicate |
このレコードのインデックス キーは、テーブルに既に存在する別のレコードの別のインデックス キーの複製であり、インデックスでは重複が許可されません。 |
JET_errKeyTruncated |
挿入または更新されたレコードには、生成されたキーが許容される最大サイズを超えたインデックスが 1 つ以上含まれています。 その結果、操作はキーの切り捨てを防ぐのに失敗しました。 |
JET_errMultiValuedIndexViolation |
挿入または更新されたレコードには、インデックスに設定された最大長キー サイズ内で同じ 2 つ以上の値を持つインデックス付き複数値列があります。 その結果、レコードには無効な 2 つの同じエントリがインデックスに含まれます。 |
JET_errNotInitialized |
セッションに関連付けられているインスタンスがまだ初期化されていないため、操作を完了できません。 |
JET_errNullInvalid |
挿入するレコード内の 1 つ以上の列、または置き換えられるレコードの更新された状態の 1 つ以上の列が NULL であり、これらの列に対して定義された制約に違反します。 |
JET_errNullKeyDisallowed |
NULL キーを許可しない 1 つ以上のインデックスが定義されており、置き換えられるレコードの挿入または更新された状態がこの定義された制約に違反します。 |
JET_errRecordPrimaryChanged |
レコード置換操作によって主キーが更新されました。 主キー列への更新は、既存のレコードを削除し、目的のデータを含む新しいレコードを挿入することによって行う必要があります。 |
JET_errRestoreInProgress |
セッションに関連付けられているインスタンスで復元操作が進行中のため、操作を完了できません。 |
JET_errSessionSharingViolation |
同じセッションを複数のスレッドに同時に使用することはできません。 Windows XP: このエラーは、Windows XP 以降のリリースでのみ返されます。 |
JET_errTermInProgress |
セッションに関連付けられているインスタンスがシャットダウンされているため、操作を完了できません。 |
JET_errUpdateNotPrepared |
JetPrepareUpdate がJET_prepCancelで呼び出されましたが、カーソルが準備された状態にありません。 |
JET_errWriteConflict |
書き込みロックがまだ割り当てられなかったレコード置換操作では、更新時に書き込み競合が発生する可能性があります。 |
成功すると、カーソルに対するオープン更新操作が完了します。 テーブルに対して自動インクリメント列が定義されている場合、この値は挿入されたレコードに対して設定されます。 テーブルにバージョン列が定義されている場合、その値は新しく挿入されたレコードに対して初期化されるか、レコードが置き換えられるたびにインクリメントされます。 クラスター化インデックスと非クラスター化インデックスを含むすべてのインデックスが更新されます。
障害が発生した場合、データベースに対してどのような種類の変更も行われません。 挿入前と置換前のコールバック関数が呼び出されている可能性がありますが、挿入後と置換後のコールバックは呼び出されません。後者では更新が失敗しないためです。 カーソル コピー バッファーは準備された状態のままであるため、エラーの原因となった問題を段階的に修正し、更新操作を再試行する機会が存在します。
解説
レコード サイズの制限は 、JetSetColumn によって適用され、一般的には JetUpdate では適用されません。 唯一の例外は、JET_bitUpdateCheckESE97Compatibility互換性フラグが使用されている場合です。 この場合、制限を超えた個々の JetSetColumn 操作が JetSetColumn への 後続の呼び出しによって補正される可能性があるため、レコード全体 がチェックされます。
詳細については、 JetUpdate の「解説」セクションを参照してください。
必要条件
要件 | 値 |
---|---|
Client |
Windows Vista が必要です。 |
[サーバー] |
Windows Server 2008 または Windows Server 2003 が必要です。 |
Header |
Esent.h で宣言されています。 |
Library |
ESENT.lib を使用します。 |
[DLL] |
ESENT.dllが必要です。 |
参照
JET_ERR
JET_SESID
JET_TABLEID
JetDelete
JetPrepareUpdate
JetRegisterCallback
JetRetrieveColumn
JetRetrieveColumns
JetSetColumn
JetSetColumns