バージョン 8.1.3
 —  コマンドリファレンス  —

A1 コマンド:レコードの更新

A1 コマンドは、レコードをホールドオプション付きで更新します。

このドキュメントでは、次のトピックについて説明します。


機能および使用

A1 コマンドは、レコード内の 1 つ以上のフィールドの値を変更するのに使用します。 更新対象のフィールドがあるレコードは、ファイル番号と ISN 番号で識別されます。 更新対象のフィールドをフォーマットバッファに指定し、更新後の値をレコードバッファに指定します。 指定したフィールドのみが変更されます。 レコード内のそれ以外のフィールドは変更されません。

アソシエータおよびデータストレージへの必要な更新は、Adabas によって行われます。

更新の前にレコードをホールド状態にするためのホールドオプションが用意されています。

マルチユーザーモードで操作している場合、A1 コマンドは更新レコードがホールド状態にある場合にのみ実行できます。

注意:
前回の Adabas リリースの A4 コマンドは A1 コマンドとして実行されます。

Top of page

ACB インターフェイスダイレクトコール:A1 コマンド

このセクションでは、A1 コマンドの ACB インターフェイスダイレクトコールについて説明します。 本書には、次のトピックが含まれています。

コントロールブロックとバッファの概要

コントロールブロック

ダイレクトコールが開始される前に、未使用の ACB フィールドにバイナリの 0 を設定することをお勧めします。

フィールド 位置 フォーマット Adabas コール前 Adabas コール後
  1~2 -- -- --
コマンドコード 3~4 英数字 F U
コマンド ID 5~8 英数字/バイナリ F U
ファイル番号 9~10 バイナリ F U
レスポンスコード 11~12 バイナリ -- A
ISN 13~16 バイナリ F U
ISN 下限 17~20 バイナリ -- A1
ISN 数 21~24 バイナリ -- A1
フォーマットバッファ長 25~26 バイナリ F U
レコードバッファ長 27~28 バイナリ F U
  29~34 -- -- --
コマンドオプション 1/2 35~36 英数字 F U
  37~44 -- -- --
アディション 2 45~48 英数字/バイナリ   A
アディション 3 49~56 英数字 F A
アディション 4 57~64 英数字 F A
アディション 5 65~72 英数字 F U
コマンドタイム 73~76 バイナリ -- A
ユーザーエリア 77~80 -- -- U

  1. これらのフィールドは使用されますが、カップリングファイルが使用されている場合は Adabas によりリセットされません。

バッファエリア

バッファ Adabas コール前 Adabas コール後
フォーマット F U
レコード F U

上記の意味は次に示すとおりです。

F Adabas コール前にユーザーが入力するフィールド
A Adabas により入力されるフィールド
U Adabas コール後も変化なし
-- 未使用

コントロールブロックフィールドの説明

ダイレクトコールが開始される前に、未使用の ACB フィールドにバイナリの 0 を設定することをお勧めします。

コマンドコード(ACBCMD)

A1

コマンド ID(ACBCID)

一連の A1 コマンドを使用して複数レコードを更新し、それぞれのコールでフォーマットバッファに同一フィールドを指定する場合(検索コマンドで選択された複数レコードを更新する場合など)には、このフィールドに、空白以外の値またはゼロ以外の値をセットする必要があります。 A1 コマンドを L1/L4、L2/L5、または L3/L6 コマンドと組み合わせて使用し、各レコードの同一フィールドを読み込んで更新する場合には、読み込みコマンドで使用したのと同じコマンド ID を A1 コールでも使用する必要があります。 どちらの場合も、こうすることで、各 A1 コールの処理に必要な時間を短縮できます。

1 回の A1 コールで、1 レコードだけを更新する、あるいは A1 のコール間でフォーマットバッファを変更する場合は、このフィールドに空白をセットする必要があります。

このフィールドの第 1 バイトには 16 進数 'FF' にセットしないでください。

ファイル番号(ACBFNR)

読み込むファイルの番号を 2 進数で指定します。 物理ダイレクトコールの場合は、次のようファイル番号を指定します。

