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 として保存して下さい。

戻る