以文本方式查看主题

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

--  作者:lk15502
--  发布时间:2017/1/13 9:17:00
--  数据查询
表:计划配缸通知单;有“订单明细编号对外”,“计划重量”,“投坯重量”三列,想查找“订单明细编号对外”是相同的列,如果“订单明细编号对外”相同,“计划重量"也是一样的;如果一样的编号列“投坯重量”相加小于“计划重量”,把符合这样条件的找出来,下面的代码不能达到目的,去老师看看,或者有更好的办法?
DataTables("计划配缸通知单").LoadFilter = ""
DataTables("计划配缸通知单").Load
Tables("计划配缸通知单").RepeatFilter("订单明细编号对外", 0)
Tables("计划配缸通知单").Filter = "[System_Filter_Unique] = 1 And 订单明细编号对外 Is not null"

Dim s As String = DataTables("计划配缸通知单").GetComboListString("订单明细编号对外",Tables("计划配缸通知单").Filter)
Dim gh1s As New List(of String)
Dim ghs() As String
ghs = s.split("|")
For Index As Integer = 0 To ghs.Length - 1
    Dim drs As List(of DataRow) = DataTables("计划配缸通知单").Select("订单明细编号对外 = \'" & ghs(Index) & "\'")
    If drs.count > 0 Then
        Dim tpzl As Double
        Dim jhzl As Double
        For Each dr As DataRow In drs
            tpzl = tpzl + dr("投坯重量")
            jhzl = dr("计划重量")
        Next
        If tpzl/jhzl < 0.96 Then
            gh1s.Add(ghs(Index))
        End If
    End If
Next
If gh1s.Count > 0 Then
    Dim st As String
    For Each gh1 As String In gh1s
        st = "\'" & gh1 & "\'," & st
    Next
    st = st.TrimEnd(",")
    DataTables("计划配缸通知单").loadfilter = "订单明细编号对外 in (" & st & ")"
    DataTables("计划配缸通知单").load
Else
    DataTables("计划配缸通知单").loadfilter = "_identify is null"
    DataTables("计划配缸通知单").load
End If


--  作者:有点色
--  发布时间:2017/1/13 9:46:00
--  

请上传实例测试

 

Dim idxs As String = "-1,"

for each bh as string in DataTables("计划配缸通知单").GetValues("订单明细编号对外")
    Dim drs As List(of DataRow) = DataTables("计划配缸通知单").Select("订单明细编号对外 = \'" & bh & "\'")
    If drs.count > 0 Then
        Dim tpzl As Double
        Dim jhzl As Double
        For Each dr As DataRow In drs
            tpzl = tpzl + dr("投坯重量")
            jhzl = dr("计划重量")
        Next
        If tpzl/jhzl < 0.96 Then
            idxs &= bh & ","
        End If
    End If
Next
DataTables("计划配缸通知单").loadfilter = "订单明细编号对外 in (" & idxs.trim(",") & ")"
DataTables("计划配缸通知单").load

 


--  作者:lk15502
--  发布时间:2017/1/13 11:34:00
--  
老师,找到原因了,
Dim tpzl As Double = 0
Dim jhzl As Double = 0

--  作者:lk15502
--  发布时间:2017/1/13 11:57:00
--  
Dim idxs As String = "-1,"为什么等于-1;并且还要加上逗号
--  作者:有点色
--  发布时间:2017/1/13 12:39:00
--  
以下是引用lk15502在2017/1/13 11:57:00的发言:
Dim idxs As String = "-1,"为什么等于-1;并且还要加上逗号

 

这种,是为了生成 数字 类型的条件,最后会得到 -1,2,9,8 之类的数据,作为条件;当没有查到数据的时候,也不至于让数据报错,因为 -1 本身就可以查。

 

你也可以不用-1,最后你判断idxs是不是空值即可。

 

如果是判断字符的,改代码

 

Dim idxs As String = "\'\',"

for each bh as string in DataTables("计划配缸通知单").GetValues("订单明细编号对外")
    Dim drs As List(of DataRow) = DataTables("计划配缸通知单").Select("订单明细编号对外 = \'" & bh & "\'")
    If drs.count > 0 Then
        Dim tpzl As Double = 0
        Dim jhzl As Double = 0
        For Each dr As DataRow In drs
            tpzl = tpzl + dr("投坯重量")
            jhzl = dr("计划重量")
        Next
        If tpzl/jhzl < 0.96 Then
            idxs &= "\'" & bh & "\',"
        End If
    End If
Next
DataTables("计划配缸通知单").loadfilter = "订单明细编号对外 in (" & idxs.trim(",") & ")"
DataTables("计划配缸通知单").load

 


--  作者:lk15502
--  发布时间:2017/1/13 15:45:00
--  
明白了,谢谢!