我有一个带有查询,数据集,可编辑的dbgrid和updatesql组件的表单。当我需要保存在dbgrid中所做的更改时,请调用以下过程:
procedure TEditCardDetailForm.SaveChanges;
begin
Database1.StartTransaction;
try
Query2.ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
Query2.CommitUpdates;
end;
但是,当我按Enter或在dbgrid中编辑单元格后转到另一行时,我希望将更改自动应用到数据库-使用TTable组件时的完成方式。有办法吗?
最佳答案
您可以在此处处理两种情况:
更改网格行时保存更改
更改网格列时保存更改
第一个方法很容易实现,方法是在基础数据集(SaveChanges
,AfterPost
?)的query2
事件中调用您的TClientDataSet
过程。
对于第二个,您只需要在列更改后调用query2.Post
。这可以在OnDataChange
的datasource
事件中完成。在调用Field <> nil
之前,请确保检查dataset
和post
是否处于插入或编辑模式。