两张表我已经建立的主从关系,现在的问题是在从表中添加记录时第一次添加时没有问题,  
  在第二次添加记录POST时就出现了错误:"key   violation"问题出现在什么地方,向高手求教!

解决方案 »

  1.   

    但是我單步跟蹤了一下主鍵記錄和情況如下,
    FormID    RecID  ....
    200800001 1      正常
    200800001 2      不能保存提示錯誤   key violation
    200800001 3      直接提示錯誤  key violation
      

  2.   

    我這張表的數據沒有重復記錄卻提示key violation 錯誤,也算是比較特別的問題,麻煩各位再想想辦法
      

  3.   

    procedure SaveData;
      begin
        with cdsDetail do
          begin
            if ((FFormState = fsInsert) or (FFormID <> cdsMaster.FieldByName(dbFormID.Field.FullName).AsString)) and
               (DBModule.GetDBRevNumber(Format(SQL_EXISTS, [FTableName, dbFormID.Field.FullName]), VarArrayOf([dbFormID.Field.asString])) > 0) then
            with cdsMaster do
            begin
              Edit;
              dbFormID.Field.AsString := GetNewFormID;
              Post;
            end;
            DisableControls;
            try
            First;
            while not eof do
            begin
              if (FFormState = fsInsert) or (UpdateStatus <> usUnmodified) or (FFormID <> cdsMaster.FieldByName(dbFormID.Field.FullName).AsString) then
              begin
                Edit;
                FieldByName(dbFormID.Field.FullName).AsString := cdsMaster.FieldByName(dbFormID.Field.FullName).AsString;
                if Assigned(FindField('Penster')) then FieldByName('Penster').AsString := CurComputerName;
                if Assigned(FindField('CreateDate')) then FieldByName('CreateDate').asDateTime := DBModule.GetServerDateTime;
                Post;
              end;
              if FieldByName('RecID').AsInteger <> RecNo then
              begin
                Edit;
                FieldByName('RecID').AsInteger := RecNo;
                Post;
              end;
              Next;
            end;
            except        end;
            EnableControls;
            BeforeSave;
            ApplyUpdates(-1);
            cdsMaster.Edit;
            cdsMaster.FieldByName('Penster').AsString := CurComputerName;
            cdsMaster.FieldByName('CreateDate').AsDateTime := DBModule.GetServerDateTime;
            cdsMaster.Post;
            cdsMaster.ApplyUpdates(-1);
            FFormID := cdsMaster.FieldByName(dbFormID.Field.FullName).AsString;
            case FFormState of
              fsInsert:DBModule.WriteLog(Format(STR_ACTION_ADD, [Caption]), dbFormID.Field.AsString);
              fsEdit:DBModule.WriteLog(Format(STR_ACTION_MODIFY, [Caption]), dbFormID.Field.AsString);
            end;
            AfterSave;
            FFormState := fsBrowse;
            RefreshData(FFormID);
            FModifyed := True;
          end;
      end;
    這是用來保存數據的代碼,出錯提示“Key Violation”停在first那一句上
      

  4.   

    謝謝各位的提醒我解決了。原來是我的關鍵字弄成FormID了,應該是RecID才對