主子窗体保存、修改-trynew
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-窗体/数据页


主子窗体保存、修改

发表时间:2009/7/3 15:55:08 评论(9) 浏览(27423)  评论 | 加入收藏 | 复制
   
摘 要:这是一个经常被问到的问题,归纳起来,重点在一下几点:
1、按钮的状态要能变化。
2、点修改才允许编辑。
3、双击数据表窗体能弹出本记录的编辑窗体。
4、主子记录的相关性(新增记录时要先录入主记录)。
5、点关闭或切换到其他主记录是要提示是否保存
6、点不保存或取消按钮能回滚到点修改按钮时的数据和状态。
正 文:

点击下载此附件

(其他提到的功能实现了,如何恢复主子窗体(关键在于多记录的子窗体)为修改前数据仍未相处好办法,看是否有人处处主意)

这是一个经常被问到的问题,归纳起来,重点在一下几点:
1、按钮的状态要能变化。
2、点修改才允许编辑。
3、双击数据表窗体能弹出本记录的编辑窗体。
4、主子记录的相关性(新增记录时要先录入主记录)。
5、点关闭或切换到其他主记录是要提示是否保存
6、点不保存或取消按钮能回滚到点修改按钮时的数据和状态。
第1点不难做到,主要在按钮的点击事件、成为当前事件及窗体的更新前等事件中根据需要加入相应的控制代码即可。
第2点也是基本的要求,跟第1点相应的时间中设置主子窗体或控件的允许编辑及锁定属性就可以了。
第3点也有不少例子了,关键点在于如何定位弹出的窗体记录切换到数据表窗体的当前记录以及关闭编辑窗体是如何更新数据表窗体的相关字段,最简便的方法就是在双击时间中在打开编辑窗体后,设置编辑窗体的Recordetset等于数据表窗体的RecordSet对象,即可自动定位及更新数据了。
第4点是因为添加主记录时,如果先输入子窗体信息再输入主窗体信息,则会因为没有关联字段而出现问题,这个可通过设置子窗体表的关联字段非空属性也可以。或者在成为当前时间中,判断主记录我新增时,锁定子窗体,在主窗体录入其他数据后再解锁子窗体,还有其他的解决方法,比如在子窗体的获得焦点事件中对主记录的关联字段进行判断处理等。
第5点有点麻烦,如果不显示系统的导航条及限制鼠标滚轮切换记录,只允许使用按钮进行切换则不存在这个问题了,如果是要通过成为当前事件来进行询问是否保存更改,则要增加一个窗体及的变量来保存上一条记录位置及上一条记录是否有更改,然后根据用户应答来进行相应的数据处理,及第6点的保存数据或恢复上一点记录的数据(不保存更改)。
第6点最麻烦,也是大家提问的原因。因为是绑定型的主、子窗体,因此窗体的数据保存是记录级的,焦点从主记录跳到子窗体,则主窗体已经自动进行保存了,二子窗体的数据表格式记录,录入第二条记录时,则上一条记录的数据也已自动保存了,由于Access不支持事务操作,即多条记录的同时保存或同时取消更新,因此这个问题的实质是要实现象SQLServer一样的事务式的更新。目前除了使用临时表以外,好像也没有什么好办法了。
绑定式的主子窗体,如果是新增主记录及相关的子记录,则不保存时,删除掉就行了,除了自动编号不连续以外问题不大,但编辑更新已有记录,则改如何取消更新的内容呢(实际上已自动保存到表中了)?看来答案只有一个了,就是在更新各个字段的内容时,把原有内容保存起来。这个可以集中保存到一个修改事件表中,也可以使用内存中的集合、数组来保存,保存的数据也可以是整条记录或者是其中的单个字段。
如果修改的内容比较敏感,则建议使用一个独立的记录变更表,不单可以作为本次保存数据的回滚依据,也可以作为记录变更的历史记录进行查询浏览。如果数据不是很敏感的话,则建议不考虑这一点了,毕竟有吃力不讨好之嫌了。
不知大家对这个问题有何看法,请发表意见,迟点我会根据大家的反馈做个范例出来,如果没人关心,也就算了,毕竟有吃力不讨好之嫌了:)


Access软件网交流QQ群(群号:198465573)
 
 相关文章
在Access窗体中播放动态Gif  【纵云梯  2013/6/27】
【Access示例】切换两种窗体视图  【缪炜  2013/6/28】
遍历窗体全字段模糊查询  【一杯绿茶  2013/7/1】
多个交叉表做子窗体示例(动态图表)  【林岚  2013/7/3】
如何利用动态交叉表生成子窗体子报表  【蟹仔  2013/7/4】
常见问答
技术分类
相关资源
文章搜索
关于作者

trynew

文章分类

文章存档

友情链接