我正在使用dbedit组件编辑记录,我有一个取消按钮,但我不知道如何制作它所以使用dbedit组件所做的所有更改都将被还原。
我正在考虑将记录复制到临时表或复制同一个表中的记录,这样可以在保存更改时删除旧记录,或者如果输入是,则删除复制的记录(保留原始记录)取消。
我只是想知道处理这个问题的最佳方法,而不会创建无用的表,创建了太多的程序。
答案 0 :(得分:3)
如果我没有错误地改变一个paradox表,只能在post
命令后写入数据库。
如果您想取消更改,只需执行
TForm1.CancelButtonPresss(Sender: TObject);
begin
ParadoxTable.Cancel;
end;
TForm1.OKButtonPress(Sender: TObject);
begin
ParadoxTable.Post;
end;
顺便说一句,自从我使用悖论表以来已经很长时间了,所以我的回忆是不正确的,如果我弄错了,请随时投票给这个答案。稍后我是否可以为您提供更明智的答案。
答案 1 :(得分:2)
赞美Johan的答案(使用TDataSet.Cancel
),如果您使用TCustomClientDataSet
,您还可以使用RevertRecord
方法删除对当前记录的修改,只要它们仍然是在更改日志中。
您还可以使用SavePoint
设置快照并恢复到该状态,取消同时执行的所有修改。
答案 2 :(得分:2)
约翰的答案对单曲来说是好的。如果您正在使用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。