以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]两表数据合并(已解决)  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=22586)

--  作者:shenyl0211
--  发布时间:2012/8/17 16:53:00
--  [求助]两表数据合并(已解决)

现有两表:项目表和合同表。

项目表有“项目名称”和“产值”2列,共3行数据:项目名称分别为A、B、C,产值分别为1、2、3;

合同表有“项目名称”和“合同名称”2列,共5行数据:项目名称A对应的合同名称有3行:A1、A2、A3,项目名称B对应的合同名称有2行:B1、B2,项目名称C对应的合同表没有记录(合同未签)。

用“项目名称”关联两表。

现要输出汇总表:包含“项目名称”、“合同名称”、“产值”3列、6行。

请问:应该用什么方法?

谢谢!

 

[此贴子已经被作者于2012-8-18 13:39:04编辑过]

--  作者:chnfo
--  发布时间:2012/8/17 17:20:00
--  

这不可能。

因为产值是对应项目的,不是对应合同的。要用到合并模式。


--  作者:狐狸爸爸
--  发布时间:2012/8/17 20:10:00
--  

用查询表。

不写代码的,从这一节开始看:

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

 

写代码的,从这一节开始看:

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

 


--  作者:shenyl0211
--  发布时间:2012/8/18 13:38:00
--  

谢谢各位。

项目C在合同表中是没有对应记录的,但必须列出,所以,只能增加临时表且编写所有代码了。现在已经解决了。

现附上实际表的代码作为共享:

\'创建临时表

Dim dtb As New DataTableBuilder("账面信息")

dtb.AddDef("实体名称",Gettype(String),6)

dtb.AddDef("项目名称",Gettype(String),40)

dtb.AddDef("编号",Gettype(Integer))

dtb.AddDef("合同额",Gettype(Integer))

dtb.AddDef("合同名称",Gettype(String),75)

dtb.AddDef("合同编号",Gettype(String),11)

dtb.AddDef("初始合同额",Gettype(Integer))

dtb.AddDef("结算金额",Gettype(Integer))

dtb.AddDef("上报产值",Gettype(Integer))

dtb.AddDef("签认产值",Gettype(Integer))

dtb.AddDef("签认日期",Gettype(Date))

dtb.AddDef("到款合计",Gettype(Integer))

dtb.AddDef("签认欠款",Gettype(Integer))

dtb.AddDef("审批成本",Gettype(Integer))

dtb.AddDef("累计成本",Gettype(Integer))

dtb.AddDef("累计支出",Gettype(Integer))

dtb.AddDef("借款余额",Gettype(Integer))

dtb.Build()

\'准备工作

MainTable= Tables("账面信息")

Tables("项目全面管理").filter="[项目名称] not Like \'*管理经费*\' And [项目名称] not Like \'*未列项目*\'" \'排除管理经费和未列项目

Tables("项目全面管理").sort="实体名称,编号"

Tables("合同台账管理").sort="实体名称,项目名称"

Dim i,k,r As Integer

Dim dr1 As Row

Dim dr,dr2,dr3 As DataRow

k=Tables("项目全面管理").rows.count

\'添加记录

For i=0 To k-1 \'以项目全面管理表为准逐行搜索每个项目在合同台账管理表中的合同记录

\'添加项目全面管理表的记录

    dr1= Tables("项目全面管理").rows(i)

    dr3=DataTables("账面信息").addnew()

    dr3("实体名称")=dr1("实体名称")

    dr3("项目名称")=dr1("项目名称")

    dr3("编号")=dr1("编号")

    dr3("合同额")=dr1("合同额_合计")

    dr3("上报产值")=dr1("营业额_总计")

    dr3("签认产值")=dr1("参考数据_签认营业额")

    dr3("签认日期")=dr1("参考数据_签认日期")

    dr3("到款合计")=dr1("到款合计")

    dr3("签认欠款")=dr1("参考数据_签认欠款")

    dr3("审批成本")=dr1("审批成本")

    dr3("累计成本")=dr1("参考数据_累计成本")

    dr3("累计支出")=dr1("参考数据_累计支出")

    dr3("借款余额")=dr1("参考数据_借款余额")

\'添加合同台账管理表的记录

    dr =DataTables("合同台账管理").Find("实体名称 = \'" & dr1("实体名称") & "\' And 项目名称=\'" & dr1("项目名称") & "\'")

    r = Tables("合同台账管理").FindRow(dr)

    If r>=0 Then

        r=0

        For Each dr2 In DataTables("合同台账管理").Select("[实体名称] = \'" & dr1("实体名称") & "\' And [项目名称]=\'" & dr1("项目名称") & "\'")

            If r>0 Then

                dr3=DataTables("账面信息").AddNew()

            End If

            dr3("实体名称")=dr1("实体名称")

            dr3("项目名称")=dr1("项目名称")

            dr3("合同名称")=dr2("合同名称")

            dr3("合同编号")=dr2("合同编号")

            dr3("初始合同额")=dr2("初始合同额")

            dr3("结算金额")=dr2("结算金额")

            r=1

        Next

    End If

Next

\'生成汇总统计表

Dim t As Table = Tables("账面信息")

Dim g As SubtotalGroup

t.SubtotalGroups.Clear()

t.GroupAboveData = False

t.TreeVisible = False

t.SpillNode = True

g = New SubtotalGroup

g.Aggregate = AggregateEnum.Sum

g.GroupOn = "实体名称"

g.TotalOn = "合同额,初始合同额,结算金额,上报产值,签认产值,到款合计,签认欠款,审批成本,累计成本,累计支出,借款余额"

g.Caption = "{0} 小计"

t.SubtotalGroups.Add(g)

t.Subtotal()

\'自动列宽,较长的项目名称和合同名称用固定列宽

[此贴子已经被作者于2012-8-18 13:47:44编辑过]

--  作者:zhaopm
--  发布时间:2013/3/13 17:47:00
--  
能不能发个例子学习一下呢?