我又来问问题了.关于数据库撤消操作问题

ZOU_SEAFARER 2007-03-16 08:53:37
现在要做一个UNDO 和REDO 功能按钮

主要就是就操作数据库在于返回前进等....
比如:
1.我用其他的按钮插入一条数据后,点UNDO,能再把这条数据删除,再点REDO, 又把此条数据插入,
2.我删除了10数据,点UNDO,能把这十条数据恢复,再点REDO数据库就保持原样.

UNDO 和REDO 至少各保留5步,换句话说就是能返回前程次的操作!!!
给思路即可!!!!少量的关键代码,谢谢!
...全文
627 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnnaBear 2008-01-22
  • 打赏
  • 举报
回复
先挂上,看不懂。。。
ZOU_SEAFARER 2008-01-22
  • 打赏
  • 举报
回复
今天把贴挂上去,等大家看了总结明天结
ZOU_SEAFARER 2008-01-22
  • 打赏
  • 举报
回复
谢谢大家的回答,断断徐徐经过一年了,现在揭贴

并且把我的尝试经验与大家分享:

我提到的操作数据库REDO,UNDO,没有大家想象的难,我的要求很简单,就是做插入,删除,增加 修改一个表的记录,然后能返回而已.
大概流程就是:
初始建立10个临时文件表,每一次修改(插入,删除,,增加,修改)后都把修改后的表全部COPY到临时表中、,这里需要增加一个索引,第一次保存到临时表1中,第2次保存到表2中.依次类推,到第10步的时候,需要挪动表冲掉表1的数据,同时修改表10的数据,这里挪动数据不用实际挪动,仅修改表名即可.

前进后退的时候就把INDEX加减1,同时把当前索引的表的数据COPY到操作表中即可完成!

思路就是这样,感谢大家,更加感谢TechnoFantasy ,Modest
,of123 ,


xchd545 2007-04-09
  • 打赏
  • 举报
回复
星星大会
fyming 2007-03-24
  • 打赏
  • 举报
回复
1、未“Save”之前,先不用与数据库交互,直接将数据以XML文件格式临时记录在当前目录的Temp下。
2、“Save”之后,将数据存储至数据库。
3、程序退出时将XML文件删除。

//这样做的目的在于尽量减少与数据库的交互,而且在做“UNDO”操作时,直接在本地调用XML的数据,无论是速度还是效率总好过从远程数据库中去取数,甚至还可以做成PHOTOSHOP中的“历史”面板那样的效果--》直接恢复到某一步。
fishmans 2007-03-24
  • 打赏
  • 举报
回复
采用數據備份,為每個操作表建立一個備份表,將每次操作影響的數據存入備份表,並加操作序順,undo或redo時根據操作順序將備份數據寫回,這樣做要考慮一個備份數據與原數據的對應關係和完結undo\redo操作時清空備份數據。
ZOU_SEAFARER 2007-03-24
  • 打赏
  • 举报
回复
上面的问题我知道了,呵呵
RS.open "select * ................. order by .." ,cnn,3,2
就可以按指定的排序打开了,呵呵
ZOU_SEAFARER 2007-03-24
  • 打赏
  • 举报
回复
那我就更没有把握了,我现在就是把表再做一个临时表!方便UNDO
现在基本要完成了,还有一个问题就是
把数据下载到本地操作,这样应该 能快很多!!
现在又来问题了,就是在一个表里面存在很多的字段,我按第5字段排序

比如
第5字段有ST , E,A ,等情况
我要把所有的ST放在一起,然后在第6字段的值依次递增 1到........

接下了把所有的E放在一起,然后在第6字段的值依次递增 1 到..........

接下了把所有的A放在一起,然后在第6字段的值依次递增 1 到..........

最好保存在这个表中,或者保存在其他表里面,不知道有SQL语句 没有??

呵呵,我使用
SET RS = CNN,EX....(.....)
RS() = 值,不允许我更新

