以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]狐爸、大神,小弟在此谢过!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=40331)

--  作者:qixianyi
--  发布时间:2013/9/15 20:21:00
--  [求助]狐爸、大神,小弟在此谢过!

狐表之所以为狐表,在于功能强大,上手容易。小弟在万般摸索与探寻中终于黔驴技穷,

故在此请教狐爸及各位大神,望狐爸及各位大神指点迷津,多多提拔,小弟在此不胜感激,深表涕零```

目前正在做个数据效验程序。把EXCEL药品资料表导入狐表后做一些判断,判断是否符合要求,

比如:

需要找出下面不符合规范的数据:

1、药品名称相同,编号不相同的记录(要求名称相同,编号必须相同)

2、药品名称相同,规格序号相同的记录(要求名称相同,规格序号必须不相同,按1、2、3…编规格序号)

等等。

试验1:完美判断之表达式

     以前用EXCEL整理可以用表达式判断,如:=IF(E2=E3,D2=D3),一列拉下来后错误的便显示FALSE,正确的显示TURE,

狐表貌似没有单元格的概念,表达式也不能这样弄,因此只要作罢,需求它法。

试验2:深奥语句之SQL

      用SQL语句查询,把表导入到SQL后,一条语句便可以查询出错误记录,如:上面列出的要求1一条语句便能解决

select 编号,count(distinct 名称) num from 药品信息表 group by 编号 having count(distinct 名称)>1

按规范修改[表名]后用执行SQL查询内部数据源提示语法错误,问大神后得知内部数据源ACCSEE无法支持 count(distinct 名称)

建议换外部数据源,百度后得知可用select count(*) from (select distinct 名称 from {药品信息表})替代count(distinct 名称)

研究半天没有写出如此深奥之SQL语句,无果而终

试验3:退而求其次之筛选

      通过高级筛选-显示重复值后只能显示重复名称,仍旧无法判断- -

 

此问题不解,令弟夜不能寐,饭不能吃,终日思索,惶恐不安。

愿各位大神以博学之才华,精艺之狐表为小弟指出明路!

 

最好是能根据上面要求自动生成编号和规格序号。


--  作者:程兴刚
--  发布时间:2013/9/15 20:44:00
--  
明天提拔您当论坛总版主,但是您要养成提问附加实例文件的习惯,解决起来顺手一些,否则,您的问题会被一拖再拖。
--  作者:有点甜
--  发布时间:2013/9/15 20:58:00
--  
 看了楼主的问题,都是小问题。

问题1:使用筛选就行了,选中列,可以筛选出重复/冗余的行,你的问题使用两次筛选就行了。

问题2:同样,先选中名称列,筛选重复的记录,然后选中规格序号列,筛选重复的记录。

--  作者:程兴刚
--  发布时间:2013/9/15 21:14:00
--  
给个文件,有更简单的处理办法,一次性到位!
--  作者:qixianyi
--  发布时间:2013/9/15 22:51:00
--  

程大版,小弟初入江湖,不懂套路,深感抱歉,这就双手奉上!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:数据效验.table


--  作者:有点甜
--  发布时间:2013/9/15 23:16:00
--  
第一个的筛选,在命令窗口里执行下面的代码

Dim t As Table = Tables("药品信息表")
t.Filter = ""
t.Select(0, 4)
Syscmd.Filter.ShowSameValues()
Dim idxs As String
For Each r As Row In t.Rows
    Dim count As Integer = t.Compute("count(_Identify)", "名称 = \'" & r("名称") & "\' and 编号 = \'" & r("编号") & "\'")
    If count > 1 Then \'不算是编号不同
        idxs += r("_Identify") & ","
    End If
Next

t.Filter = t.Filter & " and _Identify not in (" & idxs.Trim(",") & ")"

--  作者:有点甜
--  发布时间:2013/9/15 23:17:00
--  
 第二个自己参考来做一下吧。
--  作者:程兴刚
--  发布时间:2013/9/16 0:05:00
--  
楼主,您是需要重新编号,还是需要在已有的编号中调整编号:同一名称多个编号时取第一个吗?还是取最小编号?
--  作者:程兴刚
--  发布时间:2013/9/16 0:35:00
--  

一键统一所有规格序号和编号(编号按同名称最小编号)

 

Dim mc As String = DataTables("药品信息表").GetComboListString("名称")
Dim dr As DataRow
Dim bh,gg As String
Dim Values() As String
Values = mc.split("|")
For Index As Integer = 0 To Values.Length - 1
    dr = DataTables("药品信息表").Find("名称 = \'" & Values(Index) & "\'","编号",0) \'以找到的最小编号为准。

    bh = dr("编号")
    DataTables("药品信息表").ReplaceFor("编号",bh, "[名称] = \'" & Values(Index) & "\'")
    gg = DataTables("药品信息表").GetComboListString("规格","[名称] = \'" & Values(Index) & "\'")
    Dim Value2s() As String
    Value2s = gg.split("|")
    For i As Integer = 0 To Value2s.Length - 1
        DataTables("药品信息表").ReplaceFor("规格序号",i+1,"[名称] = \'" & Values(Index) & "\' and 规格 = \'" & Value2s(i) & "\'")
    Next
Next

 

楼主:您的名称有这样的:【0.9%氯化钠注射液】和【0.9%氯化纳注射】之类的错误问题需要您自己手工解决,类似的错误是录入时导致的。

[此贴子已经被作者于2013-9-16 0:58:43编辑过]

--  作者:程兴刚
--  发布时间:2013/9/16 0:37:00
--  

这是楼上方法解决的文件:

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