注意:
2 バイトファイル番号およびデータベース ID を使用する場合は、コントロールブロックの先頭バイトに X'30' を入力しなければなりません。

レスポンスコード(ACBRSP)

Adabas はこのフィールドに、コマンドのレスポンスコードを返します。 レスポンスコード 0 は、このコマンドが正しく実行されたことを示します。 ゼロ以外のレスポンスコードは、アディション 2 フィールドの下位 2 バイトにサブコードを伴う場合があります。詳細は『Adabas メッセージおよびコード』を参照してください。

ISN(ACBISN)

更新するレコードの ISN。

ISN 数/下限(ACBISQ および ACBISL)

これらのフィールドは、カップリングファイルが使用されていない限り、A1 コマンド処理の終了後、空値に設定されます。 カップリングファイルが使用されている場合、これらのフィールドは A1 処理で使用され、リセットされません。

フォーマットバッファ長(ACBFBL)

フォーマットバッファ長(バイト単位)。 ユーザープログラムに定義するフォーマットバッファエリアは、この指定長と同じか、それ以上でなければなりません。

レコードバッファ長(ACBRBL)

レコードバッファ長(バイト単位)。 ユーザープログラムに定義するレコードバッファエリアは、この指定長と同じか、それ以上でなければなりません。

コマンドオプション 1 およびコマンドオプション 2:ホールドレコードオプション(ACBCOP1 および ACBCOP2)
オプション 説明
H コマンドオプション 1 フィールドまたはコマンドオプション 2 フィールドを "H" にすると、更新前にレコードがホールド状態になります。 現在レコードが別のユーザーによってホールド状態になっている場合、オプション "R" も指定しない限り、レコードが使用可能になるかトランザクションがタイムアウトになるまでコマンドは待機状態になります。
R このオプションを指定する場合は、このオプションをコマンドオプション 1 フィールドに指定し、オプション "H" をコマンドオプション 2 フィールドに指定する必要があります。 オプション "R" を指定すると、レコードがホールドされているため使用できない場合に、レスポンスコード 145 が返されます。 コマンドは待機状態にはなりません
アディション 2 - 圧縮レコードの長さ - (ACBADD2)

コマンドが正常に処理されると、次の情報がこのフィールドに返されます。

アディション 3 - パスワード - (ACBADD3)

このフィールドは、Adabas Security または ADAESI パスワードを指定するため使用します。 データベース、ファイル、またはフィールドがセキュリティ保護されている場合は、有効なセキュリティパスワードまたは ADAESI パスワードをユーザーは指定する必要があります。 パスワードを保護するために、コマンド処理時にアディション 3 フィールドに空白がセットされます。

アクセスしたファイルをパスワード保護する場合は、パスワードを保護するために、コマンド処理時、このフィールドに空白がセットされます。

アディション 4 - サイファコード - (ACBADD4)

このフィールドは、サイファコードを指定するために使用します。 ファイルを暗号化する場合は、有効なサイファコードを指定する必要があります。 ファイルを暗号化しない場合は、このフィールドに空白をセットする必要があります。

Adabas は、コマンド処理時に、サイファコードに空白をセットし、バージョンコードとデータベース ID をフィールドの下位 3 バイトに返します。 詳細については「コントロールブロックフィールド」を参照してください。

アディション 5 - フォーマット ID、グローバルフォーマット ID - (ACBADD5)

このフィールドを使って別のフォーマット ID を指定して、このコマンドに使用される内部フォーマットバッファを識別したり、またはグローバルフォーマット ID を指定したりできます。

アディション 5 フィールドの 1 バイト目の最上位ビットに 1 が指定されていなければ、コマンド ID フィールドに指定した値がフォーマット ID として使用されます。

このビットに 1 がセットされていると、アディション 5 フィールドの 5 バイト目から 8 バイト目までがフォーマット ID として使用されます。

