Dbgrid - 自动发布到数据库

时间:2012-10-03 14:45:38

标签: delphi delphi-5

我有一个包含查询,数据集,可编辑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组件时的方式。有办法吗?

2 个答案:

答案 0 :(得分:2)

如果我理解正确(请纠正我,如果没有)你有一个TQuery,CachedUpdates设置为true,但希望它表现得好像不会使用缓存但立即更新。如果是这种情况,您设置TQuery的方式与您期望的行为相矛盾。缓存更新将在客户端“保留”,直到您决定使用ApplyUpdates手动将它们发布到数据库。

如果您可以将CachedUpdates设置为false,则只需执行以下操作:

  1. 通过UpdateObject属性将TUpdateSQL链接到TQuery。
  2. 编写insert,update和delete语句,并将它们分配给TUpdateSQL的InsertSQL,ModifySQL和DeleteSQL属性。
  3. 我猜你已经完成了这两件事,所以把CachedUpdates放到false应该这样做。

    您可以在Delphi 5 here找到有关缓存更新的更多信息。

    HTH

答案 1 :(得分:1)

您可以在此处理两种方案:

  1. 更改网格行时保存更改
  2. 更改网格列时保存更改
  3. 通过在基础数据集的SaveChanges事件中调用AfterPost过程(query2TClientDataSet?),可以轻松实现第一个。

    对于第二个,您只需在列更改后调用query2.Post。这可以在OnDataChange的{​​{1}}事件中完成。在致电datasource之前,请务必检查Field <> nildataset是否在插入编辑模式。