主键重复时的错误值:eKeyViol=9729
可以在PostError中用
(E as EDBEngineError).errors[0].Errorcode=eKeyViol 来捕捉.主键为Null时的错误值是多少.哪位大虾知道,烦请回复.

解决方案 »

  1.   

    我的数据控件为Adoquery,错误代码应该如何捕捉
      

  2.   

    要取得错误的原生码,那么我们必须从EDBEngineError这个例外对象中取得。但是由ADO产生例外对象并不是从EDBEngineError继承下来的。
    ADOExpress组件在发生错误时产生的例外对象并不像BDE/IDAPI一样是EDBEngineError对象,因此我们无法像BDE/IDAPI的应用程序一样从EDBEngineError取得原生的错误代码。如果你检查封装ADOExpress组件的ADODB程序单元,也会发现ADO的错误是由EADOError类别封装的。
    { Errors }
    EADOError = class(EDatabaseError );请参考下面:
    procedure TForm4.ADODataSet1PostError(DataSet: TDataSet; E:
    EDatabaseError; var Action: TDataAction);
    var
    adoErrors : Errors;
    adoError : Error;
    iCount : Integer;
    begin
    / /开始处理ADO的Errors对象
    adoErrors := ADOConnection1.Errors;
    for iCount := 0 to adoErrors.Count - 1 do // Iterate
    begin
    adoError := adoErrors.Item[iCount];
    lbADOErrors.Items.Add('Error Number : ' + IntToStr(adoError.Number));
    lbADOErrors.Items.Add('Error Source : ' + adoError.Source);
    lbADOErrors.Items.Add('Error Description : ' + adoError.Description);
    lbADOErrors.Items.Add('Error HelpFile : ' + adoError.HelpFile);
    lbADOErrors.Items.Add('Error SQLState : ' + adoError.SQLState);
    lbADOErrors.Items.Add('Error NativeError : ' +
    IntToStr(adoError.NativeError));
    end ; // for
    end ;