《易表-设置表间关联.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,那么可以在比拟值中使用通配符进行类似查询。例子:FindText(订单数量,客户CSO1)返回订单表中CSOl客户的第一个订单的订购数量。FindText(订单,数量,客户,J,CS01,产品,=,PD01)返回订单表中CSOl客户第一次订购