如题,DELPHI版本是6.0,数据库是Oracle8I,因为我在数据表里设了一个字段为唯一性,所以在插入一条新记录的时候如果表里的记录的字段已经有了这个数据,Oracle就会出错,提示违反唯一性,请问我在DELPHI中怎么捕捉它?高手救我

解决方案 »

  1.   


    如果是直接连接到数据库中的,你可以直接将记录添加进去,如果有重复的话,那么程序将会发生异常,在Delphi中捕住这个异常即可(不要理会oracle的异常提示)
    代码:
    With DataSet1 do 
    begin
      append;
      fieldbyname('field1').value := edit1.text;
      ......
      try
        post
      except
        ShowMessage('Exception!');
        DataSet1.cancle;
      end;
    end;如果是多层结构的话,那么会麻烦一点;需要增加一个错误处理单元在拥有数据集的窗体中;幸运的是,我们不需要自己编写这个错误的单元,Delphi自己已经带有了
    在new->Dialogs->RecoCile Error Dialog
    当然,你需要在TClientDataSet的TimeReconcileError事件中加入如下代码:
    Action := HandleReconcileError(DataSet,UpdateKind,E);
      

  2.   

    insert.click
    --------
    beging
      with query1 do
      begin
        insert;
        try
          FieldByName('code').asString := edit1.text;
          FieldByName('name').asString := edit2.text;
        except
          ShowMessage('数据类型错误!');
          Raise;
        end;
        ApplyUpdates;
        CommitUpdates;
      except
        CancelUpdates;
      end;
    end;Query1的OnUpdateError事件
    -----------
    begin
      if Copy(E.Message, Pos('ORA', E.Message), 9) = 'ORA-00001' then
        ShowMessage('主键冲突!')
      else ShowMessage(E.Message);
    end;