Foxtable(狐表)用户栏目专家坐堂 → [原创]三个表之间多对多关联,请教思路。


  共有14976人关注过本帖树形打印复制链接

主题:[原创]三个表之间多对多关联,请教思路。

帅哥哟,离线,有人找我吗?
phrgg
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:49 积分:585 威望:0 精华:0 注册:2012/7/17 16:24:00
[原创]三个表之间多对多关联,请教思路。  发帖心情 Post By:2012/9/2 12:46:00 [只看该作者]

有五个表A/B/C/D/E,其中A,C,E表是数据表,B,D表是AC,CD表间ID对应关系表。想实现点表A的行切换的时候,表A与表C,表C与表E的关联都自动全部显示。

例子:{表A}[ID]=(1,2,3)

:{表C}[ID]=(1,2,3)

:{表E}[ID]=(1,2,3)

:{表B}[表AID]=(1,1,3) [表CID]=(1,2,3)

:{表D}[表CID]=(1,2,3) [表EID]=(1,2,3)

其中

:{表B}[表AID]-关联-{表A}[ID] ,{表B}[表CID]-关联-{表C}[ID]

:{表D}[表CID]-关联-{表C}[ID] ,{表B}[表EID]-关联-{表E}[ID]

 

我的目标是,我点表A的行切换,表C与表A的关联都显示,表E与表C的关联都显示。

表C与表A的关联后的表上,我进行行切换,表E与表C的关联就都显示。

 

尝试用模拟关联表做,但只能做表A与表C的多对多关联,不能做到表C与表E的多对多关联。

望赐教,谢谢。

 

附件中是截图说明和项目文件

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多对多关联.rar

