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


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

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

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


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

请上传个附件,供测试


 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | 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,即可达到你得要求。


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


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

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


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

 

个人建议,

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

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部