さらに、アディション 5 フィールドの第 1 バイトの最上位(左端)2 ビットに、1(B'11')がセットされると、アディション 5 フィールドの全 8 バイトが、グローバルフォーマット ID として使用されます(つまり、複数ユーザーがこのフォーマット ID を同時に使用できます)。

詳細と例については、「コマンド ID、フォーマット ID、グローバルフォーマット ID」を参照してください。

ACB の例

ここで記述するすべての例で使用されている Adabas ファイルの定義については、「例で使用されているファイル定義」を参照してください。

例 1

ファイル 1 の ISN4 が次の値で更新されます。

フィールド AA 1234
フィールド AB 20

コントロールブロック

コマンドコード A1  
コマンド ID bbbb(空白) 1 レコードのみが更新されます。
ファイル番号 1  
ISN 4  
フォーマットバッファ長 10 またはそれ以上
レコードバッファ長 10 またはそれ以上
アディション 3 bbbbbbbb(空白) ファイルはセキュリティ保護されません。
アディション 4 bbbbbbbb(空白) ファイルは暗号化されない

バッファエリア

フォーマットバッファ AA,AB,2,U.
レコードバッファ X'F1F2F3F440404040F2F0'

例 2

ファイル 2 内の一組のレコード(すでに FIND コマンドで識別済み)が次の値で更新されます。

フィールド RA ABCD
フィールド XB 80
フィールド XC 0

コントロールブロック

コマンドコード A1  
コマンド ID ABCD 連続するレコードの同じフィールドが更新されるため、空白やゼロでないコマンド ID を指定することをお勧めします。
ファイル番号 2  
ISN n 各コールの前に、前の FIND コマンドによって取得された各 ISN をこのフィールドに挿入します。
フォーマットバッファ長 9 またはそれ以上
レコードバッファ長 16 またはそれ以上
アディション 3 パスワード ファイル 2 はセキュリティ保護されています。
アディション 4 bbbbbbbb(空白) ファイルは暗号化されない

バッファエリア

フォーマットバッファ RA,XB,XC.
レコードバッファ X'C1C2C3C440404040080CF0F0F0F0F0F0'

すでに FIND コマンドで得た ISN ごとに A1 コールを繰り返します。

Top of page

ACBX インターフェイスダイレクトコール:A1 コマンド

このセクションでは、A1 コマンドの ACBX インターフェイスダイレクトコールについて説明します。 本書には、次のトピックが含まれています。

コントロールブロックとバッファの概要

コントロールブロック

ダイレクトコールが開始される前に、未使用の ACBX フィールドにバイナリの 0 を設定することをお勧めします。

フィールド 位置 フォーマット Adabas コール前 Adabas コール後
  1~2 バイナリ --- ---
バージョンインジケータ 3~4 バイナリ F U
  5~6 バイナリ --- ---
コマンドコード 7~8 英数字 F U
  9~10 バイナリ --- ---
レスポンスコード 11~12 バイナリ --- U
コマンド ID 13~16 英数字/バイナリ F U
データベース ID 17~20 数値 F U
ファイル番号 21~24 数値 F U
  25~28 --- --- ---
ISN 29~32 バイナリ F U
  33~36 --- --- ---
ISN 下限 37~40 バイナリ --- A1
  41~44 --- --- ---
ISN 数 45~48 バイナリ --- A1
コマンドオプション 1 49 英数字 F U
コマンドオプション 2 50 英数字 F U
  51~64 --- --- ---
アディション 2 65~68 バイナリ   A
アディション 3 69~76 英数字/バイナリ F A
アディション 4 77~84 英数字 F A
アディション 5 85~92 英数字/バイナリ F U
  93~114 --- --- ---
エラーサブコード 115~116 バイナリ --- A
  117~144 --- --- ---
コマンドタイム 145~152 バイナリ --- A
ユーザーエリア 153~168 該当なし --- U
  169~193 --- --- ---

  1. これらのフィールドは使用されますが、カップリングファイルが使用されている場合は Adabas によりリセットされません。

ABD とバッファ

ABD とバッファ Adabas コール前 Adabas コール後
フォーマット F U
レコード F U

