以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]跨表统计与输入  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=73925)

--  作者:liuxianjie1980
--  发布时间:2015/8/29 11:54:00
--  [求助]跨表统计与输入

说明:有三个表:

 

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

 

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

 

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

 

 

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

 

求助!

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

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

--  作者:liuxianjie1980
--  发布时间:2015/8/29 12:07:00
--  
你的意思是要建立关联?
--  作者:有点蓝
--  发布时间:2015/8/29 12:08:00
--  
合同表和合同明细应该关联起来,而客户表可以不用关联啊
如果不关联的话也可以啊,你拿修改表中有关联的字段去另外一个表中查找也行

--  作者:liuxianjie1980
--  发布时间:2015/8/29 12:09:00
--  

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


--  作者:有点蓝
--  发布时间:2015/8/29 12:17:00
--  
是按合同表为中心吧
--  作者:liuxianjie1980
--  发布时间:2015/8/29 13:54:00
--  

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

 

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

 

蓝兄:你觉得行得通不?

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

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

--  作者:Hyphen
--  发布时间: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)("货物总量"))


--  作者:大红袍
--  发布时间:2015/8/30 10:59:00
--  
Dim str As String = DataTables("合同").GetComboListString("合同编号", "客户名称 = \'张三\'").replace("|", "\',\'")
Dim sum As Double = DataTables("合同明细").Compute("sum(总价)", "合同编号 in (\'" & str & "\')")
msgbox(sum)