以文本方式查看主题 - 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 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" 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) |