对数据进行修改的时候,怎么会出现下面的错误
  project project1.exe raised exception class eqleexception with message‘违反了PRIMARY KEY 约束'PK-SA-CAMPAIGN(表名)'’。不能在对象'sa-campaign'中插入重复键。 但是 是用edit编辑表的旧值,不是将新值插入
campaign_id 为主键procedure TSaForm.ButtonModifyClick(Sender: TObject);
begin
with adoTable1 do
   begin
      Try
       Edit;
        FieldByName('campaign_id').AsInteger:=StrToInt(EditCaId.Text);
        FieldByName('geo_loc').AsString:=EditLoc.Text;
        FieldByName('plan_start_dt').AsDateTime:=Datetimepicker1.Date ;
         Post;
        ShowMessage('数据已存盘!');
      except        Cancel;
        ShowMessage('错!');
      end;

解决方案 »

  1.   

    修改后的campaign_id与其他记录重复。
    建议在提交前写个过程,检查修改后的campaign_id是否有重复值,否则退出。
    procedure TSaForm.ButtonModifyClick(Sender: TObject);
    begin
    ADOQuery1.Close;
    ADOQuery1.SQL.TEXT:='select * from sa-campaign where campaign_id='''+EditCaId.Text+'''';
    ADOQuery1.Open;
    if ADOQuery1.RecordCount<>0 then
    begin
      ShowMessage('错!');
      Exit;
    end;
    with adoTable1 do
       begin
          Try
           Edit;
            FieldByName('campaign_id').AsInteger:=StrToInt(EditCaId.Text);
            FieldByName('geo_loc').AsString:=EditLoc.Text;
            FieldByName('plan_start_dt').AsDateTime:=Datetimepicker1.Date ;
             Post;
            ShowMessage('数据已存盘!');
          except        Cancel;
            ShowMessage('错!');
          end;
      

  2.   

    可是比如说我对campaign_id=1时,表的‘姓名’,‘年龄’值进行修改,但是改后的campaign_id值仍是为1,那不是也重复了campaign_id 的值。
    那样改好像不大行。
      

  3.   

    to gaojguo(空)主键约束是指唯一性,
    不管有没有修改campaign_id的值,只要它的值在数据库中是唯一的,就没问题.
      

  4.   

    我是说如果我对campaign_id=1 修改他的'姓名'等,而不变campaign_id的值  但是楼上修改后
    ADOQuery1.Open;
    if ADOQuery1.RecordCount<>0 then
    begin
      ShowMessage('错!');
      Exit;
    表查旬后,ADOQuery1.RecordCount肯定不等0,,肯定有错了