try
        //  you do
   execpt       //错误处理
   end
   

解决方案 »

  1.   

    我在DBedit的exit事件中编写了自己的检查代码,不过运行时却是系统先发生异常(代码检查),那么,把上面语句放在什么地方呢?
      

  2.   

    你用的是什么数据库控件,Query还是什么?应该在它的OnUpdate之类的事件里写,Query已经有了处理错误的事件OnUpdateError.
      

  3.   

    不知道异常是怎样发生的?以后最好把发生异常的情形和错误信息打出来。如果无法在程序中捕捉异常,试试以下办法:
    在Form中加一个处理异常的方法:
    procedure HandleException(Sender: TObject; E: Exception);
    加一个变量:
    FOldExceptHandler: TExceptionEvent;
    在FormActivate事件中这样写:
    FOldExceptHandler := Application.OnException;
    Application.OnException := HandleException;
    在FormDeactivate事件中这样写:
    Application.OnException := FOldExceptHandler;在HandleException方法的实现中判断是DBEdit的异常,简单地,Exception is EDataBaseError,然后处理它,否则如果FOldExceptHandler不为nil,传给它。
      

  4.   

    是这样的,我用的是TTable控件,DBEdit所对应的表中的字段类型是Short类型,范围在-32768到32767之间。我在DBEdit的exit事件中写了代码把它限制在1到9999之间。测试时,我在DBEdit中输入大于32767的值(当然还有小于-32768和为空的情况),系统就先发生异常,指示无效的字段值,而exit事件根本就没有发生。所以我想控制此异常。但是,好象在TTable的OnPostError,OnUpdateError,OnEditError中写代码捕获异常也没用。如我在TTable的OnEditError中:
    const eMaxValErr=9731;
    ...
    procedure TmyDm.buTableEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    begin
     if (E is EDBEngineError) then
        if (E as EDBEngineError).Errors[0].Errorcode=eMaxValErr then
        begin
          Showmessage('MaxValErr');//testing
          Abort;
        end;
    end;
    同上测试后,异常依旧。
    agui讲的满有道理,我想回去试试。
      

  5.   

    你可以在 DBEdit 的关联的 TField 的 OnSetText 事件中判断,当然你最好使用永久字段。
      

  6.   

    前辈agui的建议我已经试过了。还是系统的异常先发生。
    异常如下:
    Project **.exe raised exception class EDatabaseError with messaage '1222222222' is not a valid value for field 'Id'.The allowed range is -32768 to 32767.
    按确定后,才出现自己的异常代码。
      

  7.   

    你可以在DataSource的OnUpdateData事件试一下,如果可以的话,请给我加分。
      

  8.   

    short型只能存储 -32768 to 32767,这个范围呀,你往里面放1222222222有啥意义呢?.
      

  9.   

    啊!在调试的时候是先出现系统的异常,后出现自己的提示的.
    你直接运行EXE文件就可以的了.OK!
      

  10.   

    用try...except...end.可以控制异常为你所用
      

  11.   

    多谢agui和lfh,在delphi环境中运行程序的话,系统先发生异常,直接运行.exe的话,系统没有异常了,一切正常,只是关闭程序时会出现蓝屏。不管怎样,多谢了。给分。(分数不多,望笑纳)。奇怪,怎么没法给分呢?好象没有密码框?
      

  12.   

    给分了,同时对mrlining表示抱歉,我按照agui的方法解决了问题。下次在给你吧