Foxtable(狐表)用户栏目专家坐堂 → Syscmd.Filter.HideSameValues()对窗口中的副本表无效?


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

主题:Syscmd.Filter.HideSameValues()对窗口中的副本表无效?

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/21 10:08:00 [显示全部帖子]

 几种方法。

 方法一,遍历所有的行,比较取出所有不重复的_Identify,然后设置filter

 方法二,用datatable.getxxxvalue()取出不重复的值,然后设置filter

 方法三,直接用sql语句查找不重复的_Identify,然后设置filter;或者直接使用sql加载不重复的行。

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/24 13:30:00 [显示全部帖子]

做一下,方法2,方法一应该是最好的。

Tables("订单").Filter = "单价 < 10"   '模拟筛选

'开始,产品和客户不重复的行
Dim idxs As String
For Each ary As String() In DataTables("订单").GetUniqueValues(Tables("订单").Filter, "产品", "客户")
    Dim fdr As DataRow = DataTables("订单").Find("产品 = '" & ary(0) & "' And 客户 = '" & ary(1) & "' And (" & Tables("订单").Filter & ")")
    idxs &= fdr("_Identify") & ","
Next

Tables("订单").Filter = "_Identify in (" & idxs.Trim(",") & ")"

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/24 13:38:00 [显示全部帖子]

 方法一。

Tables("订单").Filter = "单价 < 10"   '模拟筛选

'开始,产品和客户不重复的行
Dim idxs As String = ""
Dim prev_cp As String = ""
Dim prev_kh As String = ""
For Each dr As DataRow In DataTables("订单").Select(Tables("订单").Filter, "产品,客户")
    If prev_cp <> dr("产品") OrElse prev_kh <> dr("客户") Then
        idxs &= dr("_Identify") & ","
        prev_cp = dr("产品")
        prev_kh = dr("客户")
    End If
Next

Tables("订单").Filter = "_Identify in (" & idxs.Trim(",") & ")"

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/24 14:56:00 [显示全部帖子]

以下是引用blackzhu在2013-1-24 14:08:00的发言:
With Tables(e.Form.Name & "_Table2")
    .Select(.RowSel, .Cols("第一列").Index)
    Syscmd.Filter.HideSameValues()
End With


测试没有问题.


嗯嗯,确实是测试正常。

With Tables(e.Form.Name & "_Table1")
    .Select(.RowSel, .ColSel)
    Syscmd.Filter.HideSameValues()
End With




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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/25 18:11:00 [显示全部帖子]

以下是引用关键下一秒在2013-1-25 17:35:00的发言:

你们是怎样测试的呢,我怎么测试就是有问题啊,能不能做不例子看看?我是放在窗口中的AfterLoad事件里的


我们用的是按钮测试的。

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/26 9:19:00 [显示全部帖子]

以下是引用关键下一秒在2013-1-26 8:33:00的发言:
 林总,请问idxs到底能承载多少个_Identify数据呢?数据太多会不会当掉?


数据量太大的话,会挂掉的,或者说,要相应的速度很慢。但是,你要筛选去除重复的话,只能通过这种方法了。

除非你在后台处理,用sql语句加载入符合你要求的那些行,用这种方法来模拟筛选。这样会快很多的。

又或者,这样写代码

Tables("订单").Filter = "单价 < 10"   '模拟筛选

'开始,产品和客户不重复的行
Dim idxs As String = ""
Dim prev_cp As String = ""
Dim prev_kh As String = ""
For Each dr As DataRow In DataTables("订单").Select(Tables("订单").Filter, "产品,客户")
    If prev_cp <> dr("产品") OrElse prev_kh <> dr("客户") Then
        idxs &= dr("_Identify") & ","
        prev_cp = dr("产品")
        prev_kh = dr("客户")
    Else
        dr.Remove()
    End If
Next

'Tables("订单").Filter = "_Identify in (" & idxs.Trim(",") & ")"

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/26 10:38:00 [显示全部帖子]

 用另一个表把你要的数据fill进去吧,这个是最快的了,不要在原来的数据上筛选,这个很慢。

 你做个例子出来。

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/26 10:41:00 [显示全部帖子]

 得到不重复的值SQL语句

select * from {订单} where [_Identify] in (SELECT MAX([_Identify]) AS id FROM {订单} GROUP BY 产品)

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/28 11:51:00 [显示全部帖子]

以下是引用关键下一秒在2013-1-28 11:47:00的发言:

如果使用这个产生的表,再用 datatable.load 代码,就会出错(Group不正确)。用messagebox(loadfilter)显示没有" Group By 产品 "


这个时候就不能用load了,用fill吧,load不支持这样的子查询的。

 回到顶部