子表的意义和设置

一、子表的意义:(为3.72版新增功能)
    子表即针对某一字段设置的明细表或称子库或辅助库。在基本库基础上增设子表,可以扩充基本库的管理功能,从而使《数据大师》能够管理更为复杂的事务。一个基本库最多可以设置10个子表,但一个字段只能设置一个子表。每个子表均必须指定一个与基本库相关联的关键字段名称,且子表中必须包含该关键字段名称,例如:在租房信息管理系统中,可以建立如下基本表:

业主姓名

租赁人姓名

性别

出生年月

户籍地

联系电话

随住人数

张三 陈勇 1973.08.15 湖南长沙   3
李四 江河 1982.05.19 湖南岳阳   2
王五 高山 1968.11.25 四川成都   1
             

    但在我们的管理中,要求包括随住人员的详细资料,而每个租赁户的随住人员数是不确定的,因此,要在主表数据库(如上表)中反映随住人员的详细资料,显得有些困难,以前,我们是将其存储在备注型字段中的,但那样不便于统计、计算、查找等。现在我们可以用子表功能来代理以前的备注型数据了。如可以建立如下子表项目:

业主姓名

随住人姓名

性别

出生年月

户籍地

联系电话

与户主关系

张三 王菲菲 1979.11.14 湖南长沙   夫妻
张三 陈小鹤 2001.06.11 湖南长沙   父子
张三 陈白雪 1976.01.13 湖南长沙   兄妹
李四 刘  华 1981.07.22 湖南岳阳   同事
李四 赵  月 1983.11.28 湖南岳阳   同学
王五 高  斌 1998.06.15 四川成都   儿子

   上面两个表便可以依据业主姓名项目来进行关联。
    再比如汽车维修,每次修理可以作为一条记录,如维修日期,故障原因,维修费用等,这些适合登记在基本库或叫主库中。但每次修理所消耗的材料明细,就适合用子表来处理,因为不可能把材料名称、该材料的单价等都设置成主表的字段,而在子表中,只需设置材料名称,数量,单价,金额几个字段就可以了。但是如何确定子表中哪些材料是属于本次维修耗用的呢,这就必须在主表和子表间设置关联字段,如主表中可设置维修编号,这维修编号在主表中必须是唯一的,不得出现重复的记录。 同时,在子表中也设置维修编号,这样就可以在子表中根据维修编号来确定每次材料消耗数据了。当然在主库中也应该设置材料消耗金额字段,用来记录每次材料消耗总额。并且主库中的某一维修编号的材料消耗金额,应该等于子表中同一维修编号的材料明细的合计金额。只可惜现在还不具备子表和主表数据的互相验证功能,如材料金额在主表和子表之间的自动核对。不过,以后肯定会改进好的。 
二、设置子表的方法:
1、建立子表数据项目
,点系统设置--设置子表功能--建立子表数据库菜单,即可进入子表项目设置窗口,首先应该指定对基本库中哪个字段设置子表,依前例,可以指定随住人数为需要设置子表的字段,接着输入子表数据库文件名称,如输入:随住人员库。然后选择与子表关联的关键字段名,此例中可以选择业主姓名。最后,便是设置如上面第二个表格中的子表数据项目,系统会自动将前面指定关键字段添加到子表库的第一个字段中,然后,依次设置随住人姓名、性别等项目,最后点保存按钮即可。
  设置提示:A、增加子表编号可增加新的子表。B、子表中应有一字段名称和子表关键字段名相同。C、双击基本库字段列表可选择需要设置子表的字段名称。
2、设置子表输入属性
,其设置方法和基本库的录入限制条件基本相同,也可以指定自动编号、限制重复值、设置枚举值等。
3、定义子表计算公式,子表需要计算时才设置,方法和基本库的超级用户计算公式完全相同。
4、定义子表余额公式,子表需要计算余额数据时才设置,方法和基本库的余额公式完全相同。设置之后,数据录入时会自动计算,也可以在子表操作菜单下单独调用子表计算功能。

三、子表数据的录入:
  
