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で失敗します。 データベース エンジンがこれらのバージョンを格納するために使用できるリソースは、 JetSetSystemParameterJET_paramMaxVerPagesJET_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
システム パラメーター