异常的类型是不能通过try ..except 得到。
或者用CASE ,但好象没必要。
你编译的时候,自然会报出异常的类型。
TRY。。EXCEPT 就可以是用来捕获这个异常。

解决方案 »

  1.   

       except
        on E: EDBEngineError do
        begin
          for i := 0 to E.ErrorCount - 1 do
          begin
            if E.Errors[i].ErrorCode = $2601 then
            begin
              Application.MessageBox('已经存在这个编号,请选择其他编号!', '提示', 48 + mb_ok);
            end
            else
              Application.MessageBox(pChar('保存错误!错误信息为:' + E.Message), '提示', 48 + mb_ok);
            Exit;
          end;
     
      

  2.   

    procedure TMainForm.FormCreate(Sender: TObject);
    begin
      Application.OnException := ApplicationException;
      Application.Title := Caption;
    end;{ 记录每次raise 抛出的异常信息 }
    procedure TMainForm.ApplicationException(Sender: TObject; E: Exception);
    begin
      if E is EDBEngineError then
        ...
      else if E is EMyException then
        ...
      ...
      //记录E.Message信息
      Application.ShowException(E);  //相当于MessageBox(E.Message)
    end;type
      EMyException = class(Exception);buttonOnClick:
      raise EMyException.Create('Hello World');如果每个异常都用try except来保护,那太累人了,写Application.OnException事件,将全部包含起来,然后再在onException处理。
      

  3.   


    try
     ...  
    except
      showmessage(TObject(ExceptObject).name)
    end;