使用异常捕捉处理。
tryexceptfinalllyend;

解决方案 »

  1.   

    try
    except
    finallly
    end;
    F8
      

  2.   

    如果数据库方面关于ADO出错为:
    procedure TDm.ADOQuery1PostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    var
     adoerrors:errors;
     adoerror:error;
     i:integer;
    begin
     adoerrors:=ADOCONNECTION1.Errors;
     for i:=0 to adoerrors.count-1 do
     begin
         adoerror:=adoerrors.item[i];
         if adoerror.nativeerror=2627 then
         begin
           Application.MessageBox('编号已存在,请输入其它编号。','提示',
                                Mb_Defbutton1+Mb_IconInformation+MB_ok);
           break;
         end
         else
         if adoerror.nativeerror=515 then
         begin
           Application.MessageBox('编号不能为空,请重新输入。','提示',
                                Mb_Defbutton1+Mb_IconInformation+MB_ok);
           break;
         end
         else
           Application.MessageBox('输入数据非法,请重新输入。','提示',
                                Mb_Defbutton1+Mb_IconInformation+MB_ok);
           break;
     end;
     with dataset do
     begin
      if state =dsinsert then cancel
      else if state=dsedit then
      begin
        edit;
        for i:=1 to fieldcount-1 do
           fields[i].Value :=fields[i].OldValue; 
       end;
     end;
    Action:=daAbort;
    end;
      

  3.   

    newsofter(横空出世小霸王) 的方法不错。
      

  4.   

    try
    except
    end;try
    finally
    end;截Application.OnException事件.
      

  5.   

    试试:
    try ...
    except
      on EZeroDivide do HandleZeroDivide;
      on EOverflow do HandleOverflow;
      on EMathError do HandleMathError;
    end;
      

  6.   

    错误处理
    try
     //此处加入程序正常运行时的语句
     ...
    except
     //此处加入程序不正常运行时的语句1
    except
     //此处加入程序不正常运行时的语句2
    except
     //此处加入程序不正常运行时的语句3
    ...
    except
     //此处加入程序不正常运行时的语句n
    ...
    end;
    try
      //此处加入程序正常运行时的语句
    finallly
      //此处不管是什么错误,都会按此语句处理
    end;
      

  7.   

    异常处理 + Log文件(错误日志)
      

  8.   

    我也有这方面的困惑,错误处理可以写成一个通用的过程调用就行了,不知道那位大侠写好了我等就省心了,哈哈,我自己写了一个,抛砖引玉和上面有位大侠的类似,大家多指教
    还有个问题就是捕捉了EDataBaseError错误怎么转换成ado错误啊?
      //在主程序中实现下述过程
      //application.OnException := MyException;
      //以下用MyError封装了MessageDlg();
    procedure MyException(Sender: TObject; E: Exception);
    var
      adoErrors: Errors;
      adoError: Error;
      iCount: Integer;begin
       if E is EDataBaseError then
       begin
          adoErrors:=form1.ADOConnection1.Errors;   //ADO错误类型是什么?
       for iCount :=0 to adoErrors.Count-1 do
         begin
           adoError := adoErrors.Item[iCount];       case adoError.NativeError of         32   :      //无法定位行集,记录被其他用户修改
               MyError('该记录已被其他用户修改,请重新修改记录!');         515  :      //不能为 NULL
               MyError('记录不能为空,请重新输入!');         1023 :     //不能插入空行
               MyError('不能插入空行,请输入数据!');         2627 :      //违反主键约束
               MyError('主键重复,请重新输入!');         else   //ADO其它错误
               MyError(adoError.Description + ' ' + inttostr(adoError.NativeError));        end;  // case
            break ; //跳出for
          end;     //for
        end    // if
        else
           MyError(E.message);   //其它错误end;