我正在使用 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。