以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]重复值筛选出错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=128782)

--  作者:明天的灵
--  发布时间:2018/12/14 21:07:00
--  [求助]重复值筛选出错
对每日工作表的数据检查是否有重复的行(同一种操作台,出现一样的开始数或结束数)
用以下代码时,发现开始数为0时,即报重复值,其实表中开始数为0的行只有24#机与30#机各一行,不是重复值

Dim st1 As String
Dim st2 As String
Tables(e.Form.Name + "_table1").DataSource = DataTables("每日工作量")
Tables(e.Form.Name + "_table1").StopRedraw
For Each r As Row In Tables("操作台").rows
    Tables(e.Form.Name + "_table1").Filter = "[操作台] = \'" & r("操作台号") & "\'"
    Tables(e.Form.Name + "_table1").RepeatFilter("开始数",0)  \' 筛选方式,0表示显示重复值,1表示排除重复值,2表示显示冗余值,3表示显示唯一值
    
    If Tables(e.Form.Name + "_table1").Rows.Count >0 Then
        Tables(e.Form.Name + "_table1").ResumeRedraw
        MessageBox.Show(r("操作台号") + "的开始数据有重复")
        st1 + = r("操作台号") + "/"
        
    End If
    Tables(e.Form.Name + "_table1").RepeatFilter("结束数",0)
    If Tables(e.Form.Name + "_table1").Rows.Count >0 Then
        Tables(e.Form.Name + "_table1").ResumeRedraw
        MessageBox.Show(r("操作台号") + "的结束数据有重复")
        st2 + = r("操作台号") + "/"
        
    End If
Next
MessageBox.Show(st1 + "的开始数据有重复")
MessageBox.Show(st2 + "的结束数据有重复")
Tables(e.Form.Name + "_table1").ResumeRedraw
Tables(e.Form.Name + "_table1").Filter = ""

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:重复值筛选.table




--  作者:有点蓝
--  发布时间:2018/12/14 21:14:00
--  
多列重复判断使用RepeatFilter是做不到的。


--  作者:明天的灵
--  发布时间:2018/12/14 21:43:00
--  
蓝版主,是不是说,.RepeatFilter对于已筛选的条件不起作用,是对整个DataTables进行筛选检查?
我的第一个循环已只选一种操作台了,后面的条件只针对一个条件,开始数或结束数
[此贴子已经被作者于2018/12/14 21:50:22编辑过]

--  作者:有点蓝
--  发布时间:2018/12/14 21:58:00
--  
做不了的
--  作者:明天的灵
--  发布时间:2018/12/14 22:24:00
--  
做过测试的,只要不是0,不同操作台即使有重复的开始数或结束数,也不会报错。
只有为0,才显示重复,即使是不同的操作台。

--  作者:明天的灵
--  发布时间:2018/12/15 9:49:00
--  
我发现是狐表计算重复值有个BUG,当表中数据只有一行时,该行会显示重复值。虽然这个错误可以通过代码来排除,但是最好还是修改下狐表本身代码,排除只有一行的重复值显示。

请蓝版主验证下

--  作者:y2287958
--  发布时间:2018/12/15 9:57:00
--  
再测试一下,是没反应。
还有,1楼的问题可以通过生成一个表达式列解决的
[此贴子已经被作者于2018/12/15 10:03:22编辑过]

--  作者:明天的灵
--  发布时间:2018/12/15 10:02:00
--  
可以增加一个操作台号,如31#机,再在每日工作量表中增加一行31#机的开始数与结束数,再执行,一样显示这一行是重复值,其实整个表31#机只有这一行。
--  作者:明天的灵
--  发布时间:2018/12/15 10:04:00
--  
能稍讲这个表达式列的思路吗?
--  作者:明天的灵
--  发布时间:2018/12/15 10:14:00
--  
我感得先按条件筛选,再求得重复值(除了只有一行数据),是没有问题。
可以看下以下二行简单的代码:

图片点击可在新窗口打开查看此主题相关图片如下:11.jpg
图片点击可在新窗口打开查看

Tables("表C").Filter = "第二列 = \'3\'"
Tables("表C").RepeatFilter("第一列",0)

\'Tables("表C").Filter = ""
输出为:

图片点击可在新窗口打开查看此主题相关图片如下:22.jpg
图片点击可在新窗口打开查看


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:重复值筛选2.table

[此贴子已经被作者于2018/12/15 10:15:10编辑过]