Office中国论坛/Access中国论坛

标题: 不管您是否高手,都请动动脑子 [打印本页]

作者: cq_hzh93    时间: 2004-3-3 20:23
标题: 不管您是否高手,都请动动脑子
在ACCESS中,默认状态下当窗体失去焦点时,窗体所在的记录就会保存在相应的表中,这种情况并不是理想的。在带有子窗体的窗体中,无论是主窗体还是子窗体在发生更改并失去焦点后ACCESS就保存了数据。假如用户并不想提交当前更改就必须用代码来实现。我是这样处理的:
    1。建立两个临时表,与主窗体和子窗体的记录源表一模一样;
    2。在窗体成为当前的事件中编写代码:
        (1).清空临时表记录;
        (2).如果当前记录为新记录,不对临时表插入记录;
        (3).如果当前记录不为新记录,则将当前主窗体与子窗体所在的记录分别插如相应的临时表中;
    3.在用户分别对主窗体和子窗体进行一系列操作后;
    4.选择"保存",万事大吉,关闭窗体,一切正常.
    5.选择"取消",有两种情况:
        (1).当前记录为新记录,则在关闭窗体后在相应的两个表中删除关闭前窗体所在的记录;
        (2).当前记录不为新记录,也在窗体关闭后在相应的两个表中删除关闭前窗体所在的记录,然后将临时表中的数据分别查入相应的两个正常表中.

    从理论上讲,这种方法应该可行,也不会对数据表造成损害,但是,但是...........
我这样做以后,在实际操作中出现了谁也不会想到的情况:
作者: tmtony    时间: 2004-3-3 20:56
看看黄海的例了,是否有帮助?
http://www.office-cn.net/bbs/dispbbs.asp?boardID=2&ID=1970
作者: paul16    时间: 2004-3-3 20:58
我收了!可是用到TreeView 控件就出问题了!
作者: cq_hzh93    时间: 2004-3-3 22:16
tmtony站长:在将焦点移到子窗体时主窗体的记录就保存了,同理,在子窗体添加或删除几条记录后焦点移到主窗体时子窗体也被保存了。最后要撤消就不行了。
作者: cq_hzh93    时间: 2004-3-3 22:19
如果只对不含子窗体的窗体用ME.undo就完全解决了,何必要那么多的代码。
作者: YZSTWZ    时间: 2004-3-4 01:46
关注
作者: tmtony    时间: 2004-3-4 03:09
子窗体要在MDB中实现这种功能,只有使用第三方网格控件。
不过你也可试试,创建临时的recordset,然后将recordset赋给 子窗体的form的 recordset
子窗体在设计好后取消记录源,而在open事件中设置 me.recordset=临时recordset
没有试过,不知是否可行




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3