如何利用sqlite进行撤消/重做功能?

时间:2009-03-31 13:10:58

标签: c++ sqlite undo undo-redo

我正在编写一个桌面应用程序,用C ++进行矢量绘图,并考虑使用sqlite来支持我的撤销/重做功能。

是否有人使用sqlite进行撤消/重做功能?它如何为您服务?

澄清:

我知道堆栈方法,我甚至用这种方法实现了一个应用程序。我遇到的问题是一段时间后很难维护。

我的意思是利用sqlite是我将整个内存数据结构映射到sqlite数据库,并让sqlite为我做差异和修订。 如果我创建一个内存数据库,速度应该不是问题。

这就是我的想法,我想知道这是否可行。

4 个答案:

答案 0 :(得分:10)

当SQLite数据库是应用程序的数据文件格式时,使用SQLite来撤消撤消/重做是有意义的。有关如何使用SQLite触发器执行此操作的说明,请参阅the SQLite website

答案 1 :(得分:2)

基本上可以使用堆栈实现撤消/重做功能:当用户执行操作时,您在堆栈上推送一个对象,该对象表示操作之前和之后的状态之间的差异,当您撤消时,您“展开“三角洲”。因为用户执行的每个操作都会在堆栈上创建一个新的delta对象,所以sqlite可能不是您选择的技术,因为它可能太慢了。我建议考虑将undo / redo信息存储在内存中的可能性,并仅在你想要实际保存撤消/重做历史记录时将其线性化在磁盘上。

答案 2 :(得分:0)

答案 3 :(得分:0)

这是在sqlite3中对我有用的东西

BEGIN;
-- enter your INSERT, UPDATE or DELETE command
-- if you want to keep it then run command below
COMMIT;
-- to undo - run command below
ROLLBACK;

来源SQLite Transactions (Begin, Commit, Rollback)

相关问题