以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  联合查询  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=80733)

--  作者:kaituozhe
--  发布时间:2016/1/30 16:01:00
--  联合查询

以下这段代码先通过采购订单主表与采购订单表联合生成一个订单查询表,然后再查根据条件筛选所需数据,如果数据非常多时这样查询的工作量就会非常大,我的想法是通过先在主表查询符合部分条件(因为有部分条件并不在主表中而采购订单表中)的数据,然后再联合生成一个订单查询表,再筛选,但是不知道怎么改。 

Dim sg As New SQLJoinTableBuilder("订单查询","采购订单主表")
sg.AddTable("采购订单主表","订单编号","采购订单","订单编号")
sg.AddCols("{采购订单主表}.订单编号","{采购订单主表}.供应商","{采购订单主表}.日期","审核","审批","{采购订单主表}.部门","品牌","型号","数量","含税单价","{采购订单主表}.金额")
sg.Build()
MainTable = Tables("订单查询")
Dim Filter As String
With e.Form.Controls("部门")
    If .Value IsNot Nothing Then
        Filter = "部门 = \'" & .Value & "\'"
    End If
End With
With e.Form.Controls("供应商")
    If .Value IsNot Nothing Then
        If Filter > "" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "供应商 = \'" & .Value & "\'"
    End If
End With
With e.Form.Controls("品牌")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "品牌 = \'" & .Value & "\'"
    End If
End With
With e.Form.Controls("开始日期")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 >= #" & .Value & "#"
    End If
End With
With e.Form.Controls("截止日期")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 <= #" & .Value & "#"
    End If
End With
If e.Form.Controls("已审核").Checked = True \' 如果付款状态选择了"已付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "审核 IsNot Null"
End If
If e.Form.Controls("未审核").Checked = True \' 如果付款状态选择了"未付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "审核 = False Or 审核 Is Null"
End If
If Filter > "" Then
    Tables("订单查询").Filter = Filter
End If


--  作者:kaituozhe
--  发布时间:2016/1/30 16:05:00
--  

比如,先筛选出主表符合日期、供应商、部门、审核条件的数据,再与采购订单表联合组成新的表,然后再筛选出符合全部条件数据。这样会大大缩小筛选范围。


--  作者:Hyphen
--  发布时间:2016/1/30 16:22:00
--  
Dim sg As New SQLJoinTableBuilder("订单查询","采购订单主表")
sg.AddTable("采购订单主表","订单编号","采购订单","订单编号")
sg.AddCols("{采购订单主表}.订单编号","{采购订单主表}.供应商","{采购订单主表}.日期","审核","审批","{采购订单主表}.部门","品牌","型号","数量","含税单价","{采购订单主表}.金额")
sg.Filter = "供应商=\'XXX\' and 部门=\'XXX\'"
sg.Build()