我想在自己编写的一个系统(MIS系统)中使用一个专门的类来处理系统中发生的错误或异常,目前还没有一个好的方案,想听听大家的意见后再动手。如果可能,请大家说得具体些。如果有好的建议,等本人实践成功后当贡献给大家:)

解决方案 »

  1.   

    Application.OnException := CustException;
    procedure CustException(Sender: TObject; E: Exception);
      

  2.   

    关注,我遇到同样的问题,Delhpi出错时只是给你一个地址,而不提示是哪方面的问题。这一点不如微软做的好。在VB中用一个Err.Description接解决了
      

  3.   

    关注,我要被这些异常搞死了,只有地址没有任何提示,建议的delphi甚至borland增强着一块的功能。
      

  4.   

    hisourcezhang(小鱼龙变化)
    你没有捕捉,在error对象中message和id/errno属性。
      

  5.   

    首先我认为你没有使用好异常处理机制.
    Try 
     except on e:exception do
          showmessage(e.message);// Raise Exception.create('将该异常提交给上一层处理')
    end;
    如果你想自定义一个异常类,那就继承Exception类
     type 
       myexception =class(Exception)
         Procedure myproc();
         ...
       end;
     然后可以这么使用
      try
       ...
      except 
            on E:myexception do
             begin end;
            on E:Dbexception do
             begin end;
            on E:IOexception do
             begin end;
     end;  
     
    如果还要象Java那样需要有finally处理的话,就这么写
     try  
       try         
        ..
       exception e:myexception do
        begin
            //deal this Exception;
         Raise Exception.create('');//Resase this exception
        end;
     finally 
       begin
        //do something,For example:release some resource
       end;
     end;
    不过如果只是显示异常信息的话,你是用Raise Exception.create()就够了.
      

  6.   

    3.异常处理(try...finally)
    ━━━━━━━━━━━━━━━━━━━━━
    格式:try statement1 finally statement2 end;
    说明:程序顺次执行statement1 和statement2,当执行statement1出现异常错误时,
          程序直接从出错的语句跳转到finally,去执行statement2的部分,从而确保
          调用的资源能够被释放。procedure TForm1.Button1Click(Sender: TObject);
    var
     APointer : Pointer;
     AnInteger, Andividend : Integer;
    begin
     ADividend := 0;
     GetMem(APointer,1024);              //申请1k的内存
     try
       AnInteger := 10 div Adiviend;     //导致异常
     finally
       FreeMem(APointer,1024);           //虽然出现异常,但仍然能释放被分配的内存
     end;
      

  7.   

    e.message不就是出错信息吗?
    还有要定义自己的异常类只用继承就可以了
    type
     EMyErrot=class(Exception);
      

  8.   

    從Exception過來做自已的異常處理類,你可以在異常中加入出錯的代碼!
      MyError=class(Exception)
      Private
        fCode : Integer ;
      public
        constructor Create(Code : integer;const Msg: string); OverLoad ;
    const); OverLoad ;
        property Code : integer Read fCode ;
      end ;如此使用:
     if price<0 then
       Raise MyMyError.Create(0,'價格不能小于零');
    產生自己的異常,
    在外部調用時用
      try
        ...
      except
        on E : MyErrot do
        case e.code of
          0 :... ;
          1 :... ;
        end;
      end;