说得夸张点,差不多可以当作if来用?(打个比方而已)
比如,我在试图创建一个文件的时候,是不是应该用try来做这个事情?
这样如果没有建立成功,可以转到except里面去showmessage?
我试着这样做了一次,但是没有转入到except里面去……
所以有些奇怪了……
我看了一些例子,很多都是用on某个条件转入的,但是我并不知道会报什么错出来啊,on后面的东东怎么写呢?我就想问问,
try这个语法应该什么时候使用?
该如何使用?
比如,我在试图创建一个文件的时候,是不是应该用try来做这个事情?
这样如果没有建立成功,可以转到except里面去showmessage?
我试着这样做了一次,但是没有转入到except里面去……
所以有些奇怪了……
我看了一些例子,很多都是用on某个条件转入的,但是我并不知道会报什么错出来啊,on后面的东东怎么写呢?我就想问问,
try这个语法应该什么时候使用?
该如何使用?
解决方案 »
- 窗口控件
- 怎样将影音文件以二进制的形式上传到数据库中
- 怎么获取本机上所有的硬盘分区的盘符
- 第九期:CSDN论坛秀-Delphi版-本期作秀:ehom(?!)
- 一个很不错的网站,代码很丰富,有兴趣去看看吧!!!
- 怎么让SQL SERVER到一定的时间运行一个程序啊!
- RichEdit控件是不是只能打开*.txt文件,如果不是,那打开*.doc文件怎么用?还有其他类型的文件?
- 帮忙看一下有什么问题!!
- 如何用SQL语句进行数据的插入删除?
- ★★★快来抢100分!!!★★★:用mediaplayer组件播放*.mp3,*.mpg格式的文件为何速度特慢,质量特差,有没有好的解决方案?
- IT人士薪资大调查 学习delphi到了大师级别最多能挣多少钱啊?
- ActiveForm中包含了一个OCX,为什么不能调用?谢谢
这事你就
try
连接数据库服务器
execept
报错:连接服务器失败!
end;
而if往往是条件明确时。
procedure TForm1.Button1Click(Sender: TObject);
var
SL: TStringList;
begin
try
StrToInt('ff'); //发生异常跳到EConvertError
SL.SaveToFile('C'); //发生异常跳到Exception
except
on E: EConvertError do //处理Try..Except之间的EConvertError异常
begin
ShowMessage('转换错误');
end;
on E: Exception do //处理Try..Except之间的所有上面没有处理过的异常
begin
ShowMessage('其他错误');
end;
end;
end;
----------------------------------------------
try
ADOConnection1.BeginTrans;
///////////////在数据库中删除相应字段的纪录
MyDataSet.CommandText:='Select Device_ID from Device where Device_IP=?;
MyDataSet.Parameters[0].Value:=TCRec.DeviceIP;
MyDataSet.Parameters[1].Value:=TCRec.DeviceNum;
MyDataSet.Active:=True;
if not MyDataSet.Eof then
begin
tempID:=MyDataSet.Fields[0].AsInteger;
end;
MyDataSet.Active:=False; MyQuery.SQL.Add('Delete from TC10BE1 where TC10BE1_Device=?');
MyQuery.Parameters[0].Value:=tempID;
MyQuery.ExecSQL;
MyQuery.Close; MyQuery.SQL.Clear;
MyQuery.SQL.Add('Delete from Device where Device_ID=?');
MyQuery.Parameters[0].Value:=tempID;
MyQuery.ExecSQL;
MyQuery.Close;
///////////////数据库删除完成
///////////////删除当前设备列表当中的设备纪录
DelDeviceList(TCRec.DeviceIP,TCRec.DeviceNum);
//////////////当前列表中的设备纪录删除成功
//////////////释放当前设备的图标资源
TCRec.Free;
//////////////图标资源释放成功
ADOConnection1.CommitTrans; except
on E:Exception do
begin
showmessage('删除过程中发生错误:' + E.Message);
ADOConnection1.RollbackTrans;
end;
end;
但我的观点是最好能写的地方就写,外加就是对异常的判断要区别对待,免得写多了try后不知道从哪里错了
但是不知道怎么使用成功。
比如我试图创建一个目录的时候,procedure TForm1.Button1Click(Sender: TObject);
begin
try
mkdir('x:\aaa')
except
showmessage('wrong!')
end;
end;就这么简单的一个试验,
我机器没有X盘,但是创建的时候并没有跳转到except中去。
这是怎么回事?
postren(小虫)的例子中,
except中,
on E:
这个条件是怎么回事?
E代表什么?
except中,
on E:
这个E指的是你的捕获异常的种类,当然你也可以用来代替,比如on abc:exception do
而且可以在捕获不同的异常时异常的时候报不同的错误,比如:
procedure TForm1.Button1Click(Sender: TObject);
begin
try
edit1.Text:=inttostr(strtoint('ad'));
except on a:EConvertError do
edit1.Text:=a.Message;
on b:EFOpenError do
edit1.Text:=b.Message;end;
begin
try
mkdir('x:\aaa')
except
showmessage('wrong!')
end;
end;
-------------------------
上面这个我做了测试,我的会出现异常,也会执行
showmessage的...你再试一下看看。
begin
try
mkdir('x:\aaa')
except
//showmessage('wrong!');
on E:Exception do
begin
showmessage(E.Message);
end;
end;
end;
------------改成这样你就会看到错误提示:Invalid filename
那就是说E这个变量是可以随意取的,
对吧?不过还有个问题,
上面的这段程序我执行还是有问题,
没有任何提示框。
难道是因为盗版delphi?
我另开一个帖子讨论吧。
顺便问问跟踪的东东。这个帖子先解了。
不好意思,
这个帖子分数太少了……