次の方法で共有


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