1

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

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

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

4

3 回答 3

3

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

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

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

顺便说一句,自从我使用悖论表以来已经很长时间了,所以我的回忆是不正确的,如果我弄错了,请随时投票否决这个答案。
我在mac上输入这个,所以我现在不能检查它。

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

于 2012-04-13T21:01:00.513 回答
2

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

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

于 2012-04-13T21:09:06.423 回答
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。

于 2012-04-13T21:45:48.403 回答