Btrieve API Guide (v11)

Update(3)

Update オペレーション(B_UPDATE)では、既存のレコードの情報を変更します。

パラメーター

 
オペレーション コード
ポジション ブロック
データ バッファー
データ バッファー長
キー バッファー
キー番号
送り値

 

戻り値
 

 
 

 


メモ

NCC(No-currency-change:カレンシー変更なし)オプションを使用すると、Update オペレーションはキー バッファー パラメーターの値を更新しません。つまり、キー バッファー パラメーターには情報は返されません。


前提条件

手順

  1. オペレーション コードに 3 を設定します。
  2. レコードを含むファイルのポジション ブロックを渡します。
  3. データ バッファーに更新後のデータ レコードを格納します。
  4. データ バッファー長に更新後のレコードの長さを設定します。
  5. キー番号に、レコードの取得に使用したキー番号を設定します。NCC オプションを使用するには、キー番号に -1(0xFF)を指定します。システム定義のログ キー(システム データ)を使用するには、125 を指定します。
    Get オペレーションの直後に NCC オプションを使用しない Update オペレーションを実行するとき、トランザクショナル インターフェイスでは Get オペレーションで取得したものとまったく同じキー番号を渡します。そうしないと、トランザクショナル インターフェイスでレコードは正常に更新されますが、更新後に実行する最初の Get オペレーションでステータス コード 7 が返されます。

結果

Update オペレーションが正常に終了した場合、トランザクショナル インターフェイスではファイル内に格納されているレコードがデータ バッファー内の新しい値を使って更新され、キー値の変更を反映してインデックスが調整されます。また、指定したキーの値がキー バッファーに返されます。NCC Update オペレーションでは、キー バッファー パラメーターの値は更新されません。

トランザクショナル インターフェイスでは、アプリケーションが更新するレコードに単一レコード ロックを設定している場合は、ロックが解除されます。しかし、複数レコード ロックは Update オペレーションを実行しても解除されません。

Update オペレーションが正常に実行されなかった場合は、トランザクショナル インターフェイスから次のステータス コードのいずれかが返されます。

5
レコードのキー フィールドに重複するキー値があります。
8
現在のポジションが不正です。
10
キー フィールドは変更できません。
22
データ バッファー パラメーターが短すぎます。
80
トランザクショナル インターフェイスでレコード レベルの矛盾が発生しました。

ポジショニング

Update オペレーションも NCC Update オペレーションも、物理カレンシーには影響しません。

更新されたキーの値によってインデックス内のレコードが再配置される場合は、NCC オプションを使用しない Update オペレーションが論理カレンシーに影響を与えることがあります。たとえば、INTEGER キーの現在の論理レコードがそのキーに対して 1 という値を持つ場合を考えてみましょう。これと同じキーについて、次の論理レコードは 2 という値を持ちます。このとき 1 を 4 に更新すると、次の論理レコードが変わります。この例では、Update オペレーションの実行後、次の論理レコードは 4 よりも大きい値を持つことになります。

NCC Update オペレーションは論理カレンシーに影響しません。つまり、NCC Update オペレーションを実行したアプリケーションでは、ファイル内の論理位置は Update オペレーションを実行する前と変わらないということです。このような状況で、NCC Update オペレーションに続けて、Get Next(6)、Get Next Extended(36)、Get Previous(7)、および Get Previous Extended(37)などのオペレーションを実行すると、NCC Update オペレーション実行以前のアプリケーションの論理カレンシーに基づく値が返されます。


メモ

トランザクショナル インターフェイスでは、NCC Update オペレーションを実行しても、その結果として何の情報もキー バッファーには返されません。したがって、論理カレンシーの維持が必要なアプリケーションでは、NCC Update オペレーション後にキー バッファーの値を変更しないでください。変更すると、次の Get オペレーションの結果は予測できないものになります。



Unlock(27)

Update Chunk(53)