Delphi中try…except…end与try…finally…end的应用.docx

上传人:牧羊曲112 文档编号:3155476 上传时间:2023-03-11 格式:DOCX 页数:6 大小:38.75KB
返回 下载 相关 举报
Delphi中try…except…end与try…finally…end的应用.docx_第1页
第1页 / 共6页
Delphi中try…except…end与try…finally…end的应用.docx_第2页
第2页 / 共6页
Delphi中try…except…end与try…finally…end的应用.docx_第3页
第3页 / 共6页
Delphi中try…except…end与try…finally…end的应用.docx_第4页
第4页 / 共6页
Delphi中try…except…end与try…finally…end的应用.docx_第5页
第5页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Delphi中try…except…end与try…finally…end的应用.docx》由会员分享,可在线阅读,更多相关《Delphi中try…except…end与try…finally…end的应用.docx(6页珍藏版)》请在三一办公上搜索。

1、Delphi中tryexceptend与tryfinallyend的应用Delphi中tryexceptend与tryfinallyend的应用 在Delphi的中,提供了tryexceptend和tryfinallyend语句。本人在过去得编程过程中,深刻地体会到,这两个语句的合理使用,可以带来很多好处。一方面可以使程序结构更加清晰,使得我们不用编写大量的意外情况处理的代码;另一方面使我们可以很容易的编写出十分稳定可靠的程序。 一、我们为什么要使用try意外控制语句? 假设我们现在要编写一个程序,在这个程序中需要对一个远程文件进行一系列操作。先看如下代码: 代码1: try OpenRemo

2、teFile; UpdateRemoteFile; CloseRemoteFile; except on E: Exception do begin CloseRemoteFile; ShowErrorMessage; end; end; 这段代码中OpenRemoteFile和UpdateRemoteFile都有可能由于各种意外情况导致错误,当错误发生后,错误句柄将被捕获,继而执行on E: Exception do之后的语句。 设想如果Delphi没有提供try语句,那么我们的程序将被写成: 代码2: if OpenRemoteFile then begin if UpdateRemote

3、File then CloseRemoteFile; else begin CloseRemoteFile; ShowErrorMessage; end; end else ShowErrorMessage; 不用说,这两段程序谁更“好”,谁更不容易出错。而且在实际使用中可能需要对远程文件做更复杂的操作。 二、try语句的一些简单应用。 在Delphi编程中常常遇到一些必须互相配对的语句,例如:对象的创建和释放;文件的打开和关闭;TDataSet的打开和关闭。如果程序中不能很好的处理这些语句,就导致许多不可预测的现象。请参考如下代码: 代码3:显示一个“关于”对话框。 frmAbout :=

4、TfrmAbout.Create(Application); try frmAbout.ShowModal; finally frmAbout.Free; end; 又见如下代码: 代码4:备份模块备份按钮被按下的处理。由于操作时间比较长,按照Windows操作风格需要将光标变成沙漏的形状,但是无论备份是否成功都应会将光标恢复缺省状态。 procedure btnBackupClick(Sender: TObject); begin Screen.Cursor := crHourGlass; try 备份处理 except 当备份中发生意外后的处理 end; Screen.Cursor :=

5、crDefault; end; 代码5:通过TQuery打开一个查询读取某些信息,完成后关闭。经验表明以下代码将比较可靠。 var qry: TQuery; sErrMsg: string; begin if qry.Active then qry.Close; try qry.SQL.Clear; qry.SQL.Add(select .); /加入SQL语句 qry.Open; 读取查询中的信息,进行有关操作 qry.Close; except on E: Exception do begin sErrMsg := E.Message; if qry.Active then qry.Clo

6、se; ShowMessage(sErrMsg); end; end; end; 三、更复杂一些的应用 首先需要了解try语句与raise语句之间的关系。其实所有能够被try语句捕获的意外情况都是通过raise语句产生的。以前的例子程序为什么没有出现raise,是因为Delphi在提供有关功能的时候已经使用了raise语句。但是对于一些Delphi不产生意外,而我们又希望能够通过与其它意外情况相同的意外处理,那么我们可以在语句中自己raise一个意外,请看以下代码。 代码6:打开一个查询,在正常情况下至少由一条查询结果记录,如果没有记录肯定是某个地方发生错误,不能继续处理。 var qry:

7、TQuery; sErrMsg: string; begin if qry.Active then qry.Close; try qry.SQL.Clear; qry.SQL.Add(select .); /加入SQL语句 qry.Open; if qry.eof and qry.bof then raise Exception.Create(意外地发现数据表空。); 读取查询中的信息,进行有关操作 qry.Close; except on E: Exception do begin if qry.Active then qry.Close; 意外情况的处理 end; end; end; 请注

8、意其中的“raise Exception.Create”语句。当查询结果为空的时候,在正常情况下,系统是不会有Exception产生的,但是这是一种用户定义的错误,因此在其后的raise语句中我们人为的产生一个Exception。这样的话当查询结果为空的时候,程序将跳到“on E: Exception do”处继续执行。 try语句可以被嵌套。以下代码就是一种典型的应用: 代码7:打开一个数据表,然后用游标的方式添加一条记录。 var tbl: TTable; begin if tbl.Active then tbl.Close; try tbl.Open; tbl.Append; try t

9、bl.FieldByName(F1).AsString := sF1Value; tbl.FieldByName(F2).AsString := sF2Value; tbl.Post; except tbl.Cancel; raise; end; tbl.Close; except on E: Exception do begin if tbl.Active then tbl.Close; 意外情况的处理 end; end; end; 这段代码中当内层的try语句块肿是新增一条记录的处理,当新增一条记录的过程中,如果发生错误,首先应tbl.Cancel,但是这时候我们并不希望在这里完成我们所有

10、的出错之后的处理,这时我们可以通过一个单独的“raise”语句将Exception交给外层的try语句来处理。这里我们为了能够说明问题,简化了很多代码。在实际情况中可能将添加一条记录的处理封装成一个procedure,在这个procedure中使用这种写法可以使程序在出错的处理中也有好的封装性。 在使用try语句的时候,以下这种情况再Delphi中是不允许的,请看代码: 代码8: try 有关的处理代码 except on E: Exception do begin 处理代码1 try 处理代码2 except end; 处理代码3 end; end; 也就是说在出错处理中不可以再使用try语句块。但是如果将以上代码等价的转换为下列代码Delphi是允许的。 代码9: procedure ExceptionProcess; begin try 处理代码2 except end; end; try 有关的处理代码 except on E: Exception do begin 处理代码1 ExceptionProcess; 处理代码3 end;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号