你为什么不使用多层try except  这样会保险点

解决方案 »

  1.   

    所有的错误类型定义在 ...\borland\delphi6\source\trl\Sys\sysutils.pas
    凡是 E 打头的几乎全是。
    但这些类型不一定包括数据库返回的错误信息。try
    ...
    except
     on E: Exception do Showmessage(E.Message);
    end; //可以获得数据库返回的错误信息的内容。你也可以试试以下几种方法:try
     ...
    except
      on EZeroDivide do HandleZeroDivide;
      on EOverflow do HandleOverflow;
      on EMathError do HandleMathError;
    else
      HandleAllOthers;  //处理所有其它异常
    end;try
     ...
    except
      HandleException;  //默认处理
    end;*****************************************************
    try
    ...
    except
     on E: Exception do Showmessage(E.Classname);
    end;
    可以返回错误的类型,但一般数据库错误会笼统的显示 EDatabaseError
    ******************************************************你在调试程序的时候Delphi会在每个Exception处中断,无论你是否捕获。运行你的*.exe你会发现一切如你所愿。如果你想在调试时不想系统弹出警告对话框,菜单 Tools\Debugger Options...\Language Exceptions\Stop on Delphi Exceptions 的钩钩去掉;Tools\Debugger Options...\OS Exceptions\Handled by 选user program;on resume选 Run Unhandled
      

  2.   

    所以你先找到Exception的Classname,再Handle它,不就行了吗
      

  3.   

    先找出错误类型
    try
    ...
    except
     on E: Exception do Showmessage(E.Classname);
    end; //假设弹出错误类型为ESomeError根据错误类型写你的错误捕获
    try
    ...
    except
     on ESomeError do Showmessage('外码错误');
    else
      HandleException;  //默认处理
    end;