我正在编写一个桌面应用程序,用C ++进行矢量绘图,并考虑使用sqlite来支持我的撤销/重做功能。
是否有人使用sqlite进行撤消/重做功能?它如何为您服务?
澄清:
我知道堆栈方法,我甚至用这种方法实现了一个应用程序。我遇到的问题是一段时间后很难维护。
我的意思是利用sqlite是我将整个内存数据结构映射到sqlite数据库,并让sqlite为我做差异和修订。 如果我创建一个内存数据库,速度应该不是问题。
这就是我的想法,我想知道这是否可行。
答案 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;