上記の意味は次に示すとおりです。

F Adabas コール前にユーザーが入力するフィールド
A Adabas により入力されるフィールド
U Adabas コール後も変化なし
--- 未使用

コントロールブロックフィールドの説明

ダイレクトコールが開始される前に、未使用の ACBX フィールドにバイナリの 0 を設定することをお勧めします。

バージョンインジケータ(ACBXVER)

F2

コマンドコード(ACBXCMD)

A1

レスポンスコード(ACBXRSP)

Adabas はこのフィールドに、コマンドのレスポンスコードを返します。 レスポンスコード 0 は、このコマンドが正しく実行されたことを示します。 ゼロ以外のレスポンスコードは、エラーサブコード(ACBXERRC)フィールドにサブコードを伴う場合があります。詳細は、Adabas メッセージおよびコード のドキュメントを参照してください。

コマンド ID(ACBXCID)

一連の A1 コマンドを使用して複数レコードを更新し、それぞれのコールでフォーマットバッファに同一フィールドを指定する場合(検索コマンドで選択された複数レコードを更新する場合など)には、このフィールドに、空白以外の値またはゼロ以外の値をセットする必要があります。 A1 コマンドを L1/L4、L2/L5、または L3/L6 コマンドと組み合わせて使用し、各レコードの同一フィールドを読み込んで更新する場合には、読み込みコマンドで使用したのと同じコマンド ID を A1 コールでも使用する必要があります。 どちらの場合も、こうすることで、各 A1 コールの処理に必要な時間を短縮できます。

1 回の A1 コールで、1 レコードだけを更新する、あるいは A1 のコール間でフォーマットバッファを変更する場合は、このフィールドに空白をセットする必要があります。

このフィールドの第 1 バイトには 16 進数 'FF' にセットしないでください。

データベース ID(ACBXDBID)

このフィールドを使用して、データベース ID を指定します。 Adabas コールはこのデータベースに送られます。

このフィールドは 4 バイトのバイナリフィールドですが、現時点では 2 バイトのデータベース ID のみがサポートされています。 したがって、データベース ID はフィールドの下位部分(右端のバイト)に指定し、その前にバイナリの 0 を付加する必要があります。

このフィールドがバイナリの 0 に設定されている場合は、Adabas API は DDCARD 入力データで指定された ADARUN カードのデータベース ID か、リンクされているかリンクルーチンによりロードされた LNKGBLS モジュールで指定されているデフォルトのデータベース ID 値のいずれかを使用します。

ファイル番号(ACBXFNR)

このフィールドを使用して、Adabas コールで送る必要のあるファイル数を指定します。

このフィールドは 4 バイトのバイナリフィールドですが、ファイル番号はフィールドの下位部分(右端のバイト)に指定し、その前にバイナリの 0 を付加する必要があります。

ISN(ACBXISN)

このフィールドは、更新対象のレコードの ISN を指定するのに使用します。

ACBXISN フィールドは、8 バイトの ACBXISNG フィールドに埋め込まれた 4 バイトのバイナリフィールドで、まだ使用されていません。 ACBXISNG フィールドの上位部分には、バイナリの 0 を設定します。

ISN 下限(ACBXISL)

このフィールドは、ハードカップリングファイルが使用されない限り、A1 コマンド処理終了後、空値にセットされます。 カップリングファイルが使用されている場合は、このフィールドは A1 コマンド処理中に使用され、リセットされません。

ISN 数(ACBXISQ)

このフィールドは、ハードカップリングファイルが使用されない限り、A1 コマンド処理終了後、空値にセットされます。 カップリングファイルが使用されている場合は、このフィールドは A1 コマンド処理中に使用され、リセットされません。

