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

最佳答案

您可以在此处处理两种情况:


更改网格行时保存更改
更改网格列时保存更改


第一个方法很容易实现,方法是在基础数据集(SaveChangesAfterPost?)的query2事件中调用您的TClientDataSet过程。

对于第二个,您只需要在列更改后调用query2.Post。这可以在OnDataChangedatasource事件中完成。在调用Field <> nil之前,请确保检查datasetpost是否处于插入或编辑模式。

10-05 22:15