以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  逻辑列,选中金额不为空的行,删除完全空行  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=115356)

--  作者:szsmall
--  发布时间:2018/3/5 20:32:00
--  逻辑列,选中金额不为空的行,删除完全空行
如题,工作中遇到一些表格,出现金额还是空,或者录入时留空。

怎样才能按一下按钮(窗口2):逻辑列,选中金额不为空的行,删除空行


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

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:逻辑列的查询_testing.table



[此贴子已经被作者于2018/3/5 20:43:23编辑过]

--  作者:wyz20130512
--  发布时间:2018/3/5 21:00:00
--  
For Each dr As DataRow In DataTables("表A").DataRows
    If dr.IsNull("金额") Then
        dr.Delete()
    Else
        dr("已付款") = True
    End If
Next

--  作者:有点蓝
--  发布时间:2018/3/5 21:05:00
--  
DataTables("表A").ReplaceFor("已付款",False)
DataTables("表A").ReplaceFor("已付款",True,"金额 is not null")
DataTables("表A").DeleteFor("已付款=false")

--  作者:wyz20130512
--  发布时间:2018/3/5 21:17:00
--  
3楼的执行效率比2楼要高。

With DataTables("表A")
    .DeleteFor("[金额] is null")
    .ReplaceFor("已付款",True,"")
End With

--  作者:wyz20130512
--  发布时间:2018/3/5 21:27:00
--  
若将2楼代码换为如下:

For Each r As Row In Tables("表A").Rows
    If r.IsNull("金额") Then
        r.Delete()
    Else
        r("已付款") = True
    End If
Next

则需运行多次(测试环境为商业版),方能达到预期的效果,不知何故?请高手指点?

--  作者:有点蓝
--  发布时间:2018/3/5 21:41:00
--  
For i as integer = Tables("表A").Rows.count - 1 to 0 step -1
--  作者:wyz20130512
--  发布时间:2018/3/5 22:40:00
--  
哦!倒序删行!时间久了,给忘了。

可2楼测试却一次性达到了预期的效果?这又是何故?
[此贴子已经被作者于2018/3/5 23:01:55编辑过]