取消记录更改



我正在使用 dbedit 组件编辑记录,我有一个取消按钮,但我不确定如何做到这一点,以便还原使用 dbedit 组件所做的所有更改。

正在考虑将记录复制到临时表或在同一表中复制记录,如果保存更改,这将允许我删除旧记录,或者在取消输入时删除复制的记录(保留原始记录)。

我只是想知道在不创建无用表、创建太多过程的情况下处理这个问题的最佳方法。

如果我没记错的话,对悖论表的更改只会在post命令之后写入数据库。如果要取消更改,只需执行

TForm1.CancelButtonPresss(Sender: TObject);
begin
  ParadoxTable.Cancel;
end;
TForm1.OKButtonPress(Sender: TObject);
begin
  ParadoxTable.Post;
end;

顺便说一句,我已经很久没有使用悖论表了,所以我的记忆不正确,如果我弄错了,请随时投票否决这个答案。
我正在Mac上输入此内容,因此现在无法检查。

稍后会看看我是否可以为您提供更明智的答案。

为了补充 Johan 的答案(使用 TDataSet.Cancel),如果您使用 TCustomClientDataSet ,您还可以使用 RevertRecord 方法删除对当前记录的修改,前提是它们仍在更改日志中。

您还可以使用 SavePoint 设置快照并恢复到该状态,同时取消所有修改。

Johan的回答对单张唱片很好。 如果您正在使用SQL数据库(Oracle,MSSql,MySql,Firebird等),则还有一种可用于多个记录的附加方法:事务。 以 ADO 为例

  TForm1 = class(TForm)
    ADOConnection: TADOConnection;
…
  // start the transaction
  ADOConnection.BeginTrans;
…
  // create records and post them
…
  // rollback removes the records posted
  // since the transaction was started
  ADOConnection.RollbackTrans;
… or …
  // commit completes saving the records posted
  // since the transaction was started
  ADOConnection.CommitTrans;

如果未显式启动事务,则在将记录发布到数据库时会自动启动并提交一个事务。

François的答案类似于事务,但仅适用于ClientDatasets。

相关内容

  • 没有找到相关文章

最新更新