请帮小弟我看看如何改 
With DM_Priceman.Que_Action do
 begin
  try
  Close;
  SQL.Clear;
  SQL := ActionSQL;
  //Add SQL parameters here
  ParamByName('Mem_no').AsString := EdtMemno;
  ParamByName('Mem_name').AsString := EdtMemName;
  ParamByName('City').AsString := EdtCity;
  ParamByName('Address').AsString := EdtAddress;
  ParamByName('Zip').AsString := EdtZip;
  ParamByName('Person').AsString := EdtPerson;
  ParamByName('Tel').AsString := EdtTel;
  ParamByName('Fax').AsString := EdtFax;
  ParamByName('E_mail').AsString := EdtEmail;
  ParamByName('Web').AsString := EdtWeb;
  ParamByName('Main_prod').AsString := EdtMainprod;
  ParamByName('Intro').AsString := RETIntro;
  ParamByName('R_date').Asstring:= DTPRDate;
  ParamByName('OLD_Mem_no').AsString := EdtOldMemno;
//*************************************************************
  ExecSQL; 
//就这条语句出错,如何跳过去,不提示出错
//出错背景:'Mem_no'是表的主健,在修改时,表中出现了重复。所以提交出错。
//能不能在不用再写查询sql的前提下,跳过execsql提示的信息错误,而写成自定义的错误提示窗,另外,try...finally he try...except 怎么不能实现啊
  
//*********************************************************
  Finally
  messagedlg('程序运行过程出现以外错误,请退出后重新运行本程序',mterror,[mbok],0);
 end;

解决方案 »

  1.   

    Finally改成Except
    另外:最好TRY放到EXECSQL前面,运行EXE的时候就看不到错误了!
      

  2.   

    Delphi中有一个ApplicationEvent的控件,你试试吧.
    这样可以把所有的错误信息都捕捉到一个窗体中显示出来,更便于管理.甚至可以把这些信息保存下来,然后发送给你.
      

  3.   

    try机制是windows系统提供的出错处理功能,当出现错误时会不停的出栈直到找到一个except语句,然后执行except部分的内容。Finally改成Except 的方法是对的,但是在delphi的调试环境中仍然会报错是因为为了便于调试,可以通过设置option取消的,但是当编译成exe文件后单独执行就不会报错了。