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