Page History
[ |../../index.htm#lansa/ioreturns.htm]
現在地:
...
13.5 RDML I/O戻りコード
ほとんどのLANSAデータベース・コマンドは、完了したときに「戻りコード」を発行します。この戻りコードは必ず#IO$STSと呼ばれるフィールドにマッピングされ、他のフィールドと同様に条件ステートメントで使用することができます。戻りコードはユーザー定義のフィールドにマッピングすることもできます。マッピング方法については、必要なコマンドのIO_STATUSパラメータを参照してください。
ただし、通常の商用ファンクションにおいては、すべてのファンクションで、致命的なエラーが発生したときに自動でエラー処理を実行してエラーに対処する方法を採用する必要があります。I/O操作が正常に動作したか、正常に動作しなかった(動作しなかった場合は、戻りコードではなくメッセージにより理由が示されます)かが示されます。 かが示されます。
すべてのI/O戻りコードの値とその意味を以下のリストに示します。
戻りコード | 記述/意味 |
|---|---|
OK |
OK 操作が正常に終了しました。エラーは見つかりませんでした。 | |
ER | 致命的なエラー |
致命的なエラーが見つかりました。エラーは回復できない可能性があります。問題の原因を究明、修正して、再度操作を試みてください。 当章に、ロックされたレコードのI/Oステータスを掲載したセクションがあります。そちらも参照してください。 |
VE |
妥当性検査エラー 挿入、更新、または削除操作においてファイルまたはディクショナリ・レベルの妥当性検査に失敗しました。 | |
NR | レコードなし |
要求に合致するレコードを見つけることができませんでした。 |
EF |
ファイルの終わり 読み込み操作でファイルの終わりが見つかりました。 | |
BF | ファイルの先頭 |
逆方向読み込みでファイルの先頭が見つかりました。 | |
EQ | 同一キーが見つかった |
ファイルに指定したキーと同じキーを持つレコードが見つかりました。 | |
NE | 同一キーが見つからなかった |
指定したキーと同じキーを持つレコードを見つけることができませんでした。 |
I/O操作の完了後に実施する戻りコードの検査にはさまざまな方法があります。 1つ目は、常にI
1つ目は、常にI/Oコマンドのデフォルト・パラメータであるIO_STATUS(*STATUS)を使用する方法です。この場合、戻りコードは#IO$STSと呼ばれるフィールドにマッピングされます。そしてこの#IO$STSは他のフィールドと同様に参照することができます。例えば、以下のようになります。 を使用する方法です。この場合、戻りコードは#IO$STSと呼ばれるフィールドにマッピングされます。そしてこの#IO$STSは他のフィールドと同様に参照することができます。例えば、以下のようになります。
FETCH FIELDS(#ORDERHEAD)
...
FROM_FILE(ORDHDR)
...
WITH_KEY(#ORDER)
IF COND('
...
#IO$STS *NE OK')
...
MESSAGE MSGTXT('Order not found in current order file')
ENDIF
2つ目は、IO2つ目は、IO_STATUSパラメータを使って戻りコードをユーザー定義のフィールドにマッピングする方法です。例えば、以下のようになります。 STATUSパラメータを使って戻りコードをユーザー定義のフィールドにマッピングする方法です。例えば、以下のようになります。
DEFINE FIELD(#RETCODE)
...
TYPE(*CHAR)
...
LENGTH(2)
FETCH FIELDS(#ORDERHEAD)
...
FROM_FILE(ORDHDR)
...
WITH_KEY(#ORDER)
...
IO_STATUS(#RETCODE)
IF COND('
...
#RETCODE *NE OK')
...
MESSAGE MSGTXT('Order not found in current order file')
ENDIF
3つ目は、IF3つ目は、IF_STATUSコマンドを使って最新の戻りコードを自動で検査する方法です(これが最適だと考えられます)。上記例は以下のようになります。 。上記例は以下のようになります。
FETCH FIELDS(#ORDERHEAD)
...
FROM_FILE(ORDHDR)
...
WITH_KEY(#ORDER)
IF_
...
STATUS IS_NOT(*OKAY)
MESSAGE MSGTXT('
...
Order not found in current order file')
ENDIF
詳細と例については、「IF_STATUSコマンド」を参照してください。
参照 、「IF_STATUSコマンド」を参照してください。
参照
I/Oコマンド戻りコード表
[ |../../index.htm#lansa/ioreturns.htm]