Btrieve API Guide (v11)

Delete(4)

Delete オペレーション(B_DELETE)では、ファイルから既存のレコードを削除します。削除したレコードが占有していたスペースは、新しいレコードを挿入するために再利用されます。

パラメーター

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

 
 
 
 
戻り値
 

 
 
 
 

前提条件

手順

  1. オペレーション コードに 4 を設定します。
  2. 削除するレコードを含むファイルのポジション ブロックを渡します。

詳細

Delete オペレーションを Extended Get または Extended Step オペレーションの直後に実行した場合、これは有効なオペレーションになりません。

Get オペレーションの直後に Delete オペレーションを実行する場合は、Get オペレーションから返されるキー番号を変更しないでください。変更してしまうと、レコードはトランザクショナル インターフェイスで正常に削除されますが、レコード削除後に実行する最初の Get オペレーションでステータス コード 7 が返されます。

トランザクショナル インターフェイスでは、Get Key オペレーション(+50)の後に Delete オペレーションを実行することはできません。トランザクショナル インターフェイスで Delete オペレーションを実行する前に、変更しようとしているデータ ページの現在の使用回数と、レコードを読み取った時点のデータ ページの使用回数が比較されます。使用回数を取得するには、トランザクショナル インターフェイスがデータ ページを読み取る必要があります。

Get Key オペレーションではデータ ページを読み取らないので、Delete オペレーションで比較するための使用回数が利用可能になりません。トランザクショナル インターフェイスでは、比較なしにパッシブ並行制御の矛盾チェックを実行できないため、Delete オペレーションは正常に実行されません。Delete オペレーションが正常に実行されないと、トランザクショナル インターフェイスからステータス コード 8 が返されます。

結果

Delete オペレーションが正常に終了した場合は、トランザクショナル インターフェイスによってファイルからレコードが削除され、削除したレコードにロックが設定されていた場合はそのロックが解除され、さらに削除の結果を反映して、すべてのキー インデックスを調整されます。

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

8
現在のポジションが不正です。
80
トランザクショナル インターフェイスでレコード レベルの矛盾が発生しました。
84
レコードまたはページがロックされています。
85
ファイルはロックされています。

Delete オペレーションを実行してもファイル サイズは小さくなりません。レコードの削除によって生じる空き領域は、今後レコードを追加するときに再利用されます。ディスク容量を回復するには、ファイルを再作成して、そのファイルにすべてのレコードを挿入するしかありません。

ポジショニング

Delete オペレーションを実行すると、すべての物理位置情報と現在のレコードの論理位置は消去されますが、次のレコードまたは前のレコードの論理位置は変わりません。


Create Index(31)

Drop Index(32)