try
  DataSoure1.DataSet.Post;
except
  on e:exception do
    if pos('key violation',e.message)<>0 then dosomething;0D
   //如果关键字重复会执行到上面一句,但是错误信息不一定是'key violation',可能写法不同。最好用错误类型判断
end;
—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
             毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
  I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”等字样,删除它们';
I.Desire := '加不加分随你';
—————————————————————————————————
       

解决方案 »

  1.   

    我ShowMessage(e.message)可以有结果吗?
      

  2.   

    如果要提取ADO的错误,需要使用ADOConnection对象来提取。
    (请在Unit的inteface的uses子句中引用ADOInt单元)
    var
      adoErrors: ADOInt.Errors;
      adoError: ADOInt.Error;
      i: Integer;
    begin
      adoErrors := ADOConnection1.Errors;
      for i := 0 to adoErrors.Count - 1 do
      begin
        adoError := adoErrors.Item[i];
        ShowMessage(adoError.Description);
      end;//for
    end;当然,这捕捉的是ADO Provider的错误和异常,对于ADO自身的错误,因为ADO被封装在了ADOExpress中,所以可以采用和BDE类似的方法来捕获错误。