然后使用RS.OPEN ...........
能修改了,可是发现打开的数据表没有排序
TechnoFantasy 2007-03-24
  • 打赏
  • 举报
回复
有没有这个必要?对数据库有改动的操作有很多,建表、修改字段、建视图、建触发器等等。这些操作如何记录?
如果把要求放简单一点,只是对表的增、删、改的话,而且全部操作都是通过纯SQL实现的话,可以这么考虑,每产生一个SQL语句,就智能产生一个“反”SQL语句,比如,生成:
insert into T(c1, c2, c3, c4)VALUES(v1, v2, v3, v4)
假设其中c1、c2是PK的话可以生成“反”SQL语句:
delete T where c1=v1 and c2 = v2
把SQL语句和“反”SQL语句都记录下来,就可以实现UNDO REDO了。

当然建表、修改字段这些操作上也应该可以通过生成“反”SQL语句来实现UNDO。这就看开发人员的SQL熟练程度了,反正让我做的话没把握,呵呵。
ZOU_SEAFARER 2007-03-24
  • 打赏
  • 举报
回复
把数据下载到本地操作,这样应该 能快很多!!
现在又来问题了,就是在一个表里面存在很多的字段,我按第5字段排序

比如
第5字段有ST , E,A ,等情况
我要把所有的ST放在一起,然后在第6字段的值依次递增 1到........

接下了把所有的E放在一起,然后在第6字段的值依次递增 1 到..........

接下了把所有的A放在一起,然后在第6字段的值依次递增 1 到..........

最好保存在这个表中,或者保存在其他表里面,不知道有SQL语句 没有??

云中客 2007-03-24
  • 打赏
  • 举报
回复
数据控件不提供此功能,可以通过临时数组变量或临时表存储操作以前的数据,来达到楼主希望的效果
ZOU_SEAFARER 2007-03-21
  • 打赏
  • 举报
回复
不用10年,不就是多做几个表吗? 你不觉得你没有提供建设性的意见,说了很多屁话!!!
只揭伤疤不上药!
wanbotang 2007-03-21
  • 打赏
  • 举报
回复
白痴?这个字眼用的好像有点过分。我看你那样再努力10年也只是那个样,把时间花在一些不现实的问题上,你是把用户当成白痴了。把你的用户看做和你一样,没有一点逻辑。这样的程序做出来也不扎的。
就此止步!
ZOU_SEAFARER 2007-03-20
  • 打赏
  • 举报
回复
我说楼上,你不会就不要讥讥歪歪的!

你不能超过微软,能说明你不能去做么?白痴一个
wanbotang 2007-03-20
  • 打赏
  • 举报
回复
问这样的问题真有点低能。要是数据库的删除操作可以象WORD那样UNDO和REDO你认为可行吗?
如果用批更新的话,倒是可以撤销删除操作。
这就是一般的数据库管理软件在删除记录之前都会提示你删除操作是无法撤销的原因。连微软的Access都是这样,你认为你能超过微软吗。
还有一种方法就是别用数据库了,用Excel可以撤销很多次,至少来说10次以上吧。
ZOU_SEAFARER 2007-03-20
  • 打赏
  • 举报
回复
好象不是那么一回事!!!
关键是UPDATA成功后才REDO的
kelenkang 2007-03-17
  • 打赏
  • 举报
回复
用cancelupdate即可实现undo 功能
adodc1.recordset.cancelupdate

redo其实实现的是跟上面的undo功能一样的
ZOU_SEAFARER 2007-03-17
  • 打赏
  • 举报
回复
直接建一个普通表了,用了后删除,呵呵

ZOU_SEAFARER 2007-03-16
  • 打赏
  • 举报
回复
我这个表和VB界面相应的控件是联系在一起的,
界面就10组控件,翻页再从数据库中提出下10条数据显示,所以做标记的话,还不如建临时表了!
cqq_chen 2007-03-16
  • 打赏
  • 举报
回复
数据表中进入deleted字段,只做删除标志,不实际删除。
加载更多回复(5)

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