안녕하세요. 오늘도 DBGrid 땜시 왔습니다.
DBGrid로 테이블도 형성했고, 인서트도 되고, 딜리트도 되고, 모더파이도 다 됬습니다. 근데, DBGrid 테이블에서 2개이상의 셀값을 변경할때 에러메세지가 다음과 같이 나옵니다.
IBQryTable1: Dataset not in edit or insert mode
한개의 셀값만 바꿔서 저장할경우에는 아무 문제가 없다가 2개이상바꿀경우 문제가 생기네요. 뭘 어떻게 해주어야 되는지요......
참고로 소스는 다음과 같고, 데이타베이스는 인터베이스로, 퀘리와 업데이트를 사용하여 테이블은 형성했습니다.
procedure TfrmLandingRates.BtnEditClick(Sender: TObject);
begin
if BtnEdit.Caption = '&Edit' then
begin
frmMain.IBTransaction1.Commit;
frmMain.IBTransaction1.StartTransaction;
frmMain.IBQryLandingRate.Open;
end
else if BtnEdit.Caption = '&Save' then
begin
frmMain.IBQryLandingRate.Post;
frmMain.IBQryLandingRate.ApplyUpdates;
end;
end;
꼭좀 답변부탁드리고요, 고수님들 항상 고맙습니다.....
잘은 모르겠구여..
Dataset(Table, Query)의 BeforeEdit, AfterPost에서 어떤 액션을
취하느게 좋지 않을까 싶습니다
BeforeEdit에서는 에디트버튼(BtnEdit)의 켑션에 어떤 액션을 취하도록,
AfterPost에서는
DataSet명.Database.ApplyUpdate([DataSet명]);
DataSet명.CommitUpdate;
만 수행하도록 하는 것입니다..
버튼에서 수행하는 것보다는
DataSet에서 수행하는게 확실하다고 봅니다..
또한, 저장 버튼에서는 단지 Post만 하도록
물론, DataSet.State in [dsEdit, dsInsert] 일때만 해야겠져?
당근이..
답이 되셨을런지..
아참, 그리구, DataSet.Database.ApplyUpdate를 수행하면,
자동적으로 Rollback, Commit이 수행되니깐,
Transaction을 걸지 않아도 됩니다.
또한, Delete/Insert/Edit 후에도 꼭
DataSet.CommitUpdate를 수행해서
Cash Buffer에 있는 수정/입력/삭제되었던 내용을
지워야 한다는것도 주지시켜 드립니다..