我用AdoQuery连接SqlServer,当记录出现重复值时,会抛出异常EOleException,这样的异常处理如何处理。
我是如下处理的,不行,大家给看看如何才可以:
try
  AdoQuery1.append;
  ....
  AdoQuery1.post;
exception
  on E:EOleException do
     MessageDlg('出现重复记录!',mtWarning, [mbOK], 0);
end;

解决方案 »

  1.   

    1. 你在调试程序的时候Delphi会在每个Exception处中断。
    运行你的*.exe你会发现一切如你所愿。2. 如果你想在调试时不想系统弹出警告对话框,
    菜单 Tools\Debugger Options...\
    Language Exceptions\Stop on Delphi Exceptions 的钩钩去掉;
    Tools\Debugger Options...\
    OS Exceptions\Handled by 选user program;on resume选 Run Unhandled3. 你确定你的错误类型一定是EOleException?
    所有的错误类型定义在 ...\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
    --------------------------------------------------------
      

  2.   

    sqlsever里面不允许有完全相同的记录,你只要设置主键id自动增1,就不会出现报错的问题了,当然你可以在post之前检查有没有相同的问题,有的话就弹出相应的处理对话框