oracle主键错误号为:ORA-00001
希望能填写这里
  except
   ////////////////////////////////////////////////////////////////
      ////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////
      delphi 要在这里捕捉主键冲突的错误?????????????????????????????
      result:=false;
//插入部门记录
function InsertDepartMent(Const DepartM : TDepartMent) : Boolean;
var
  //ADODep : TADOQuery;
  sql : String;
begin
  result := False;
   DM.adoCn.Connected := True;
  //ADODep := TADOQuery.Create(nil);  DM.qrySql1.Connection := DM.adoCn;
sql := 'Insert into Department(DEPT_ID,DEPT_NAME,DIR_LD1,DIR_LD1_PHONE,'+
        'DIR_LD2,DIR_LD2_PHONE,DEP_LD1,DEP_LD1_PHONE,DEP_LD2,DEP_LD2_PHONE,'+
        'DEP_LD3,DEP_LD3_PHONE) values('+DepartM.Dept_ID+','''+
        DepartM.Dept_Name+''','''+DepartM.DirLeader1 +''','''+
        DepartM.DirLeader1_Mobile +''','''+DepartM.DirLeader2+''','''+
        DepartM.DirLeader2_Mobile+''','''+DepartM.DeptLeader1 +''','''+
        DepartM.DeptLeader1_Mobile +''','''+DepartM.DeptLeader2+''','''+
        DepartM.DeptLeader2_Mobile+''','''+DepartM.DeptLeader3+''','''+
        DepartM.DeptLeader3_Mobile+''')';
  //application.messagebox(sql,'DAMN IT');
  //exit;
  try
      DM.qrySql1.Close;
      DM.qrySql1.SQL.clear;
      DM.qrySql1.SQL.Add(sql);
      DM.qrySql1.ExecSQL;
      result:=true;
  except
   ////////////////////////////////////////////////////////////////
      ////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////
      delphi 要在这里捕捉主键冲突的错误?????????????????????????????
      result:=false;  end;
  DM.qrySql1.close;
  DM.adoCn.Connected := False;
end;

解决方案 »

  1.   

    try
          DM.qrySql1.Close;
          DM.qrySql1.SQL.clear;
          DM.qrySql1.SQL.Add(sql);
          DM.qrySql1.ExecSQL;
          result:=true;
      except
          On E:Exception do
          begin
            ShowMessage(E.message);
            result:=false;
          end;  end;
      

  2.   

    delphi 要在这里捕捉主键冲突的错误 应该不象楼上那样写的吧本来我在dal层的错误处理中就什么也没做,只是忽略错误,然后由bll层返回错误"主键重复"
    try
          DM.qrySql1.Close;
          DM.qrySql1.SQL.clear;
          DM.qrySql1.SQL.Add(sql);
          DM.qrySql1.ExecSQL;
          result:=true;  
    except
    end;
    感觉这样处理比楼上方法更好,现在只是想明确捕捉 由oracle返回的"主键冲突"异常.
      

  3.   

    才学delphi一个礼拜就难倒那么多人了?
    还是delphi人气太不行了???
      

  4.   

    ShowMessage(E.message);
    这些东西,使用者肯定看不明白的了
      

  5.   

    不是有错误代码吗,在OnPostErr里写吧,根据返回的错误代码。
      

  6.   

    在except内写
    ShowMessage('主键冲突');
      

  7.   

    晕 
    怎么看问题的?这样来解决:
    try


    except
       on e : EOraError do
        begin
          if e.ErrorCode = 2292 then
            ErrorInfo := '存在此部门的关连记录,禁止删除!'
          else
            ErrorInfo := '数据库操作错误';
          Result := False;
        end;
    end;ErrorCode := 1代表主键重复,针对插入记录的函数使用(同上)
    不过我的是对oracle的,还有,不是使用ADO,因为ADO麻烦,要安装oracle客户端