如果一个系统已经设计开发成型,现在用户要求在这个系统上增加档案信息管理部分,主要功能包括归档、归档保管、信息检索查询、销毁以及审核等功能,一般情况下,如何设计和实现呢?
一般的做法是在更改原来的系统表结构,增加相关的档案系统的字段,然后再编程实现,这样的做法需要对原来系统进行比较大的改造,原系统或者档案信息系统的更改都会引起连锁反应,无疑这样做的工作量会很大。
我的做法是不对原系统进行任何改动,只是单独增加有关档案信息的表,通过对归档的表的灵活处理来实现归档和查询,这样一来,很大程度上增加了系统的灵活性,是一种基于数据拍照式的设计。
一、设计思路
⒈建立了一个档案目录表,在知道档案目录表下要归档的原数据表后,用数据窗口装载该表的记录,根据归档要求进行筛选,具体归档时,在档案列表里插入一条记录,对满足要求的记录进行打包,然后根据查询要求更新查询索引表(档案号码与相关查询字段的关系表),填写归档记录的相关属性,并把打包后的二进制文件更新至该记录。
⒉具体查询时,根据查询字段,提出具体的档案号码,进而提出具体的档案记录,然后把该二进制文件释放到本地硬盘,用数据窗口装载,根据查询要求定位到具体记录。
具体流程如下:
这里有两个很重要的问题。
1 如何避免重复归档?
因为归档记录已经打包,与原表无关了,我们的解决方法是:根据归档二进制文件对应的数据表名称以及相关主关键字段设置,把已经归档的记录从原表中删除(这里只是在归档显示时删除,对原表记录不做任何改动)。
2 如何存储归档的实际记录?
在PB里,数据窗口的数据可以另存为一种以PSR结尾的报表文件格式,程序里用读取该文件内容后在存入档案列表的Image字段,在还原数据记录时,只需要把Image字段还原为本地的PSR文件,并装载入数据窗口,那么存储的原数据就会显现出来。
二、具体表设计
⑴ 在档案系统里增加表来对原系统所用的表及字段进行登记,相当于在档案系统里把要归档表的情况做了个快照,在具体实现时的表名称依次是:DaTableAll(记录所要归档的表的英文名称和汉字名称)、DaTableFieldSet(记录归档原表的主关键字段设置),还有筛选表及字段设置表DaFilter_TableField,索引表及字段设置Dasy_Tablefiledset。
⑵ 档案计划表(DaJH)。
⑶ 建立档案目录表(Daml)以及具体目录下归档所对应的表(DaTableSet)。
⑷ 为了加快查询档案速度,必须建立依据具体查询所对应的检索记录表,比如为了在档案系统部分里依据人员姓名或者身份证号码快速查询到具体档案号码进而调出具体电子档案,需要建立人员姓名、身份证号码、档案号码这三个字段的索引记录表(DaIndex_Member),等等.
这一部分可依据查询要求进行相应表的建立,具体编程可以用动态游标来处理初始没有考虑而其后又增加的归档要求。
⑸ 建立档案记录列表(DaList),用于保存具体的归档记录。
表及字段设置
......
三、程序界面
部分:
四、代码实现
见《电脑编程技巧与维护》2010年6月上半月。