제가 인서트와 업데이트의 차이점을 모르겠습니다.
무슨 말이냐면요.
그리드에서 데이타를 인서트 하고 난후 저장한다음.
인서트된 레코드를 수정하면. .
record not found or change another user!!!
데이타 셋의 OnReconcileError 이벤트에서 위와 같은 메세지를 뿌리면서 업데이트가 되지 않습니다.
무슨 이유일까요 ?
근데. .신기한것은 기존에 저장되어 잇는 레코드에 대한 수정은 아무런 에러가 없거든요.
인서트 한후, applyupdate 하면 기존 저장되어 잇는 레코드랑 뭐가 틀린지.. ..
신기하게. . 인서트 한 레코드의 수정은 되지 않네요.
수정할라면. .다시 dataset 를 재 오픈( close, open) 을 해야지 수정할수가 잇네요.
무슨 이유 일까요 ?
아시는 분 답변 부탁드립니다.
아래는 제 저장 관련 소스입니다.
procedure Tmst1020pro.mstdpt_save;
begin
with dm.mstdpt do
begin
if (ChangeCount > 0) then
begin
try
ApplyUpdates(-1);
except
on E: EDatabaseError do
ShowMessage('Database Apply Update Error - ' + E.Message);
end;
end;
end;
end;
// 아래는 데이타셋의 OnReconcileError 이벤트 처리입니다.
procedure Tdm.mstdptReconcileError(DataSet: TCustomClientDataSet;
E: EReconcileError; UpdateKind: TUpdateKind;
var Action: TReconcileAction);
begin
showmessage(e.Message);
Action := raCancel;
end;
그리드 상에서 인서트 해서 저장을 하면, 그리드 상에서는 디폴트 값을 가진 필드의 값은 널이죠.
하지만, 디비에 저장되는 순간, 디비에는 필드의 디폴트값이 들어갑니다.
이렇게 아무 처리를 해주지 않았다면, 디비와 그리드의 값은 틀려지는 겁니다.
다시 불러와서 에디트 하면, 당연히 될 수 밖에 없구요...
디비에서 필드 디폴트 값을 없애시던가, 인서트와 동시에 디폴트 값을 생성시켜주는 것이 방법이겠습니다. ^^