只要设置了子表数据项目和输入属性,当进入卡片式录入窗口后,就会在设置了子表的字段的输入框后面,自动产生一个编辑按钮,我们在新增或修改状态,点击这个编辑按钮即可进入子表数据录入窗口。
  子表数据录入窗口的界面非常类似于卡片式录入窗口,只是关键字段的数据不能输入,而是系统从基本库中取数后自动传入,且子表中所显示的记录也只显示与关键字段数据相匹配的记录。
 特别提示:主表关键字段的数据是不允许重复的,但子表关键字段的数据却允许重复;自动编号功能不能用于子表中的关键子段,但可以用于主表的关键子段。因此,必须在基本库的设置录入限制条件中,将基本库的关键字段设置为不允许重复值
四、子表数据的查询:
  可以进入数据查询-包含子表的查询中,与基本库数据一起进行关联查询,也可以进入子表操作--子表数据查询中,单独对子表进行查询操作。
五、含子表的报表的设置方法:
   由于子表的数据总是和基本库的数据相关联的,因此,要在报表上打印出子表的内容,只能进入打印制表--新建复杂报表中进行设置。在进入报表设计器后,通过在数据环境中添加基本库和相关的子库文件后,在两个库中按设置子表的关键字段建立关联。并在报表—数据分组的分组表达式中输入关键字段名称。然后将基本库的字段用域控件添加到组标题区域,将子库的字段用域控件添加到细节区。这样就能在细节区总是只显示与在组标题中的基本库记录有关联的子表中的记录。但要显示“一对多”的子表中的记录,即一个基本库的记录显示多个子表中的记录,则只能等到退出报表设计器后才能实现。
下面是和一位用户的有关如何打印子表数据问题的对话,供大家参考。
问:
子表的内容如何在“打印制表”中设计到相应的表格中去呢?
答:可以通过在数据环境中添加子表文件,并将基本库和子表建立关联后,即可实现对子表的打印输出。

问:子表我已经建立,你所指的“在数据环境中添加子表文件”所指的是什么?是要另外建立一个数据库吗?“将基本库和子表建立关联”如何操作。在关联中好象不能找到子表。
答:“在数据环境中添加子表文件”,是指进入报表设计器(不是快速动态报表中)后,在报表空白处点右键,在其弹出的右键菜单中点数据环境菜单项,在其后出现的数据环境窗口中,再点右键,选择添加菜单项,选择要打印的子表文件名(进入该系统的子表文件夹中选择)即可添加成功。当然,之前也应该先用同样的方法添加基本库。然后,在数据环境的基本库字段列表框中,用鼠标按住基本库的关键字段名称拖往子表字段列表的关键字段上,即可建立关联索引。最后,退出数据环境,在报表上选择报表菜单中的分组,在分组表达式中输入关键字段名称,点确定,即返回报表设计窗口,再在报表设计窗口中,在分组标题区添加要打印的基本库的字段,在细节区,添加要打印的子表的字段即可。

下图是建立关联前的数据环境:

  

下图是建立关联后的数据环境:

 

问:对于子表内容的打印输出我仍然无法实现。按照你的指导,我完成到基本库与子表关键字段的关联,但子表字段的添加无法实现,更不能在数据表的给定位置打印了。望能进一步指导。谢谢!
答:只要做好了数据环境设置,就可以在报表的细节区域添加域控件时点表达式后面的浏览按钮,在弹出的字段列表中,会包括有基本库和已经关联子表的字段,从中选择需要打印的字段即可添加成功。
问:子表打印输出已能设置,但只能显示子表中的第一行数据,子表内的其他数据不能同时加入。如何处理?
答:与子表关联后,只能打印子表中所关联的第一个记录的原因,是因为没有将其设置为“一对多”的报表类型,但这种“一对多”的报表类型,可以在您退出报表设计器后,系统会自动添加的。再次进入预览报表,即可以看到一对多的报表效果。
下图是在报表设计器中设置的可以打印子表数据的报表:

问:我已经在报表设计其中设计好了包含子表数据的报表,为何在预览打印时提示:找不到某某子表数据库文件?
答:预览时找不到子表数据库文件的原因是没有保留报表数据环境,请在打印制表--设置报表打印选项窗口,设置为需要保留数据环境即可。

下图是报表预览结果: