1 前言 这是一个看似复杂,实现起来也复杂的课题。
在给用户的系统中,用户往往需要查看数据的历史记录,体现历史记录的方式也是多种多样的,最常见的是将数据表每次改动保存起来,用户需要查看时,将该数据表直接显示给用户,这一方式而需要用户的较高的使用水平。
本文将要实现的是,在用户的业务界面上,显示每一次的改变。
若各位同仁实在是看不懂下面的描述文字,烦参见实例。
注:非常感谢Javac兄就历史表查询结果的算法。
◇此为正常状态下的业务数据
◇此为查询历史数据状态下的业务数据列表中显示每一次修改的时间,用户点击后,数据切换到修改之前的状态。
2 技术要点 2.0 需求实例
出库单明细有5笔记录,用户修改出库单的明细中的2笔,保存于历史数据表仅保存修改的2笔记录,但是查看“出库单修改记录”时,需要显示所有5笔数据,包括没有修改的3笔数据和修改前的2笔数据。
2.1 数据表的存储
创建历史数据表,在历史数据表中设定“数据操作方式”字段和“数据操作时间”字段,保存用户对数据的操作方式,如“Insert”“Delete”“Update”
对需要保存历史记录的数据表,创建触发器,将每一次的改动保存在历史数据表中,并赋值“数据操作方式”字段和“数据操作时间”字段
2.2 历史数据表的解析
2.2.1 对于每一次的数据变化,可根据“数据操作时间”字段进行查询
2.2.2 对于每一次数据变化过程中,没有变化的数据,则根据“数据操作方式”进行查询。根据“数据操作时间”逆序,查找最近一次“Insert”或“Update”的数据;若遇到“Delete”该记录不再查询。
此部份数据通常位于从表。<哎...连描述都是比较复杂的>
2.3 前台实现
前台通过更新数据块的数据源,即可实现对历史数据的查询(最好更换CANVAS的颜色,如变为“红色”,以示区别)
3 实例参考
由于涉及程序对象过多,烦各同仁直接参考实例文件
点击此处下载armok01111662.rar
4 实例还需要进一步优化的要点
4.1 若主表删除,则该笔记录将不出现在“操作历史列表”中,即用户看不到其主表删除的历史数据。
4.2 目前以“操作历史列表”显示用户操作过程中的修改次数和修改时间,应追加一组按纽“首页”“上页”“下页”“尾页”,用户可以点击该按纽即可实现历史记录的查看。
<该按纽已放于画布上,但代码还没有写>
4.3 目前被修改的历史数据没有设定不同的颜色以示区别