怎样才能在程序里扑获DBEnigeError异常,比如在一个主健字段插入一个重复的代码
整样才能输出组健重复的信息,
第二:如果后台数据库有检查约束,有怎样捕获

解决方案 »

  1.   

    try
      Query.ExeSQL;
    except
      on E:Exception do begin
        messagebox(self.handle,PChar(E.Message),'Error',MB_ICONERROR);
      end;
    end;
      

  2.   

    同意belllab(bell) ,我的做法和他基本一致。
      

  3.   

    我用Sql Server的做法:
    1、编一个公共的错误处理函数MyDBError
    2、在事件中调用(PostError)
    3、定义错误常量
    const
    aliasname:string='connectdb';//数据库别名
    ekeyviol=9729;//唯一健值数据重复
    eminvalerr=9730;//小于字段的最小值限制
    emaxvalerr=9731;//大于字段的最大值限制
    erequiredfieldmissing=13059;//必需输入值的字段,不能为空
    eforeignkey=9733;//找不到一对多关系的主数据表
    edetailsexist=9734;//不能修改或删除一对多关系的主数据表记录
    emasterlevel=9735; //一对多关系的主数据表等级错误
    elookuperr=9736;   //字段值超出lookup范围
    elookupopenerr=9737; //lookup数据表打开失败
    edetailopenerr=9738;//一对多关系的子数据表打开失败
    emasteropenerr=9739;//一对多关系的主数据表打开失败
    efieldisblank=9740;//字段是空的4、函数代码
    Procedure MyDBError(E: EDatabaseError);
    var
    idberror:integer;
    begin
    if (E is EDBengineError) then
      begin
    idberror:=(E as edbengineerror).errors[0].errorcode;
    //showmessage(inttostr(idberror));
    case idberror of
         erequiredfieldmissing:
    begin
    Application.MessageBox('关键字不能为空,请重新输入!','错误', MB_OK );
    exit;
    end;
    ekeyviol:
    begin
           Application.MessageBox('编号重复,请重新输入!','错误', MB_OK );
    exit;
    end;
    end;
    end;
    end;不够的话自己再扩充