コマンドオプション 1 およびコマンドオプション 2:ホールドレコードオプション(ACBXCOP1 および ACBXCOP2)
オプション 説明
H コマンドオプション 1 フィールドまたはコマンドオプション 2 を "H" にすると、更新前にレコードがホールド状態になります。 現在レコードが別のユーザーによってホールド状態になっている場合、オプション "R" も指定しない限り、レコードが使用可能になるかトランザクションがタイムアウトになるまでコマンドは待機状態になります。
R このオプションを指定する場合は、このオプションをコマンドオプション 1 フィールドに指定し、オプション "H" をコマンドオプション 2 フィールドに指定する必要があります。 オプション "R" を指定すると、レコードがホールドされているため使用できない場合に、レスポンスコード 145 が返されます。 コマンドは待機状態にはなりません
アディション 2 - 圧縮レコードの長さ - (ACBXADD2)

コマンドが正常に処理され、かつ少なくとも 1 つの有効なフィールド値がレコードバッファにある場合、先頭 2 バイトには、アクセスしたレコードの圧縮レコード長がバイナリ形式で格納されます。

アディション 3 - パスワード - (ACBXADD3)

このフィールドは、Adabas Security または ADAESI パスワードを指定するため使用します。 データベース、ファイル、またはフィールドがセキュリティ保護されている場合は、有効なセキュリティパスワードまたは ADAESI パスワードをユーザーは指定する必要があります。 パスワードを保護するために、コマンド処理時にアディション 3 フィールドに空白がセットされます。

アクセスしたファイルをパスワード保護する場合は、パスワードを保護するために、コマンド処理時、このフィールドに空白がセットされます。

アディション 4 - サイファコード - (ACBXADD4)

このフィールドは、サイファコードを指定するために使用します。 ファイルを暗号化する場合は、有効なサイファコードを指定する必要があります。 ファイルを暗号化しない場合は、このフィールドに空白をセットする必要があります。

Adabas は、コマンド処理時に、サイファコードに空白をセットし、バージョンコードとデータベース ID をフィールドの下位 3 バイトに返します。 詳細については「コントロールブロックフィールド」を参照してください。

アディション 5 - フォーマット ID、グローバルフォーマット ID - (ACBXADD5)

このフィールドを使って別のフォーマット ID を指定して、このコマンドに使用される内部フォーマットバッファを識別したり、またはグローバルフォーマット ID を指定したりできます。

アディション 5 フィールドの 1 バイト目の最上位ビットに 1 が指定されていなければ、コマンド ID フィールドに指定した値がフォーマット ID として使用されます。

このビットに 1 がセットされていると、アディション 5 フィールドの 5 バイト目から 8 バイト目までがフォーマット ID として使用されます。

さらに、アディション 5 フィールドの第 1 バイトの最上位(左端)2 ビットに、1(B'11')がセットされると、アディション 5 フィールドの全 8 バイトが、グローバルフォーマット ID として使用されます(つまり、複数ユーザーがこのフォーマット ID を同時に使用できます)。

詳細と例については、「コマンド ID、フォーマット ID、グローバルフォーマット ID」を参照してください。

エラーサブコード(ACBXERRC)

コマンドがゼロ以外のレスポンスコードを返したときは、このフィールドにレスポンスコードの正確な意味を定義したサブコードが含まれます。 レスポンスコードとサブコードについては、『Adabas メッセージおよびコード』を参照してください。

Top of page

バッファ

A1 コマンドでは次のバッファを指定する必要があります。

フォーマットバッファ

このバッファには、更新するフィールドを指定する必要があります。 A1 コマンドを実行する場合、フォーマットバッファに次のものを含めることはできません

フォーマットバッファに上記のいずれかが含まれていると、A1 コマンドに対してニュークリアスレスポンス 44 が返されます。

フォーマットバッファの構文および例については、「フォーマットバッファ」を参照してください。

レコードバッファ

このバッファには、フォーマットバッファに指定した長さとフォーマットに従って、更新する値が入ります。 詳細については、「レコードバッファ」を参照してください。

Top of page

その他の考慮事項

