JetUpdate 関数
適用対象: Windows |Windows Server
JetUpdate 関数
JetUpdate 関数は、テーブルに新しい行を挿入したり、既存の行を更新したりする更新操作を実行します。 テーブル行の削除は、 JetDelete を呼び出すことによって実行されます。
JetUpdate は、挿入または更新を実行する最後の手順です。 更新は、 JetPrepareUpdate を呼び出し、 JetSetColumn または JetSetColumns を 1 回以上呼び出してレコードの状態を設定することによって開始されます。 最後に、更新操作を完了するために JetUpdate が呼び出されます。 インデックスは JetUpdate または JetUpdate2 によってのみ更新され、JetSetColumn または JetSetColumns の間は更新されません。
JET_ERR JET_API JetUpdate(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__out_opt void* pvBookmark,
__in unsigned long cbBookmark,
__out_opt unsigned long* pcbActual
);
パラメーター
sesid
この呼び出しに使用するセッション。
tableid
この呼び出しに使用するカーソル。
pvBookmark
挿入された行の返されたブックマークへのポインター。
cbBookmark
pvBookmark が指すバッファーのサイズ。
pcbActual
pvBookmark で返される挿入行のブックマークの返されるサイズ。
戻り値
この関数は、次のいずれかのリターン コードを使用して 、JET_ERR データ型を返します。 考えられる ESE エラーの詳細については、「 拡張可能ストレージ エンジン エラー 」および「 エラー処理パラメーター」を参照してください。
リターン コード |
説明 |
---|---|
JET_errSuccess |
操作は正常に完了しました。 |
JET_errBufferTooSmall |
レコード ブックマークの指定されたバッファーが、レコード ブックマークを格納するのに十分な大きさではありません。 |
JET_errClientRequestToStopJetService |
JetStopService の呼び出しの結果、セッションに関連付けられたインスタンス上のすべてのアクティビティが停止したため、操作を完了することはできません。 |
JET_errColumnIllegalNull |
JET_errNullInvalidと同じです。 |
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 つ以上の列、または置き換えられるレコードの更新された状態にある列は NULL であり、これらの列に対して定義された制約に違反します。 |
JET_errNullKeyDisallowed |
NULL キーを許可しないように 1 つ以上のインデックスが定義されており、置き換えられるレコードの挿入または更新された状態がこの定義された制約に違反します。 |
JET_errRecordPrimaryChanged |
レコードの置換操作によって主キーが更新されました。 主キー列への更新は、既存のレコードを削除し、目的のデータを含む新しいレコードを挿入することによって行う必要があります。 |
JET_errRestoreInProgress |
セッションに関連付けられているインスタンスで復元操作が進行中であるため、操作を完了できません。 |
JET_errSessionSharingViolation |
同じセッションを複数のスレッドに同時に使用することはできません。 Windows XP: このエラーは、Windows XP 以降のリリースでのみ返されます。 |
JET_errTermInProgress |
セッションに関連付けられているインスタンスがシャットダウンされているため、操作を完了できません。 |
JET_errTransReadOnly |
読み取り専用トランザクションのスコープ内で更新を試みるのは無効です。 読み取り専用トランザクションとは、 jetBeginTransaction2 の呼び出しとJET_bitTransactionReadOnlyを使用して開始されたトランザクションです。 Windows XP: このエラーは、Windows XP 以降のリリースでのみ返されます。 |
JET_errUpdateNotPrepared |
JetPrepareUpdate は、JET_prepCancelで呼び出されましたが、カーソルは準備された状態ではありません。 |
JET_errVersionStoreOutOfMemory |
更新に関するトランザクション情報を保持するのに十分なメモリがないため、操作が失敗しました。 |
JET_errWriteConflict |
別のセッションでは、更新のためにレコードが以前にロックされています。 このセッションによって試行された更新は失敗します。 |
成功すると、カーソルで開いている更新操作が完了します。 テーブルに対して自動インクリメント列が定義されている場合、この値は挿入されたレコードに設定されます。 テーブルにバージョン列が定義されている場合、その値は新しく挿入されたレコードに対して初期化されるか、レコードが置き換えられるたびにインクリメントされます。 クラスター化インデックスと非クラスター化インデックスを含むすべてのインデックスが更新されます。
障害が発生した場合、データベースに対する変更は行われません。 挿入前と置換前のコールバック関数が呼び出されている可能性がありますが、挿入後と置換後のコールバックは呼び出されません。後者では更新が失敗しないためです。 カーソル コピー バッファーは準備された状態のままであるため、エラーの原因となった問題を段階的に修正し、更新操作を再試行する機会が存在します。
解説
コールバック関数は、挿入前または挿入後、および更新前または更新後に呼び出されるように登録できます。
レコード サイズの制限は JetSetColumn によって適用され、 JetUpdate では一般的に適用されません。
1 つのトランザクション内で多数の更新操作を実行した場合の影響を理解することが重要です。 データベースに対する各更新は、バージョン ストア内のデータベース エンジンによって追跡される必要があります。 バージョン ストアには、データベース内の各レコードまたはインデックス エントリのすべての異なるバージョンのライブ レコードが保持され、すべてのアクティブなトランザクションで確認できます。 これらのバージョンは、データベース エンジンが使用する複数バージョンのコンカレンシー制御をサポートするために使用され、スナップショット分離を使用したトランザクションをサポートします。 データベース エンジンがこれらのバージョンの格納に使用するリソースを使い果たした後、一部のトランザクションでこれらのリソースの再利用が完了するまで、それ以上の変更を受け入れなくなります。 エンジンがこの状態になると、すべての更新はJET_errVersionStoreOutOfMemoryで失敗します。 データベース エンジンがこれらのバージョンを格納するために使用できるリソースは、 JetSetSystemParameter と JET_paramMaxVerPages と JET_paramGlobalMinVerPagesを使用して制御できます。
必要条件
要件 | 値 |
---|---|
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
JetDelete
JetPrepareUpdate
JetRegisterCallback
JetRetrieveColumn
JetRetrieveColumns
JetSetColumn
JetSetColumns
JetSetSystemParameter
システム パラメーター