PowerBuilder 中全局处理程序错误

PowerBuilder 中全局处理程序错误
在systemerror事件中写入如下代码即可,程序发生错误会弹框提示并记录到错误日志文件中,不写的话只是弹框提示并且是英文
int li_ErrNo  //错误编号
string ls_ErrMsg //错误编号对应的中文错误信息
string ls_Msg   //弹出错误提示框的内容也是最后存到日志文件中的内容
string ls_file //系统错误日志文件名(不用全路径则在当前应用程序目录下生成)
int li_file_no //系统错误日志文件句柄

li_ErrNo = Error.Number
if li_ErrNo = 0 then return


choose case li_ErrNo
	case 1
		ls_ErrMsg = "除数不能为零!!!"
		case 2
 ls_ErrMsg = "引用空对象"
case 3
 ls_ErrMsg = "数组越界"
case 4
 ls_ErrMsg = "枚举值超出函数范围"
case 5
ls_ErrMsg ="函数中逶到负值"
Case 6
ls_ErrMsg ="指定的数据窗口行l列无效"
Case 7
ls_ErrMsg="联接引用时,出现不可解决的外部引用"
Case 8
ls_ErrMsg = "引用带有空下标的数组"
Case 9
ls_ErrMsg = "DLL函数未在当前程序中"
Case 10
ls_ErrMsg = "DLL函数不支持的参数类型"
Case 11
ls_ErrMsg ="对象文件已过期,必须转化为当前版本"
Case 12
ls_ErrMsg ="数据窗口列类型与GetItem类型不匹配"
case 13
 ls_ErrMsg = "不可知的属性引用"
case 14
ls_ErrMsg ="为外部函数打开错误DLL库"
Case 15
ls_ErrMsg = "错误调用外部函数"
Case 16
ls_ErrMsg ="超出最大字符串的长度"
Case 17
ls_ErrMsg ="数据窗口控件中引用的数据窗口对象不存在"
Case 18
ls_ErrMsg ="函数未返回值"
Case 19
ls_ErrMsg ="不能将任意变量中NAME转化为NAME"
Case 20
ls_ErrMsg="没有成功地准备好数据库命令"
Case 21
ls_ErrMsg ="运行时,不正确地引用函数"
Case 22
ls_ErrMsg ="不可知的对象类型"
Case 23
ls_ErrMsg ="不能将NAME类型的对象赋值为NAME类型的对象"
Case 24
ls_ErrMsg ="函数调用与其定义不匹配"
Case 25
ls_ErrMsg = "DOUBLE或REAL表达式溢出"
Case 26
ls_ErrMsg = "不支持对NAME字段的赋值"
Case 27
ls_ErrMsg ="非整型指数不能为负"
Case 28
ls_ErrMsg = "VBX错误:NAME"
Case 29
ls_ErrMsg = "ANY变量需要非整组值"
Case 30
ls_ErrMsg ="外部对象不支持数据类型:NAME"
Case 31
ls_ErrMsg="不支持外部对象数据类型:NAME"
Case 32
ls_ErrMsg ="调用外部对象函数NAME时,未找到名字"
Case 33
ls_ErrMsg ="调用外部对象函数NAME时,参数类型不合法"
case 34
ls_ErrMsg ="调用外部对象函数NAME时,使用不正确的参数数目"
Case 35
ls_ErrMsg ="错误调用外部对象函数NAME"
Case 36
ls_ErrMsg ="访问外部对象属性NAME时,未找到名称"
Case 37
ls_ErrMsg="访问外部对象属性NAME时,类型不匹配"
Case 38
ls_ErrMsg="询问外部对象隅性NAME时、下标数目不正确"
Case 39
ls_ErrMsg ="错误访问外部对象属性NAME"
Case 40
ls_errMsg ="与表达式中任意数据类型不匹配"
Case 41
ls_ErrMsg="表达式中有不合法的任意数据类型"
Case 42
ls_ErrMsg = "在 DLL函数NAME 中,运行时所指定的参数类型与所要求的参数类型不相同"
Case 43
ls_ErrMsg="父对象不存在"
Case 44
ls_ErrMsg ="祖先的函数中具有发生冲突的参数及返回类型"
Case 45
ls_ErrMsg ="外部表溢出"
Case 46
ls_ErrMsg ="空的对象引用不能被赋值或传递给同类型的变量"
Case 47
ls_ErrMsg="变量需要数组值"
Case 48
ls_ErrMsg ="数组的大小与对象的转换不匹配"
Case 49
ls_ErrMsg ="数组的类型与对象的转换不匹配"
Case 50
ls_ErrMsg ="分布服务错误"
Case 51
ls_ErrMsg = "函数或事件的参数不合法"
Case 52
ls_ErrMsg ="分布通讯错误"
Case 53
ls_ErrMsg = "未激活所需报务器"
Case 54
ls_ErrMsg ="服务器未接受请求"
Case 55
ls_ErrMsg ="请求非正常终止"
Case 56
ls_ErrMsg ="非完整地相应请求"
Case 57
ls_ErrMsg ="未联接"
Case 58
ls_ErrMsg ="对象实例不存在"
Case 59
ls_ErrMsg ="不合法的列范围"
Case 60
ls_ErrMsg ="不合法的行范围"
Case 61
ls_ErrMsg ="将NUMBER维数组不合法地转换成对象"
Case 62
ls_ErrMsg = "服务器忙"
Case 63
ls_ErrMsg ="无返回值的函数或事件用于表达式"
Case 64
ls_ErrMsg ="赋值需要数组对象"
	case else
		ls_ErrMsg = "其他错误!!!"
end choose

 

ls_Msg = "~r~n -------------------------------------- ~r~n"
ls_Msg += "出错时间:"+string(today(),'yyyy-mm-dd')+" " + string(now())+ '~r~n' ; 

ls_Msg += "窗口/菜单:"+ Error.WindowMenu + '~r~n'
ls_Msg += "出错对象:"+Error.Object + '~r~n'
ls_Msg += "出错事件:"+Error.ObjectEvent + '~r~n'
ls_Msg += "出错行:"+String(Error.Line) + '~r~n'
ls_Msg += "错误号:"+String(li_ErrNo) + '~r~n'
ls_Msg += "错误信息(中文):"+ ls_ErrMsg  + '~r~n'
ls_Msg += "错误信息(原文):"+  Error.Text  + '~r~n'

MessageBox('系统运行错误',ls_Msg)

//记录错误到文本文件中
ls_file = "syserror.log"
li_file_no = FileOpen(ls_file,LineMode!,Write!,Shared!,Append!)
if li_file_no = 0 then
	MessageBox("出错","不能打开系统错误日志文件!",Exclamation!)
else
	if FileWrite(li_file_no,ls_Msg)<0 then
		MessageBox("出错","写系统错误日志文件出错!",Exclamation!)
	end if
end if