>>Query.Edit
>>를 명시를 하고 ApplyUpdate 할때 Key Violation 오류가 떠버립니다.
>>물론 키로잡힌 필드의 값은 모두 넣어 줬구요...
>>아무래도 Edit가 아닌 Insert가 되는게 아닌지 모르겠네요...
>>이럴땐 상태를 체크해봐야하나요? 현제 State를?
>
답변해 주셔서 감사합니다.
우선 state를 체크해 본 결과 sdEdit로 정확히 되구요...
아무래도 키값이 중복되서 저장되는것 같습니다.
updateSql의 modifySQL을 확인해 보면
update baej
set
BAEJ_YEAR = :BAEJ_YEAR, <--- 키
BAEJ_BUSEO = :BAEJ_BUSEO, <---키
BAEJ_YO_DATE = :BAEJ_YO_DATE,
BAEJ_YO_NO = :BAEJ_YO_NO,
BAEJ_BAE_DATE = :BAEJ_BAE_DATE, <---키
BAEJ_BAE_NO = :BAEJ_BAE_NO, <---키
BAEJ_BAE_AMT = :BAEJ_BAE_AMT,
BAEJ_BIGO = :BAEJ_BIGO,
where
BAEJ_YEAR = :OLD_BAEJ_YEAR and
BAEJ_BUSEO = :OLD_BAEJ_BUSEO and
BAEJ_BAE_DATE = :OLD_BAEJ_BAE_DATE and
BAEJ_BAE_NO = :OLD_BAEJ_BAE_NO
이렇게 나타납니다.
소스 안에서는
QrInsert.Edit
With QrInsert do
begin
try
FieldByName('BAEJ_YEAR').AsInteger := StrToInt(YearEdit.Text);
FieldByName('BAEJ_BUSEO').AsString := BuseoEdit.Text;
FieldByName('BAEJ_YO_DATE').AsString := YoDateMask.Text;
FieldByName('BAEJ_YO_NO').AsInteger := YoguSpin.Value;
FieldByName('BAEJ_BAE_DATE').AsString := BaeDateMask.Text;
FieldByName('BAEJ_BAE_NO').AsInteger := BaeNoSpin.Value;
FieldByName('BAEJ_BAE_AMT').AsFloat := GmBaeNum.Value
FieldByName('BAEJ_BIGO').AsString := BigoEdit.Text;
Post;
ApplyUpdates;
CommitUpdates;
except
on e:EDBEngineError do
begin
CancelUpdates;
exit;
end;
end;
end;
이런식으로 코딩했습니다.
테스트 하는데 이상한 점을 발견했는데
프로그램에서 바로 입력한 후 수정시에는 정상적으로 수정이 되는데
종료후 다시실행하여 수정할경우 Key Violation 에러가 나타납니다
Post를 2번 타지 않을까 합니다..
제가 알기로는 AfterPost 이벤트에서
Query1.Database.ApplyUpdates([Query1]);
을 해 놓아..
해당 Record를 즉시 기록하면..
또한 그 내용을 갱신하는걸로 알고 있습니다..
님이 하신 코딩에 보면..
Post후에
ApplyUpdate;
CommitUpdate를 하셨는데여..
한번 체크해 보세여..
Post이벤트를 몇번 타는지..
아마도 2번 타서..
하나는 Insert로 되기때문에..
Key Violation이 날 겁니다..
답이 되셨길..