A1 コマンドを使用する場合、次のことについて考慮します。

  1. サブディスクリプタ、スーパーディスクリプタ、およびフォネティックディスクリプタは、直接更新できません。 これらのディスクリプタを更新するには、そのディスクリプタの生成に使用されたフィールドを更新する必要があります。 対応するサブディスクリプタ、スーパーディスクリプタ、またはフォネティックディスクリプタ値は Adabas により更新されます。

  2. 圧縮前の最大レコード長は、理論上は 32,767 バイトですが、 実際にはブロックサイズによって制限されます。 また、この値は、Adabas セッションの LU パラメータの大きさによっては、それより小さくなります。この場合の最大レコード長は、LU 値 - フォーマットバッファ長 - 108 になります。 圧縮後の最大レコード長は、データストレージブロックサイズ - 4 バイトまたは WORK ブロックサイズ - 110 バイトのどちらか小さい方です。

  3. ディスクリプタ値は、253 バイト以下にする必要があります。

  4. 標準長を超える長さを使用(フィールドが固定ストレージオプョンで定義されている場合は許可されない)してフィールドを更新した場合、その後、そのフィールドを参照するときは、更新に使用された長さを指定する必要があります。 以後の参照で標準長を使用すると、英数字フィールドでは桁落ちが発生し、数値フィールドではレスポンスコード 55 が返されます。

  5. フォーマットバッファには、マルチプルバリューフィールドまたはピリオディックグループ内のフィールドを複数回指定できます。 マルチプルバリューフィールドは、インデックスなしで数回指定したり、インデックスをさまざまに変えて指定したりできます。 ピリオディックグループ内のフィールドは、常にインデックスが異なる値である必要があります。

  6. フォーマットバッファにマルチプルバリューまたはピリオディックグループのカウントフィールドを指定しても、Adabas では無視されます。 レコードバッファの対応する値も無視されます。 Adabas ではフォーマットバッファのリテラルは無視され、レコードバッファの対応する位置も無視されます。

  7. マルチプルバリューフィールドを更新し、そのフィールドカウントを変更する必要がある場合、Adabas では、次のルールに従って、マルチプルバリューカウントフィールドを更新します。

  8. ピリオディックグループに属する 1 つ以上のフィールドを更新する場合、Adabas では必要に応じて次のルールに従ってピリオディックグループカウントを更新します。

    カウントは、フォーマットバッファに指定した最高オカレンス番号に合わせて調整されます(指定したオカレンス番号が現在の最高オカレンス番号よりも大きい場合)。

    フィールド定義 01,GB,PE
    02,BA,1,B,DE,NU
    02,BB,5,P,NU
    更新前の GB 値 GB(第 1 オカレンス)
    BA = 5 BB = 20
    GB(第 2 オカレンス)
    BA = 6 BB = 25
    GB カウント = 2
    フォーマットバッファ GB4
    レコードバッファ X'08000000500F'
    更新後の結果 GB(第 1 オカレンス)
    BA = 5 BB = 20
    GB(第 2 オカレンス)
    BA = 6 BB = 25
    GB(第 3 オカレンス)
    BA = 0 BB = 0
    GB(第 4 オカレンス)
    BA = 8 BB = 500
    GB カウント = 4
    更新前の GB 値 GB(第 1 オカレンス)
    BA = 5 BB = 20
    GB(第 2 オカレンス)
    BA = 6 BB = 25
    GB カウント = 2
    フォーマットバッファ GB1
    レコードバッファ X'00000000000F'
    更新後の結果 GB(第 1 オカレンス)
    BA = 0 BB = 0
    GB(第 2 オカレンス)
    BA = 6 BB = 25
    GB カウント = 2

    ピリオディックグループでは、最大 191 個のオカレンスが許可されています。

  9. 可変長(標準長なし)に定義されたフィールドをフォーマットバッファに指定する場合、関連するレコードバッファ内の値の前に、1 バイトのバイナリ長の値(長さバイトを含む)を指定する必要があります。

    フィールド定義 01,AA,3,A
    01,AB,A
    フォーマットバッファ AA,AB.
    レコードバッファ X'F1F2F306F1F2F3F4F5'

    フィールド AA と AB が更新されます。 AA の新しい値は "123" です。 AB(可変長フィールド)の新しい値は "12345" です。

Top of page