以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]统计报表中的Build方法与BuildDataSource方法区别?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=35166)

--  作者:kolen
--  发布时间:2013/6/25 15:53:00
--  [求助]统计报表中的Build方法与BuildDataSource方法区别?

统计报表中的Build方法与BuildDataSource方法区别?

 

在看帮助文件“统计与查询”章节,看到,有的时候用.Build(),有的时候用.BuildDataSource(),两者到底有什么区别呢?狐爸爸!


--  作者:狐狸爸爸
--  发布时间:2013/6/25 15:56:00
--  

build直接生成一个统计表,在主界面中显示,就像通过菜单统计一样。

buildDatasource生成的统计表,不会显示在主界面中,通常用于动态绑定到窗口中的Table控件:

 

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

 


--  作者:kolen
--  发布时间:2013/6/25 16:07:00
--  

 狐爸爸:下面的代码红色那句不要就会出错,但是要了就会在主界面中看到统计表,为了不显示统计表1,我该怎么修改呢?

 

 

 

  \'----------以下是结账运算代码
            Dim Date1,Date2 As Date
            Date1 =  Tables("月末结账").Current("结账期_起")
            Date2 =  Tables("月末结账").Current("结账期_讫")
            Dim bd1 As New GroupTableBuilder("统计表1",DataTables("采购入库单明细表"))
            Dim dt1 As fxDataSource
            bd1.Filter = "[日期] >= # " & Date1 & "# And [日期]<= # " & Date2 & "#"
            bd1.Groups.AddDef("品号") \'根据品号分组
            bd1.Totals.AddDef("数量","采购_数量") \'对数量进行统计
            bd1.Totals.AddDef("金额","采购_金额") \'对金额进行统计
            dt1 = bd1.BuildDataSource()
           
            Dim bd2 As New GroupTableBuilder("统计表2",DataTables("生产入库单明细"))
            Dim dt2  As fxDataSource
            bd2.Filter = "[日期] >= #" & Date1 & "# And [日期]<= # " & Date2 & "#"
            bd2.Groups.AddDef("品号") \'根据品号分组
            bd2.Totals.AddDef("数量","生产入库_数量") \'对数量进行统计
            bd2.Totals.AddDef("金额","生产入库_金额") \'对金额进行统计
            dt2 = bd2.BuildDataSource()
           
           
           
            dt1.Combine("品号",dt2,"品号") \'将生产入库统计数据组合到采购入库统计数据
           
            dt1.show("统计表1")
           
            With DataTables("统计表1").DataCols  \'用表达式列计算库存数据
                .Add("库存_数量",Gettype(Double), "IsNull([采购_数量],0) + ISNULL([生产入库_数量],0)")
                .Add("库存_金额",Gettype(Double), "IsNull([采购_金额],0) + ISNULL([生产入库_金额],0)")
            End With
           
           
            \'将计算数据填充到仓库总账中

            Tables("仓库总账").Filter = "[期间] = \'" & Date1.Month & "\'"
            For Each r1 As DataRow In DataTables("统计表1").DataRows
                For Each r2 As Row In Tables("仓库总账").Rows
                    If r1("品号") = r2("品号") Then
                        r2("入库数量") = r1("库存_数量")
                        r2("入库金额") = r1("库存_金额")
                    End If
                   
                Next
            Next
           Tables("仓库总账").DataTable.save
           


--  作者:zaianda
--  发布时间:2013/6/25 16:10:00
--  

一般在进行组合多个统计结果时会用到buildDatasource,比如:

 

Dim b As New GroupTableBuilder("统计表1",DataTables("订单"))
b
.Groups.AddDef("日期","月份")
b
.Totals.AddDef("数量")
Tables
("窗口1_Table1").DataSource = b.BuildDataSource
()

 

与Build相比,buildDatasource可以生成不显示在主界面,但是能绑定table的表格。最重要的是它生成的统计表是fxDataSource类型,

可以使用Combine方法对多个统计表进行合并。所以在组合多个统计表时常常要用到它。


--  作者:Bin
--  发布时间:2013/6/25 16:11:00
--  
最简单的办法就是.设置这个表的  visible=false
--  作者:kolen
--  发布时间:2013/6/25 16:15:00
--  
以下是引用Bin在2013-6-25 16:11:00的发言:
最简单的办法就是.设置这个表的  visible=false

这也是个办法.

GroupTableBuilder
CrossTableBuilder
SQLGroupTableBuilder
SQLCrossTableBuilder
SQLJoinTableBuilder
DataTableBuilder

 

另外以上类型生成的都是临时表,对吗?我重新打开项目后,统计表1就会不见了。

[此贴子已经被作者于2013-6-25 16:15:58编辑过]

--  作者:Bin
--  发布时间:2013/6/25 16:24:00
--  
是的.
--  作者:don
--  发布时间:2013/6/25 16:40:00
--  
看樓主的代碼,這樣就達到目的吧:

Dim t1 As Table = Tables("仓库总账")
Dim dt1,dt2 As DataTable
Dim flt,s1 As String
Dim Date1,Date2 As Date
Date1 = Tables("月末结账").Current("结账期_起")
Date2 = Tables("月末结账").Current("结账期_讫")
dt1 = DataTables("采购入库单明细表")
dt2 = DataTables("生产入库单明细")
s1 = "[日期] >= #" & Date1 & "# And [日期]<= #" & Date2 & "#"

t1.Filter = "[期间] = \'" & Date1.Month & "\'"
For Each r2 As Row In t1.Rows
    flt = s1 & " and 品号 = \'" r2("品号") & "\'"
    r2("入库数量") = dt1.Compute("Sum(数量)",flt) + dt2.Compute("Sum(数量)",flt)
    r2("入库金额") = dt1.Compute("Sum(金额)",flt) + dt2.Compute("Sum(金额)",flt)
Next

t1.DataTable.save

--  作者:狐狸爸爸
--  发布时间:2013/6/25 16:56:00
--  
以下是引用don在2013-6-25 16:40:00的发言:
看樓主的代碼,這樣就達到目的吧:

Dim t1 As Table = Tables("仓库总账")
Dim dt1,dt2 As DataTable
Dim flt,s1 As String
Dim Date1,Date2 As Date
Date1 = Tables("月末结账").Current("结账期_起")
Date2 = Tables("月末结账").Current("结账期_讫")
dt1 = DataTables("采购入库单明细表")
dt2 = DataTables("生产入库单明细")
s1 = "[日期] >= #" & Date1 & "# And [日期]<= #" & Date2 & "#"

t1.Filter = "[期间] = \'" & Date1.Month & "\'"
For Each r2 As Row In t1.Rows
    flt = s1 & " and 品号 = \'" r2("品号") & "\'"
    r2("入库数量") = dt1.Compute("Sum(数量)",flt) + dt2.Compute("Sum(数量)",flt)
    r2("入库金额") = dt1.Compute("Sum(金额)",flt) + dt2.Compute("Sum(金额)",flt)
Next

t1.DataTable.save

 

呵呵,我看着别人的代码就晕,这方面的能力我能有你一半就好了。

 

图片点击可在新窗口打开查看


--  作者:don
--  发布时间:2013/6/25 17:04:00
--  
哈哈,互換吧,我給你一半,你給俺一半,包括Money图片点击可在新窗口打开查看