[此贴子已经被作者于2012-9-2 18:55:51编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2012/9/2 13:18:00 [只看该作者]

请上传个附件,供测试


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/9/3 8:24:00 [只看该作者]

我很难理解你的问题。

关联是有固定套路的,是不能改的,如果有特殊需求,可以模拟关联表:

http://www.foxtable.com/help/topics/2222.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2012/9/3 9:41:00 [只看该作者]

以下是引用phrgg在2012-9-2 12:46:00的发言:

有五个表A/B/C/D/E,其中A,C,E表是数据表,B,D表是AC,CD表间ID对应关系表。想实现点表A的行切换的时候,表A与表C,表C与表E的关联都自动全部显示。

例子:{表A}[ID]=(1,2,3)

:{表C}[ID]=(1,2,3)

:{表E}[ID]=(1,2,3)

:{表B}[表AID]=(1,1,3) [表CID]=(1,2,3)

:{表D}[表CID]=(1,2,3) [表EID]=(1,2,3)

其中

:{表B}[表AID]-关联-{表A}[ID] ,{表B}[表CID]-关联-{表C}[ID]

:{表D}[表CID]-关联-{表C}[ID] ,{表B}[表EID]-关联-{表E}[ID]

 

我的目标是,我点表A的行切换,表C与表A的关联都显示,表E与表C的关联都显示。

表C与表A的关联后的表上,我进行行切换,表E与表C的关联就都显示。

 

尝试用模拟关联表做,但只能做表A与表C的多对多关联,不能做到表C与表E的多对多关联。

望赐教,谢谢。

 

附件中是截图说明和项目文件

 下载信息  [文件大小:126.2 KB  下载次数:2]
图片点击可在新窗口打开查看点击浏览该文件:多对多关联.rar

[此贴子已经被作者于2012-9-2 18:55:51编辑过]

根据图示,这是不可能的,关联表只能显示关联项,相当于筛选了符合项了。如果要达到你得要求,你为什么要用表B来进行过渡那?直接吧关联号连接到表C,即可达到你得要求。


 回到顶部
帅哥哟,离线,有人找我吗?
phrgg
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:49 积分:585 威望:0 精华:0 注册:2012/7/17 16:24:00
  发帖心情 Post By:2012/9/3 14:39:00 [只看该作者]

中间增加一个过渡表是方便多人进行添加表A和表C之间的关联的。

 

表A和表C是多对多关联的,表A和表C可以做一个模拟关联表来解决,但是表C和表E之间的多对多关联怎么解决?我是想要在表A进行行切换的时候,两个模拟关联表都能同步更新。

 

附件是不能实现我的要求,所以希望给提供思路。


 回到顶部
帅哥哟,离线,有人找我吗?
phrgg
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:49 积分:585 威望:0 精华:0 注册:2012/7/17 16:24:00
  发帖心情 Post By:2012/9/3 15:23:00 [只看该作者]

 

我有三个表,

在订单表的:“simens 模件 ”“SIMENS 电路板”

在库存表中的“西门子模件” “德国 西门子 板子”

在使用表中的“南京西门子模件” “德国 西门子 板子”

这些说的都是一个东西,我想点订单表里头“simens 模件”或“SIMENS 电路板”,就能显示出库存表中的“西门子模件” “德国 西门子 板子”,然后统计一下库存数量。 直接建立关联是无法建立的,所以要增加一个过渡表。

当我点库存表的时候,就会把使用表里这种模件都列出来,这样我就知道这种模件被用了多少了。


不要让我把三个表的产品型号改成一致再关联,因为每个表都有上千行,而且没有一个人对所有的产品都清楚。


 

 

订单表

 

  订单号    产品型号    数量 
   1    simens 模件    10
   2    ABB模件    8
   3    SIMENS 电路板    7

 

库存表

 

  库存号   产品型号     数量 
   1    西门子模件    4
   2    美国ABB 板子    6
   3    德国 西门子 板子    7

 

使用表

 

  使用号    产品型号    数量 
   1    南京西门子模件    9
   2     美国ABB 板子    0
   3   德国 西门子 板子     2

 

这样不知是否清楚。


 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2012/9/3 16:06:00 [只看该作者]

不要让我把三个表的产品型号改成一致再关联,因为每个表都有上千行,而且没有一个人对所有的产品都清楚。


这个才是你这个问题的关键,也是我们没能理解你为什么有这个需求。在进行录入的时候,你必须限定用户录入名称。明明就是一样的东西,在你一张表里居然就出现了2个名称,更加恐怖的是,三个表的名称都不一样,指的却是一个东西。

 

个人建议,

你必须开始限定用户录入名称,即增加下拉列表让用户选择,而不是录入,如果名称可能不断增长,你可以考虑增加一个表让专人来填写新增产品。

全部统一名称,真的必须做,现在多花点时间整理,否则以后维护起来会非常困难。

 

问个问题,中间过渡表谁来填?用户吗?如果是用户,难道不会有填错的可能吗?都是键,没有实际名称,以后查找错误的难度肯定非常大。


 回到顶部
帅哥哟,离线,有人找我吗?
phrgg
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:49 积分:585 威望:0 精华:0 注册:2012/7/17 16:24:00
  发帖心情 Post By:2012/9/3 18:48:00 [只看该作者]

大哥,首先这几个表是已经存在的表,而且不止这么几个表。客户是不可能让你把表改得面目全非的。

第二,如果能做多个表进行多对多关联,对客户来说操作界面是很友好的。毕竟,技术是为人服务的嘛。

 

当然,你说的在实际应用中也是很对的。如果从纯技术上,想实现有什么好方法吗

[此贴子已经被作者于2012-9-3 19:18:53编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2012/9/3 20:14:00 [只看该作者]

以下是引用phrgg在2012-9-3 18:48:00的发言:

大哥,首先这几个表是已经存在的表,而且不止这么几个表。客户是不可能让你把表改得面目全非的。

第二,如果能做多个表进行多对多关联,对客户来说操作界面是很友好的。毕竟,技术是为人服务的嘛。

 

当然,你说的在实际应用中也是很对的。如果从纯技术上,想实现有什么好方法吗

[此贴子已经被作者于2012-9-3 19:18:53编辑过]

首先,你现在借助foxtable来重新设计,只需要考虑到不改变客户习惯,界面友好,而后台表不是客户考虑的吧?既然这个,你按照客户这个错误表继续走下去,以后系统可能出问题。出了问题肯定找你,到时候你有的头疼。

我给个小思路,希望有其他高手帮你想想方法。

你首先应该建立,名称对应表(你可以设计进系统,也可以只是作为对照表),设计至少以下2列,编号,对应名称 即

 

“simens 模件 ”“SIMENS 电路板”

“西门子模件” “德国 西门子 板子”

“南京西门子模件” “德国 西门子 板子”

都属于类A,

那么你就在表前六行填 A simens 模件 。依次类推。

然后,在表A和表C增加一列,用于录入编号,用编号列作为键进行设计,效果和原理和我上面说的一样。这样你就不用管用户如何录入什么名称,只要这个键填对就可以了。


 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2012/9/3 20:40:00 [只看该作者]

应该勉强能够满足你现在的要求,不需要三表有关联

在currentChanged表事件加入以下代码

If e.Table.Current Is Nothing Then 
    Return
End If
Tables("表B").Filter = "ID = '" & Tables("表A").Current("ID") & "'"
Dim str As String
For Each r As Row In Tables("表B")
    str = str & ",'" & r("ID") & "',"
Next
str = str.Trim(",")
Tables("表C").Filter = "ID in (" & str & ")"
Dim sum As Integer = Tables("表C").Compute("sum(数量)")

[此贴子已经被作者于2012-9-3 20:45:51编辑过]

 回到顶部
总数 12 1 2 下一页