请教:vba中通过DAO对数据库实现“后退”功能
我在程序中用DAO建立一个mdb数据库,用来保存dwg文件中的一些附属信息,比如:我选择一些线条,然后在弹出窗口中输入这些线条的所代表的零件的规格,再将我输入的这些信息连同已选择的线条的长度、位置等信息通过DAO写入数据库。现在我同事使用后提出一点建议,希望增加一个后退功能,以便在数据写入后可以后悔,撤销上一次甚至是若干次的输入。我尝试用一个笨办法,即在每次往数据库写入前先对数据库进行备份,这样的话我备份多少次我就可以后退多少次。但我不想对整个mdb文件进行备份,因为如果数据库大的话这样实在太慢。我只想对写入数据的那个表进行备份,请问用DAO实现数据库“后退”这个功能有没有什么比较快捷的方法?
呵呵,这么多天了都没有高手愿意指教吗? 你的思路基本上是正确的,当然不需要对整个数据库进行备份,实际上,你可以在数据库中增加两个表,一个表来记录用户对数据库所作的修改,另一个表记录用户的“后退”操作(主要用于将来的“前进”操作)。当用户执行“后退”操作时,就从这些表中提取数据。至于这两个表的结构,你可以参考下面给出的第二套方案。
第二套方案是将用户操作保存在内存中,由于内存不能直接保存数据库表结构,需要设置一个自定义的数据类型:(以下用的是VB语句,当然用C++应该更容易实现)
Const MaxFields As Integer = 10 //假设用户一次最多修改10个数据字段
Type UserUpd //用于保存用户所作修改操作
TblName As String //用户修改的数据表名称
FieldName(MaxFields) As String //用户修改的字段名称
FieldValue(MaxFields) As Variant //用户修改前字段值
End Type
然后在工程中声明以下全局变量:
Const MaxUndo As Integer = 30 //假设最多保存30步用户操作
Public SavUndo(MaxUndo) As UserUpd //如果你使用的是C++语言,最好将这个变量声明为链表结构,这样程序更为灵活
这样,在用户修改数据库的相应事件代码中,你可以填写SavUndo数组,在用户执行“后退”操作的事件代码中根据SavUndo数组内容重新修改数据库。
当然,还有些细节需要考虑。比如用户执行“后退”操作所引起的数据库改动与用户修改数据库所引起的改动需要区别; “后退”操作引起的数据库改动应该如何处理等等。这些请楼主先自己做做,有问题再发贴。 真的不错的
页:
[1]