取消记录更改

时间:2012-04-13 20:51:23

标签: database delphi paradox

我正在使用dbedit组件编辑记录,我有一个取消按钮,但我不知道如何制作它所以使用dbedit组件所做的所有更改都将被还原。

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

我只是想知道处理这个问题的最佳方法,而不会创建无用的表,创建了太多的程序。

3 个答案:

答案 0 :(得分:3)

如果我没有错误地改变一个paradox表,只能在post命令后写入数据库。 如果您想取消更改,只需执行

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

TForm1.OKButtonPress(Sender: TObject);
begin
  ParadoxTable.Post;
end;
顺便说一句,自从我使用悖论表以来已经很长时间了,所以我的回忆是不正确的,如果我弄错了,请随时投票给这个答案。
我在Mac上输入这个,所以我现在无法检查它。

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

答案 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。