我有一个包含查询,数据集,可编辑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组件时的方式。有办法吗?
答案 0 :(得分:2)
如果我理解正确(请纠正我,如果没有)你有一个TQuery,CachedUpdates设置为true,但希望它表现得好像不会使用缓存但立即更新。如果是这种情况,您设置TQuery的方式与您期望的行为相矛盾。缓存更新将在客户端“保留”,直到您决定使用ApplyUpdates手动将它们发布到数据库。
如果您可以将CachedUpdates设置为false,则只需执行以下操作:
我猜你已经完成了这两件事,所以把CachedUpdates放到false应该这样做。
您可以在Delphi 5 here找到有关缓存更新的更多信息。
HTH
答案 1 :(得分:1)
您可以在此处理两种方案:
通过在基础数据集的SaveChanges
事件中调用AfterPost
过程(query2
,TClientDataSet
?),可以轻松实现第一个。
对于第二个,您只需在列更改后调用query2.Post
。这可以在OnDataChange
的{{1}}事件中完成。在致电datasource
之前,请务必检查Field <> nil
和dataset
是否在插入或编辑模式。