一个try...except 问题!! ( 积分: 100 )

  • 主题发起人 主题发起人 雨林18
  • 开始时间 开始时间

雨林18

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了这样一段代码,但我不知道在保存时候发生异常如何给用户一个提示,在保存时候发生异常时候我想给用户这样一个提示showmessage('保存出错!');!!请高手告知,十分感谢!!!
try
ziyufrm.cbmdset.Post;
ziyufrm.cbmdset.ApplyUpdates(0);
ziyufrm.u8mcnnt.CommitTrans;
except
begin
ziyufrm.u8mcnnt.RollbackTrans;
showmessage(ziyufrm.u8mcnnt.Errors.Item[0].Description);
ziyufrm.dbgrideh1.Enabled:=true;
exit;
end;

哦,还有一个问题就是保存出错时,如何释放前面保存时候的死进程!!!
 
try
try
//数据保存语句
finally
//释放进程
end;
except
//这里不需要begin
ShowMessage('保存出错!');
end;
 
to ChrisMao
我在中间加入
finally
//释放进程
end;
这句时候出错,还有释放的语句怎么写呀,万分感谢!!!
 
try
ziyufrm.cbmdset.Post;
ziyufrm.cbmdset.ApplyUpdates(0);
ziyufrm.u8mcnnt.CommitTrans;
except
//begin //这个BEGIN不需要
ziyufrm.u8mcnnt.RollbackTrans;
showmessage(ziyufrm.u8mcnnt.Errors.Item[0].Description);
ziyufrm.dbgrideh1.Enabled:=true;
exit;
end;
 
to 李翔鹏 这是我改后的语句,但我在加finally //释放进程 end; 时候编译出错如果不加这句就通过,但不加这句如何释放进程呢?
try
ziyufrm.cbmdset.Post;
ziyufrm.cbmdset.ApplyUpdates(0);
ziyufrm.u8mcnnt.CommitTrans;
finally
//释放进程
end;
except
showmessage('保存出错!');
ziyufrm.u8mcnnt.RollbackTrans;
showmessage(ziyufrm.u8mcnnt.Errors.Item[0].Description);
ziyufrm.dbgrideh1.Enabled:=true;
exit;

end;
 
你的FINALLY和那个TRY对应阿?
你要先学学基本的语法才行阿。
try
try
finally
end;
except
end;
TRY语句必须要完整!
 
一般来讲,系统异常了,不是用户的错误,而且问题已经比较严重
最好是有一个专用的异常机制,当程序异常时,弹出一个特定的窗体,来处理这个异常
通过Application.OnExceptiin可以做到接管系统抛出的任何异常,我是自定义控件来处理异常的,这是其中具体的代码
class procedure TfrmExceptionRept.StartUp(Sender: TObject; E: Exception);
begin
frmExceptionRept := TfrmExceptionRept.Create(Application);
frmExceptionRept.ExceptionRept(Sender, E);
frmExceptionRept.Free;
end;

procedure TfrmExceptionRept.ExceptionRept(Sender: TObject; E: Exception);
var
SList: TStrings;
MailCap: string;
begin
mmoEx.Lines.Text :='软件异常:'#13 + E.Message;
Self.Height := 129;
btnDetail.Enabled := True;

{发送邮件}
SList := TStringList.Create;
AddFmt(SList, '软件异常信息自动报告', []);
AddFmt(SList, '-----------', []);
AddFmt(SList, '计算机名: %0:s', [GetPCName]);
AddFmt(SList, 'IP地址: %0:s', [GetHostIP]);
AddFmt(SList, '登陆用户: %0:s', [GetCurrentUserName]);
AddFmt(SList, '操作系统: %0:s', [GetOSInfo]);
AddFmt(SList, '系统版号: %0:s', [GetSysVersion]);
SList.AddStrings(mmoEx.Lines);
MailCap := Format('软件异常:通用评卷(%0:s)', [GetPCName]);
SndMail('smtp.163.com', '14574256@163.com', '******', MailCap, '', SList);
SList.Free;
{发送邮件.}

ShowModal;
end;
 
to 李翔鹏 十分感谢,能不能再告诉我释放保存异常的进程语句怎么写呀,万分感谢!!
 
try
cmdxm.Execute; // lxp add 加TRY 防报错
except
on e : exception do
begin
ErrList.Add(SqlTxt+' //'+e.message);
end;
end;
if ErrList.Count > 0 then
begin
ErrList.SaveToFile(extractfilepath(application.exename)+'sqlerror.txt');
Application.MessageBox(pchar('有SQL语句没有执行成功!请到'+extractfilepath(application.exename)+'sqlerror.txt中查看!'),'提示',mb_ok or Mb_iconerror);
end;
ErrList.Free;
 
采用这种方法之后,还可以故意地抛出异常,即raise 语句,来让程序运行时,捕捉到预设的Bug陷阱,可作为一种辅助性的软件测试技术
 
接受答案了.
 
后退
顶部