 |
Btrieve API Guide (v11) |
 |
|
Get Direct/Record(23)
Get Direct/Record オペレーション(B_GET_DIRECT)では、定義されているキー パスではなく、ファイル内の物理位置を使ってレコードを取得します。
以下のような操作を実行する場合は、Get Direct/Record オペレーションを使用してください。
- キー値の代わりに物理位置を使って、より高速にレコードを取得する。
- Get Position オペレーション(22)を使ってレコードの 4 バイト物理位置を取得し、その位置を保存する。それから、カレンシーに影響を与えるほかのオペレーションを実行した後で Get Direct/Record オペレーションを使って、その位置に直接戻る。
- 一連の重複レコードの中から 1 つのレコードを取得するとき、その一連のレコードを先頭からすべて読み取りし直すことなく、4 バイトの物理位置を使って取得する。
- 現在のキー パスを変更する。Get Position オペレーションに続けて、別のキー番号を使った Get Direct/Record オペレーションを実行すると、別のインデックス パスに現在のレコードのポジショニングが確立します。この後で Get Next オペレーションを実行すると、新しいキー パスに基づいてファイル内の次のレコードが返されます。
パラメーター
|
オペレーション コード
|
ポジション ブロック
|
データ バッファー
|
データ バッファー長
|
キー バッファー
|
キー番号
|
送り値
|
|
|
|
|
|
|
戻り値
|
|
|
|
|
|
|
メモ
データオンリー ファイルで Get Direct/Record オペレーションを実行する場合は、キー番号パラメーターは必要ありません。
前提条件
- 対象となるファイルが開いていることが必要です。
- 4 バイトから成るレコードの物理位置を用意する必要があります。この値は、Get Position オペレーション(22)を使って取得できます。このオペレーションを実行すると、現在のレコードの物理アドレスが返されます。
手順
- オペレーション コードに 23 を設定します。オプションで、ロック バイアスも指定できます。
- +100 - 単一レコード ウェイト ロック
- +200 - 単一レコード ノーウェイト ロック
- +300 - 複数レコード ウェイト ロック
- +400 - 複数レコード ノーウェイト ロック
- ロックの詳細については、『Pervasive PSQL Programmer's Guide』を参照してください。
- ファイルのポジション ブロックを渡します。
- データ バッファーの先頭の 4 バイトに、目的のレコードの位置を表す 4 バイト値を格納します。
- データ バッファー長に取得するレコードの長さ以上の値を設定します。
- キー番号には、トランザクショナル インターフェイスで論理カレンシーを確立するパスのキー番号を設定します。トランザクショナル インターフェイスで論理カレンシーの確立を必要としない場合は、-1 を指定します。システム定義のログ キー(システム データ)を使用するには、125 を指定します。
結果
Get Direct/Record オペレーションが正常に終了した場合、トランザクショナル インターフェイスでは要求したレコードがデータ バッファーに、レコード長がデータ バッファー長に、指定したキー パスのキー値がキー バッファーにそれぞれ返されます。
Get Direct/Record オペレーションが正常に実行されず、要求したレコードをトランザクショナル インターフェイスが取得できなかった場合は、トランザクショナル インターフェイスから次のステータス コードのいずれかが返されます。
22
|
データ バッファー パラメーターが短すぎます。(論理カレンシーはまだ確立されています)
|
43
|
指定されたレコード アドレスが不正です。(論理カレンシーは確立されていません)
|
44
|
指定されたキー パスが不正です。(論理カレンシーは確立されていません)
|
82
|
トランザクショナル インターフェイスがポジショニングを失いました。(論理カレンシーは確立されていません)
|
ポジショニング
Get Direct/Record オペレーションを実行すると、既存の論理カレンシー情報が消去され、指定したキー番号に従って新しい論理カレンシーが確立されます。物理カレンシー情報にはまったく影響しません。
 Get Direct/Chunk(23) |
 Get Directory(18) |
|