Try
  DM.TbReader.Post;***
  Except
    On EDBEngineError Do
    Begin
      MessageDlg('编号为当前主索引,不能重复!请键入另外的值!',mtError,[mbYes],0);
      StudentNoDBEdit.SetFocus;
      Exit;
    End;
  End;
我键入一个与数据库主索引有重复的记录,***这一行当然要出现异常EDBEngineError,
可是这个异常却没有被Try.. Except..捕捉到,相当于Try.. Except..没有起作用~
why?

解决方案 »

  1.   

    不是try..except..没起作用;可能是on edbengineerror do 判断不正确;
    你将这个判断条件去掉就可以了;另外;不能在delphi环境下运行;要编译出去;独立运行才可以;
      

  2.   

    你把exit去掉试试
    要是还不行的话就是你的程序问题了
      

  3.   

    47522341 说的很正确.不能在Delphi F9,捕捉不到的
      

  4.   

    try
        DM.TbReader.Post;
      except
        on E: Exception do
        begin
          MessageDlg('编号为当前主索引,不能重复!请键入另外的值!',mtError,[mbYes],0);
          StudentNoDBEdit.SetFocus;
          exit;
        end;
      end;
      

  5.   

    楼上的两位兄弟,能不能给我说说为什么在debug环境下捕不到异常,谢谢
      

  6.   

    47522341(睡到8:30) 说的对。
    你用ON……DO 的话就是指定了异常类,如果主键重复不是这个异常类的话,是不会执行DO下面的语句的。
    而且异常在DELPHI的调试环境下是无论如何都要触发的,要看TRY……EXCEPT有没有起作用,要编译成可执行文件再运行的。
      

  7.   

    这是Delphi调试器内部的问题.是优点也是缺点.
    优点,运行时,系统会自动处理有异常的地方,不会因为程序员忘记处理而导致程序突然中止
    缺点,调试时,系统异常无条件出现.