以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]SQLGroupTableBuilder问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=116338)

--  作者:小美菜
--  发布时间:2018/3/23 8:48:00
--  [求助]SQLGroupTableBuilder问题

图片点击可在新窗口打开查看此主题相关图片如下:1p99su$`s%uc1khs@dzh~(u.png
图片点击可在新窗口打开查看


Dim CombGetColTbl As WinForm.ComboBox = e.Form.Controls("CombGetColTbl") \'CombGetColTbl对应第一张图的{产值付款流程表}
If CombGetColTbl.Items.Count<1 Then
    MessageBox.Show("没有需要统计的表")
    Return
End If
Dim MainSumTable As String = CombGetColTbl.Items(0) \'统计使用的主表
Dim  CombSumCol As WinForm.ListBox = e.Form.Controls("LstSumCol1")\'对应第一张图的{SUM(申报金额) SUM(批复金额)}
If CombSumCol.Items.Count<1 Then
    MessageBox.Show("没有选定统计列")
    Return
End If
Dim SumName As String = e.Form.Controls("TxtGroup1").TEXT \'生成查询表的名字
Dim tStr As String = ""
If SUMNAME.Trim() = "" Then
    SUMNAME= MainSumTable & "统计表"
    e.Form.Controls("TxtGroup1").TEXT = SUMNAME
End If
Dim DetailCol As WinForm.ListBox = e.Form.Controls("LstDetailDec1") \'对应第一张图的{都匀电厂补水管,都匀电厂柴油机,都匀电厂复用水}
Dim nCn As Integer = DetailCol.Items.Count -1
Dim bdx(CombSumCol.Items.Count-1 , iif(nCn<0 ,0 , nCn) ) As SQLGroupTableBuilder \'
Dim dtx(CombSumCol.Items.Count-1 , iif(nCn<0 ,0 , nCn) )  As fxDataSource
Dim vSum(CombSumCol.Items.Count-1) As  mColValue \'
Functions.Execute("Fun分离lstboxs数据",CombSumCol,vSum,MainSumTable,"",False)
Dim vGrp(iif(nCn<0 ,0 , nCn)) As  mColValue \'
Functions.Execute("Fun分离lstboxs数据",DetailCol,vGrp,MainSumTable,e.Form.Controls("CombGetColTbl1").text,False)
For i As Integer=0   To CombSumCol.Items.Count -1
    For j As Integer=0   To iif(nCn<1,0,ncn)
        If i=0 And j=0 Then
            bdx(0,0) = New SQLGroupTableBuilder(SUMNAME,MainSumTable )
        Else
            bdx(I,J) = New SQLGroupTableBuilder(SUMNAME & i & j,MainSumTable )
        End If
        bdx(I,J).C
    Next
Next
For L As Integer = 0 To CombGetColTbl.Items.Count -1 \'\'连接多表
    Dim CombLinkCol01 As WinForm.ComboBox = e.Form.Controls("CombLinkCol" & L & "1") \'连接字段
    Dim CombLinkCol02 As WinForm.ComboBox = e.Form.Controls("CombLinkCol" & L & "2") \'连接字段
    If L>0 Then
        If CombLinkCol01.Text <> "" AndAlso CombLinkCol02.text <> "" Then
            For i As Integer=0  To CombSumCol.Items.Count -1
                For j As Integer =0 To iif(nCn<1,0,ncn)
                    bdx(I,J).AddTable(MainSumTable ,CombLinkCol01.Text ,CombGetColTbl.Items(L) ,CombLinkCol02.Text )
                Next
            Next
            
        End If
    End If
Next
Dim LstGrpName As WinForm.ListBox = e.Form.Controls("LstDesColName1") \' 统计时的分组列
Dim grpN(LstGrpName.Items.Count-1) As String
Dim il As Integer =0
For i As Integer =0 To (LstGrpName.Items.Count -1)
    tStr = LstGrpName.Items(i)
    il=tStr.IndexOf("}.")
    grpN(i)=tstr.Trim()
    For j As Integer = 0 To CombSumCol.Items.Count -1
        For k As Integer = 0 To iif(nCn<1,0,ncn)
            bdx(j,k).Groups.AddDef( tStr ,IIF(IL>0, tStr.SubString(tStr.IndexOf("}.") +2 ),tStr) ) \'
            \'MessageBox.Show("J"  & J & "     K" & K & "GRP:" & tStr, & "GRP:" & tStr)
        Next
    Next
Next
For i As Integer =0 To CombSumCol.Items.Count -1 \'\'开始统计
    For j As Integer = 0 To  iif(nCn<1,0,ncn) \'DetailCol
        bdx(I,j).Totals.AddDef( vSum(i).Value ,  vSum(i).Value & "_" & vGrp(j).dfVal) \' tStr.SubString(tStr.IndexOf("}.") +2 ) )
        \'MessageBox.Show("IvSum(i).Value "  & vSum(i).Value  & "     vSum(i).Value _ vGrp(j).dfVal" & vSum(i).Value & "_" & vGrp(j).dfVal & "GRP:" & tStr)
        If vGrp(j).dfVal<>"" Then bdx(I,j).Filter =  vGrp(j).Value & " = \'" & vGrp(j).dfVal & "\'"
        
        dtx(i,j) = bdx(I,j).BuildDataSource()
        \'
        
        If i<> 0 Or j<> 0 Then \'
\'            MessageBox.Show("grpN(0) I"  & i & grpN(0) & "     grpN(1) J" & J & grpN(1) & "vSum(J).dfVal" & vGrp(j).dfVal  )
            dtx(0,0).Combine(grpN ,dtx(I,j), grpN)\'
        End If
    Next
Next

Tables("通用分组查询器_TblData").DataSource = bdx(0,0) \'这个结果出来后,见图第二张,怎么会没有动呢?
Tables("通用分组查询器_TblData").AutoSizeCols()

--  作者:小美菜
--  发布时间:2018/3/23 9:08:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:}(nm0rmmua8m%wqs}p@_21o.png
图片点击可在新窗口打开查看

--  作者:有点甜
--  发布时间:2018/3/23 9:26:00
--  
不理解你的问题,出什么错?具体项目发上来测试。
--  作者:小美菜
--  发布时间:2018/3/23 9:56:00
--  
哎,麻烦看下代码有问题没有,特别是Tables("通用分组查询器_TblData").DataSource = bdx(0,0),可不可以这样玩
--  作者:有点甜
--  发布时间:2018/3/23 11:12:00
--  

Tables("通用分组查询器_TblData").DataSource = bdx(0,0)

 

改成

 

Tables("通用分组查询器_TblData").DataSource = dtx(0,0)

 

如果有问题,做个例子发上来测试。


--  作者:小美菜
--  发布时间:2018/3/23 12:35:00
--  
谢谢有点甜老师,正是你指出的那条困扰我一天一夜,终于按我要求搞出查询结果了。另外想问一下老师,这总汇总查询,比如有一列是文本型,也要在查询里占一列,内容也不想让它变化,有办法吗?


--  作者:有点甜
--  发布时间:2018/3/23 12:45:00
--  
以下是引用小美菜在2018/3/23 12:35:00的发言:
另外想问一下老师,这总汇总查询,比如有一列是文本型,也要在查询里占一列,内容也不想让它变化,有办法吗?
 

 

文本列,作为分组列,其值肯定不会变化;

 

如果不是分组列,作为统计列,那么可以用表达式 max(文本列) 获取值