私事なのですが、最近収めたシステムで客先より「エラーコードが3DHが表示されてデータが登録できない」との連絡在りました。 3DH のエラーコードの内容は取説より
「3Dh:FIELD ステートメントで指定されたフィールド幅が、ファイルと異なっています。」
とのこと、こちらでいくら再現しようとしてもエラーが発生しませんでした。
そこで客先で該当するデータファイルの情報をシステムメニューから表示してもらったところ、 データファイルのフォーマットが昔のままで、そのためにエラーが発生している様でした。
(最初に納入したプログラムで動作させてそのままにしておいて、 フォーマットが変更された最新のプログラムを動作させて為に発生しました)
この FIELD命令 ですが、既に存在するファイルと違っている場合に 新しい FIELD命令 では機能せずにエラーが発生します。
以下に FIELD命令 でエラーが発生するソースを記します。 最初の FIELD命令 で作成された「TEST.DAT」は2個のカラムを持っていますが、 2度目の FIELD命令 でエラーが発生します。
このプログラムを実行すると以下の画面になります。
エラーコードが「3D」で、 FIELD命令 でのエラーであることがわかります。
データファイルのフォーマットが変更された場合には、手動でハンディターミナル内部の該当ファイルを削除するか、 もしくは、プログラムで判定して削除してから、再度の FIELD命令 を行う必要があると思います。
=====
2016/04/02:の時の情報
「3Dh:FIELD ステートメントで指定されたフィールド幅が、ファイルと異なっています。」
とのこと、こちらでいくら再現しようとしてもエラーが発生しませんでした。
そこで客先で該当するデータファイルの情報をシステムメニューから表示してもらったところ、 データファイルのフォーマットが昔のままで、そのためにエラーが発生している様でした。
(最初に納入したプログラムで動作させてそのままにしておいて、 フォーマットが変更された最新のプログラムを動作させて為に発生しました)
この FIELD命令 ですが、既に存在するファイルと違っている場合に 新しい FIELD命令 では機能せずにエラーが発生します。
以下に FIELD命令 でエラーが発生するソースを記します。 最初の FIELD命令 で作成された「TEST.DAT」は2個のカラムを持っていますが、 2度目の FIELD命令 でエラーが発生します。
Main
SCREEN 1 '漢字モード
LOCATE , , 2 'カーソルをブロック表示
ON ERROR GOTO MAIN.ERR
'FIELDのカラム数の定義
Const COL.CD% = 4
Const COL.NUM% = 8
'TEST.DATファイルを、ファイル番号#1としてオープンします
PRIVATE FILENO%, strCD$, lngNum&, REC.CD$, REC.NUM$
FILENO% = 1
OPEN "TEST.DAT" AS FILENO% RECORD 2147483647
FIELD #FILENO%, COL.CD% AS REC.CD$, COL.NUM% AS REC.NUM$
strCD$ = "1"
lngNum& = 1000
REC.CD$ = LEFT$(strCD$ + " ", COL.CD%) '既定の桁数分スペースを付加
REC.NUM$ = RIGHT$(" " + STR$(lngNum&), COL.NUM%) '既定の桁数分スペースを付加
'書込み
PUT #FILENO%
'クローズ
CLOSE #FILENO%
'FIELDのカラム数の追加定義
Const COL.DTX% = 4
PRIVATE strDTX$
OPEN "TEST.DAT" AS FILENO% RECORD 2147483647
'カラム数を追加してFIELD文
FIELD #FILENO%, COL.CD% AS REC.CD$, COL.NUM% AS REC.NUM$, COL.DTX% AS strDTX$
'書込み
PUT #FILENO%
'クローズ
CLOSE #FILENO%
'
WAIT 0, &H1
END
MAIN.ERR
PRINT "ERL=";ERL;" ERR=";HEX$(ERR);
WAIT 0, &H1
END
このプログラムを実行すると以下の画面になります。
エラーコードが「3D」で、 FIELD命令 でのエラーであることがわかります。
データファイルのフォーマットが変更された場合には、手動でハンディターミナル内部の該当ファイルを削除するか、 もしくは、プログラムで判定して削除してから、再度の FIELD命令 を行う必要があると思います。
=====
2016/04/02:の時の情報
PR
コメント