Object Oriented XBASE Forum
エラーハンドラのカスタマイズ
・エラー内容をエラーログに出力
・FDDのディスクFULLや未挿入のエラーをトラップする
ように修正したエラーハンドラです。
メインプログラムの ON ERROR
部分を下記に変更します。
ON ERROR ERR_HANDLER2 WITH with ERROR(),PROGRAM(),LINENO()
エラーログ用に以下のDBFを用意する。
格納場所は path のとおったdirectory に置く
(VFPの起動ディレクトリ等)
VFP_ERROR.DBF
Field Field Name Type Width
1 ERRDATE Date 8
2 ERRTIME Character 10
3 ERRNO Numeric 5
4 ERRPRG Character 50
5 ERRLINE Numeric 5
6 ERRCODE Character 70
7 ERRMSG Character 70
エラーハンドラのカスタマイズ ・エラー内容をエラーログに出力 ・FDDのディスクFULLや未挿入のエラーをトラップする ように修正したエラーハンドラです。 メインプログラムの ON ERROR 部分を下記に変更します。 ON ERROR ERR_HANDLER2 WITH with ERROR(),PROGRAM(),LINENO() エラーログ用に以下のDBFを用意する。 格納場所は path のとおったdirectory に置く (VFPの起動ディレクトリ等) VFP_ERROR.DBF Field Field Name Type Width 1 ERRDATE Date 8 2 ERRTIME Character 10 3 ERRNO Numeric 5 4 ERRPRG Character 50 5 ERRLINE Numeric 5 6 ERRCODE Character 70 7 ERRMSG Character 70 ************************************************ * ERR_HANDLER2.prg * * 1999.10.25 * * * * modified error handler * * current directoryに VFP_ERROR.DBFがあること * ************************************************ parameter nError,cMethod,nLine LOCAL lcErrorMsg,lcCodeLineMsg LOCAL cMSG, nANS pERR_VALUE = 0 && 上位プログラムでpublic宣言 * 0 エラー解決 * 1 エラー未解決 * 呼出プログラムに戻った後で使用 *ERROR LOG FILE * path のとおったdirectory に置くこと USE VFP_ERROR APPEND BLANK REPLACE ERRDATE WITH DATE() REPLACE ERRTIME WITH TIME() REPLACE ERRNO WITH nError REPLACE ERRMSG WITH MESSAGE() REPLACE ERRPRG WITH cMethod REPLACE ERRLINE WITH nLine REPLACE ERRCODE WITH MESSAGE(1) USE WAIT CLEAR *エラー内容に対応して処理を分岐 DO CASE CASE nError = 1102 *FDエラー cMSG = "ファイルを作成できません"+CHR(13)+"フロッピーディスクの空き容量が足りないか"+CHR(13)+ "フロッピーディスクが挿入されていません" nANS = messagebox(cMSG,5,"エラー") IF nANS = 2 pERR_VALUE = 1 return ELSE retry return ENDIF *!* cass nError = **** *!* cass nError = **** OTHERWISE *汎用エラー処理ルーチン lcErrorMsg=MESSAGE()+CHR(13)+CHR(13) lcErrorMsg=lcErrorMsg+"Method: "+cMethod lcCodeLineMsg=MESSAGE(1) IF BETWEEN(nLine,1,10000) AND NOT lcCodeLineMsg="..." lcErrorMsg=lcErrorMsg+CHR(13)+"Line: "+ALLTRIM(STR(nLine)) IF NOT EMPTY(lcCodeLineMsg) lcErrorMsg=lcErrorMsg+CHR(13)+CHR(13)+lcCodeLineMsg ENDIF ENDIF IF MESSAGEBOX(lcErrorMsg,17,_screen.Caption)#1 ON ERROR RETURN ENDIF ENDCASE RETURN *********************************************** 以上を切り出して ERROR_HANDLER2.prg として保存して下さい。