几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » 数据库ObjectDBX
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


 
 
主题工具 搜索本主题 显示模式
旧 2009-04-19, 08:13 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 请教:vba中通过dao对数据库实现“后退”功能

请教:vba中通过dao对数据库实现“后退”功能
www.dimcax.com
请教: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数组内容重新修改数据库。
当然,还有些细节需要考虑。比如用户执行“后退”操作所引起的数据库改动与用户修改数据库所引起的改动需要区别; “后退”操作引起的数据库改动应该如何处理等等。这些请楼主先自己做做,有问题再发贴。
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 10:24 PM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多