Foxtable(狐表)用户栏目专家坐堂 → 数据查询


  共有1754人关注过本帖树形打印复制链接

主题:数据查询

帅哥哟,离线,有人找我吗?
lk15502
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:706 积分:4908 威望:0 精华:0 注册:2016/5/17 12:03:00
数据查询  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:706 积分:4908 威望:0 精华:0 注册:2016/5/17 12:03:00
  发帖心情 Post By:2017/1/13 11:34:00 [只看该作者]

老师,找到原因了,
Dim tpzl As Double = 0
Dim jhzl As Double = 0

 回到顶部
帅哥哟,离线,有人找我吗?
lk15502
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:706 积分:4908 威望:0 精华:0 注册:2016/5/17 12:03:00
  发帖心情 Post By:2017/1/13 11:57:00 [只看该作者]

Dim idxs As String = "-1,"为什么等于-1;并且还要加上逗号

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:706 积分:4908 威望:0 精华:0 注册:2016/5/17 12:03:00
  发帖心情 Post By:2017/1/13 15:45:00 [只看该作者]

明白了,谢谢!

 回到顶部