易表-设置表间关联.docx
《易表-设置表间关联.docx》由会员分享,可在线阅读,更多相关《易表-设置表间关联.docx(30页珍藏版)》请在课桌文档上搜索。
1、设置表间关联关于表间关联易表可以在表与表之间建立关联,例如在订单管理系统中,通常包括客户、产品、定单三个表,其中每个订单都对应着一个客户和一个产品,如果我们能够在客户与订单、产品与订单之间建立某种关联,那么相互之间可以互相引用和定位,例如订单可以引用产品表中的单价数据来计算金额,而选择某一个产品或某一个客户,也可以快速找到所有对应的订单。设置表间关联在表菜单上,单击“表间关联”,启动表间关联设置窗口0。添加关联单击“添加”,选择要建立关联的表,指定用于关联的列。左表和右表并没有区别,任何一个表都可以作为左表,也可以作为右表。删除关联选择要删除的关联,单击删除。定位关联记录利用表间关联,我们可以
2、在其他表中快速定位相关的记录。例如在一个订单管理系统中,如果已经在订单表和产品表之间通过产品编号建立关联,那么在订单表中,一旦选择某一订单,产品表会自动显示对应产品的详细资料;反之一旦在产品表中选择某一产品,订单表也会自动显示该产品对应的第一条订单,由于同一产品可能有多条订单,如果要显示该产品对应的所有订单,可以首先将订单表根据产品编号进行排序。查看关联表数据在“表”菜单中,指向“显示关联表”,会列出所有和当前表有关联的表,单击这些关联表,即可在主窗口的下方显示关联表,而且这些关联表只会显示和当前表的当前记录有关联的数据。下列图是一个入库管理系统,入库单表和入库明细表通过“入库单编号”建立关联
3、,每个入库单记录在入库明细表中对应有多个记录,这是一种典型的父子关系。为便于管理,我们通常选择入库单表(父子关系中的父方)进行操作,在“表”菜单中指向“显示关联表”,单击“入库明细”,既可如下列图所示在主窗口下方显示入库明细表,而且这个入库明细表只会显示属于当前入库单的数据。如上图所示,右击入库明细表,通过快捷菜单,你可以增加、插入或删除行,还可以打印报表。你也可以通过以下快捷键对关联表进行操作:Ctrl+ACtrl+I增加一行插入一行Ctrl+Del删除行在关联表中增加行,其关联列内容会自动输入。例如上图中,在入库明细表增加一行后,新增行的入库单编号等于入库表当前行的入库单编号。引用关联数据
4、如果已经在两个表之间建立关联,那么就可以在公式中互相引用数据,要引用关联表中的数据,必须同时指定表名和列名,表名和列名之间用符号“!”隔开,例如:产品!单价1、关联计算例如在一个订单管理系统中,如果已经在订单表和产品表之间通过产品编号建立关联,可以将订单表中金额列的刷新公式设为:数量*产品!单价*(1-折扣D这样我们一旦在订单表输入订购产品数量和折扣,易表就会自动调用产品表中对应的产品单价,然后计算出金额。2、自动输入如果订单表和产品表都包括产品编号、产品名称两列,而产品表已经录入所有的产品编号和产品名称,我们希望在订单表中只需输入产品编号,对应的产品名称即可自动输入。为实现上述目的,首先在订
5、单表和产品表之间通过产品编号建立关联,然后将订单表中的产品列的刷新公式设为:产品!产品名称,设置完成之后,即可象我们希望的那样,订单表只需输入产品编号,产品名称即可自动输入。RelationRow变量当进行关联计算时,可以用RelatiOnRoW变量判断关联表中是否存在关联行(记录),如果存在,那么返回关联行的位置,否那么返回-1。例如,在订单管理的时候,订单表和产品表通过产品编号建立关联,在订单表中输入某个产品编号,如果产品表中存在对应该编号的产品,那么产品名称和单价自动调用产品表中的数据,否那么由用户自己输入。那么在订单表中,产品列和单价列的公式应该分别设为:if(产品!RelationR
6、ow=-1,产品名称,产品!产品名称)if(产品!RelationRow=-1,单价,产品!单价)统计关联表的数据关联表之间通常还存在某种统计关系,例如下列图是一个入库管理系统,入库单表和入库明细表通过“入库单编号”建立关联,入库单表中的金额等于入库明细表中各行金额之和。为了自动计算入库单表的金额,只需该列的刷新公式设为:SUmFOr(入库明细”,金额,入库单编号入库单编号)设置上述公式后,修改关联表(入库明细表)中的数据,入库单表会自动求出总的金额。需要注意的是,只有在入库单表作为主表,入库明细表作为关联表显示的情况下,入库单的金额才会自动计算。自动重算关联表在默认的情况下,如果某一列的刷新
7、公式引用了关联表中的数据,那么关联表中的数据被修改之后,刷新公式并不会重新计算,要得到最新的计算结果,必须在“表”菜单中,单击“重算全表”。例如在产品表中修改单价,那么订单表中只有新增行(或被重新修改数据的行)才会采用新单价计算金额,如果希望已经输入的数据也采用新单价重算金额,必须在“表”菜单中,单击“重算全表”。可是很多时候,我们希望修改主表中的数据,关联表的数据能够自动更新,怎样实现呢?很简单。方法一例如下列图,修改产品表的单价,希望订单表的单价自动更新为新的单价,为达次目的,可以按照如下步骤进行设置:1、选择产品表的“单价”歹U,在“列”菜单上,单击“操作公式”2、将“单价列”的操作公式
8、设为:ReCalCRGrid(订单表”)经过上述设置,即可实现在产品表修改某个产品的单价,订单表中对应产品的单价会自动更新为最新的单价。ReCaICRGrid函数用于重算关联表,而且仅仅重算已经显示出来的关联表(主界面和录入窗口均可)。普通用户可以暂时忽略下面的方法。方法二:方法一必须产品表和订单表同时可见,而且订单表是作为关联表出现的情况下才能有效,如果我们希望不管订单表是否可见,修改产品表的单价,订单表的单价都可以自动更新为新的单价,只需按如下步骤设置。1、选择产品表的“单价”歹U,在“列”菜单上,单击“操作公式”2、将“单价列”的操作公式设为:RePIaCeFOr(订单表,“单价,单价,
9、产品名称产品名称)3、或者将“单价列”的操作公式设为:ReCaICOIFor(订单表单价,产品名称,=,产品名称)前提是订单表的单价列的刷新公式设为:产品表!单价方法三如果希望不管订单表处于主表状态还是关联表状态的情况,修改订单表中的数量列,产品表中的总数量和金额都可以即时刷新,可按照如下步骤设计:1、选择产品表,将总数量、总金额的刷新公式分别设为:SUmFor(订单数量,产品名称产品名称DSUmFON订单”,金额,产品名称,产品名称)2、选择订单表,将其数量列的操作公式设为:if(产品表!RelationRow0,ReCalCROW(产品表”,产品表!RelationRow),True)也可
10、以设为:if(产品表!RelationRow0,RecalcCell(“产品表”,产品表!R。IationRow,总数量“)AndRecalcCellC产品表,产品表!R。IatiOnRoW总金额),True)公式的理解请参考RePIaCeFor、RecalcColForRecalcCel1操作公式根据多列建立关联有的时候单单靠某一列是不能唯一区分某行数据的,例如在订单管理系统中,可能需要同时用品名和规格来区分一个产品,此时我们需要在订单表和产品表之间同时建立两个关联,一个关联基于品名,另一个关联基于规格。多个关联的使用和前面提到的单个关联并没有什么不同,在此就不多讲了。父子关联在设置关联的时
11、候,如果关联表之间是父子关系,只需选择“父子”选项即可。什么是父子关系呢?父子关系也叫一对多关系,例如对于产品表和订单明细表,订单明细表中的每一条记录只能对应产品表中的一个产品(记录),而每一个产品在订单明细中可能对应有多个记录(订单),就像一个父亲可以有多个儿子,而一个儿子只能有一个父亲一样,所以这种关系称之为父子关系。在设置关联的时候,“父”指的是左表,“子”指的是“右表”,所以对于父子关联,左表和右表的位置干万不能搞错。对于父子关系的表,如果子表存在对应记录,父表中的对应记录将不能被删除,出于平安考虑,父表中的记录每次只能删除一行。再谈关联计算前面已经说过,如果已经在两个表之间建立关联,
12、那么就可以在公式中互相引用数据,例如在一个订单管理系统中,如果已经在订单表和产品表之间通过产品编号建立关联,那么订单表可以调用产品表中的单价计算金额,其金额列的刷新公式为:数量*产品!单价*(1-折扣)如果修改了产品表中的单价,那么新增订单会采用新单价计算金额,原有的订单并不会采用新单价重新计算金额。但是如果修改原有的某一订单,该订单会采用新单价重新计算金额,如果执行重算全表命令,那么原来所有的订单都会采用新单价重新计算金额。现在的问题是,原来的订单有可能要修改,但是又希望采用原单价,而且原有订单可能局部希望采用原单价,局部采用新单价,按照上述的方法,显然不可能实现这些要求,必须拓展一下思路:
13、 哪些订单采用新单价,哪些订单采用旧单价,计算机并不知道,所以最好增加一个标志列(姑且称之为“标志”列吧),将标志列的类型设为逻辑型,如果断定某些订单永久性地采用原单价计算金额,那么在标志列打勾(其值将为-1)。 对于某些订单永久性地采用原单价计算金额,那么以后修改产品表中的单价后,如何直观地知道这些订单所采用的单价呢?所以最好还是在订单表中增加一个“单价”歹h 将订单表的单价列的刷新公式设为:,门7标7=-1,单价J,产品!单价D。这个公式的含义是:如果标志列的值为-L那么单价不变,否那么刷新为产品表中的单价。 最后将产品表中金额列的计算公式改为:数量*单价*(1-折扣)因为刷新公式是从左到
14、右计算的,显然对于订单表,应该先计算单价,后计算金额,所以应该将单价列置于金额列之前。如果你不希望设置标志列,只是希望输入订单的产品名称后,自动从产品表中调入该产品的单价,之后该订单的单价不再和产品表中的单价有任何关系,而且可以手工修改这个单价,那么只需将订单表中单价列的公式设为:if(单价0,单价,产品!单价这个公式的含义是,如果单价大于0,那么单价保持不变,否那么从产品表中取得单价。FindText在指定的表、指定的列中杳找指定内容,并返回符合条件的行中指定列的内容。语法:FindText (Grid,Col, CompareCol, CompareMode CompareValue,Po
15、sition)GridColCompareCol CompareMode CompareValue Position在表中进行查找,可以用表名表示,也可以用位置表示。返回该列的内容,可以用列名称表示,也可以用位置表示。进行比拟的列,可以用列名称表示,也可以用位置表示。比拟方式,包括=、=、=、Like、InStr共8种比拟方式。比拟值这个参数决定返回第几个符合条件的行的数据,如果省略,那么返回第一个符合条件的行中指定列的内容。可以设置多个比拟条件,从第三个参数开始,每三个参数组成一个比拟条件。如果比拟方式选择的是InStr,那么进行包含查询;如果比拟方式选择Like,那么可以在比拟值中使用通配
16、符进行类似查询。例子:FindText(订单数量,客户CSO1)返回订单表中CSOl客户的第一个订单的订购数量。FindText(订单,数量,客户,J,CS01,产品,=,PD01)返回订单表中CSOl客户第一次订购产品PDOl的数量OFindTeXtc订单数量客户=JCSOl产品=JPDOl,2)返回订单表中CSOl客户第二次订购产品PDOl的数量o利用FindText函数,我们可以在不建立表间关联的情况下引用其他表中有关联的数据。例如订单表和产品表都包括品名、规格、单价等数据,而产品表已经录入所有的品名、规格和单价,我们希望在订单表中只需输入品名和规格,单价即可自动输入。为实现上述目的,我
17、们只需将订单表中单价列的刷新公式设为:FindTeXt(产品表,单价”,品名,=,品名,规格,=,规格)合并关联表在“表”菜单中,单击“合并关联表”,可以将两个关联表合并为一个新表。两个关联表必须有一个为父表,一个为子表,并分别指定用于关联的列,以及需要包括在新表中的列。那么如何确定父表和子表呢?我们知道关联表之间往往存在着一种一对多的关系,例如客户表中的某个客户在订单表中对应着多条订单,而一个订单只能对应着一个客户,所以客户表就是父表,订单表就是子表。关联筛选在表与表之间建立关联后,一个表中的每条记录在关联表中也应该有对应的条记录,但是由于数据输入错误或其他原因,某些记录可能在关联表中没有对
18、应记录。为了快速找出这些记录,可以利用“筛选”菜单中的“关联筛选”命令。不仅是关联表,任何存在一定关系的表,都可以进行这种关联筛选。例如在人事管理中,在根本信息表中按下列图所示进行关联筛选,即可快速找出在根本信息表中有记录而在工资表中没有记录的员工。显然,可以利用关联筛选得到两个结构相同的表的交集或差集,至于并集,可以利用前面提到的合并表的功能来实现。在子方设计下列图是一个入库管理系统,入库单表和入库明细表通过“入库单编号”建立关联,每个入库单记录在入库明细表中对应多个记录,为便于管理,我们通常选择入库单表进行操作,通过菜单命令”表-显示关联表”来显示当前入库单对应的入库明细数据。如果要打印一
19、张入库单,显然应该包括入库单数据和该入库单对应的所有入库明细数据,由于入库单和入库明细存在一对多的关系,所以这张报表按照常规的方法在入库单表设计是不行的,因为没有方法逐一调用入库明细表中的有关数据;为了解决这个问题,我们可以在入库明细表中设计入库单报表,设计过程和普通的报表一样,而且可以很方便地通过表名!列名的格式调用入库单表中的数据,因为入库明细表中每条记录在入库单表中只有唯一的一条对应记录。在入库明细表设计好入库单报表之后,再回到入库单表,需要打印入库单的时候,右击入库明细表,从快捷菜单中指向“打印报表”,单击“入库单”即可。这是在入库明细表中设计的入库单报表:这是入库单打印效果:在父方设
20、计在子方设计一对多报表有一个缺乏,就是每次只能打印父方一条记录,对于批量打印报表非常不便。为解决这个问题,我们也可以考虑在父方设计报表,不过相对要繁琐一些。要在父方设计一对多报表,必须掌握FindTeXt函数,我们知道FindTeXt可以按照指定的条件从指定表中返回指定列的内容,而且可以用参数决定返回第几个符合条件的数据,例如:FindTeXt(入库明细存货编码入库单编号入库单编号,1)表示从入库明细表中找出第一个入库单编号等于当前入库单编号的记录,并返回该记录存货编码列的内容。FindTeXt(入库明细数量入库单编号,”=,入库单编号,6)表示从入库明细表中找出第六个入库单编号等于当前入库单
21、编号的记录,并返回该记录数量列的内容。利用EindText设计一对多的关联报表时,首先应该估计父方每条记录最多可能对应子表中多少条记录,例如一个入库单,最多可能包括多少种产品,假定这个最大数为Rows,子表最大的列数是COls,那么就在报表的细节区绘制一个(RoWS+1)*Cols的表,第一行打印子表的列标题,其他各行用FindText函数调用子表数据进行打印,如下列图所示。为了提高效率,我们可以先设置好第二行的对象,然后复制、粘贴,将新粘贴的对象拖到第三行,然后稍作修改即可,其他各行也用类似的方法处理。上图中,第2行第3列的内容为:FindText(入库明细规格入库单编号,“=,入库单编号,
22、D第7行第6列的内容为:findtext(入库明细数量入库单编号,=,入库单编号,6)其他单元格的内容类推,下面是打印效果:你也许留意到上图中最后两行是空的,这是因为设计报表的时候,预留了7行数据,而当前入库单只有5条入库明细。明细字段明细字段如果将列类型设为明细型,那该列中的每一个单元格都会包含一个明细表,单击单元格右边的按钮,可以翻开明细表。例如在下列图中,家属和工作经历两个字段都是明细型。右击明细表,通过弹出的快捷菜单你可以设置明细表的栏目,列表工程、刷新公式,也可以排序、添加行、删除行。在明细表的最后一个单元格按回车键,会自动增加一行。你也可以通过以下快捷键对明细表进行操作:Ctrl+
23、A增加一行Ctrl+I插入一行Ctrl+Del删除行引用主表中的数据1、明细表不管引用的是哪一个主表的数据,都必须同时包括表名和列名,例如产品!单价2、明细表虽然不能和主表建立表间关联,但是可以利用FindTQXt函数到达和关联相似的效果。假定有一个名为产品表的主表,已经输入编号、品名、单价等数据,希望在明细表中只需输入产品编号,对应的品名和单价即可自动输入。为实现上述目的,我们只需将明细表中产品列的刷新公式设为:FindTeXt(产品”,品名,编号编号),单价列的刷新公式设为:FindTeXtC产品,单价编号,”=,编号)引用明细表中的数据利用SubCell可以返回明细表中的指定位置的内容。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 易表 设置 关联

链接地址:https://www.desk33.com/p-1095168.html