Foxtable(狐表)用户栏目专家坐堂 → [求助]跨表统计与输入


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

主题:[求助]跨表统计与输入

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
[求助]跨表统计与输入  发帖心情 Post By:2015/8/29 11:54:00 [只看该作者]

说明:有三个表:

 

一个客户表:列名分为:客户名称、年份、货物总额  (年份由于还有其他表的用途,设为整数型的)

 

一个合同表:客户名称、合同编号、合同日期(一个客户可有N个合同)

 

一个合同明细表:合同编号 货物名称 数量 单价 总价(一个合同编号可有N个货物)

 

 

现在要求:输入客户名称及年份后,可自动填入“货物总量”,跨了三个表,有点搞不定了!

 

求助!

[此贴子已经被作者于2015/8/29 11:54:44编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110565 积分:562715 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2015/8/29 12:05:00 [只看该作者]

参考这个
http://www.foxtable.com/help/index.html?n=2490.htm
如果合同表输入客户名称时就在DataTables("客户表")中找,找到就修改
如果算法中用到明细表的字段就用GetChildRows找到子表中的所有行

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/8/29 12:07:00 [只看该作者]

你的意思是要建立关联?

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110565 积分:562715 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2015/8/29 12:08:00 [只看该作者]

合同表和合同明细应该关联起来,而客户表可以不用关联啊
如果不关联的话也可以啊,你拿修改表中有关联的字段去另外一个表中查找也行

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/8/29 12:09:00 [只看该作者]

还是以合同表为中心来进行计算?


 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110565 积分:562715 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2015/8/29 12:17:00 [只看该作者]

是按合同表为中心吧

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/8/29 13:54:00 [只看该作者]

思考良久,你觉得这样行不行,在合同表中增加一个“合同数量”列,然后编写事件代码:当明细表中增加一条记录时,合同表中增加一条合同记录,并将明细表中的相关信息赋值给合同表,当再添加明细时,首先判断有没有该合同号,有的话,将符合添加行的合同编号的数量进行统计,这个结果再赋值给合同表中的合同总量,没有找到合同编号时,执行前面的新增。这是第一步。

 

第二步:通过合同表中的“合同数量”列值的变化,赋值个客户表中的“总数量”

 

蓝兄:你觉得行得通不?

[此贴子已经被作者于2015/8/29 13:54:19编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110565 积分:562715 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2015/8/29 14:11:00 [只看该作者]

首先你要搞清楚你这3个表的关系
1,你新增一个客户的话,合同表里肯定没有新增客户的信息,这时货物总量计算出值为空
2,你新加一个合同,这时你选择了客户名称,就是与客户关联起来了
3,把合同明细和合同建一个父子关联
4,你在合同中加明细,每添加一个明细,在数量列的datacolchanged事件中先找出父表行,然后根据父表行的客户名称,去客户表中查找相应的客户,并修改客户表中的货物总量
[此贴子已经被作者于2015/8/29 14:11:33编辑过]

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2015/8/29 14:29:00 [只看该作者]

Dim cmd As New SQLCommand
Dim dt As DataTable

cmd.CommandText = "SEL ECT sum(a.数量) as 货物总量 From ({合同明细表} a inner join ({合同表} b inner join {客户表} c on b.客户名称 = c.客户名称) on a.合同编号 = b.合同编号 where c.客户名称 = 'xxxxxx' and c.年份 = xxxx"
dt = cmd.ExecuteReader()

Output.Show(dt.DataRows(0)("货物总量"))


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/8/30 10:59:00 [只看该作者]

Dim str As String = DataTables("合同").GetComboListString("合同编号", "客户名称 = '张三'").replace("|", "','")
Dim sum As Double = DataTables("合同明细").Compute("sum(总价)", "合同编号 in ('" & str & "')")
msgbox(sum)

 回到顶部