以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  条件删除  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=25681)

--  作者:wilson
--  发布时间:2012/11/14 13:01:00
--  条件删除

表A与表B 都有 单号 编号  名称 的列

表A里存在的行,如果表B都存在,那么删除表B等于表A的行. 

表A里存在的行,如果表B有一行不存在,那么返回并提示不能删除.

 

For Each r2 As DataRow In DataTables("表a").DataRows

     For Each dr2 As DataRow In DataTables("表b").Select("单号 = \'" & r2("单号") & "\' And 编号 = \'" & r2("编号") & "\' And 名称 = \'" & r2("名称") & "\'")
        If dr2 IsNot Nothing Then
             dr2.Delete 
        Else
             MessageBox.Show("不能删除!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
             Return \'那么返回
        End If
    Next
Next

 

调试N次都不行,求助

谢谢!


--  作者:小猪鑫鑫
--  发布时间:2012/11/14 13:50:00
--  

楼主:我测试了一下,好像是说Return 有问题,可改为exit for,这样运行正常;

另:我设的这三列都是字段列,你看看是不是,如有数字列的话,合成变量还需要改一下


--  作者:czy
--  发布时间:2012/11/14 14:16:00
--  

全部存在才执行删除,如果有一行不存在就不执行删除,好怪的要求。

可以考虑增加辅助列来解决。


--  作者:wilson
--  发布时间:2012/11/14 14:26:00
--  
非常感谢!
--  作者:wilson
--  发布时间:2012/11/14 14:27:00
--  
非常感谢!
--  作者:czy
--  发布时间:2012/11/14 14:32:00
--  

这样试试

 

DataTables("表A").DataCols.Add("标记", Gettype(Boolean))
DataTables("表B").DataCols.Add("标记", Gettype(Boolean))
For Each dr As DataRow In DataTables("表A").DataRows
    For Each dr2 As DataRow In DataTables("表B").Select("单号 = \'" & dr("单号") & "\' And 编号 = \'" & dr("编号") & "\' And 名称 = \'" & dr("名称") & "\'")
        If dr2 IsNot Nothing Then
            dr2("标记") = True
            dr("标记") = True
        End If
    Next
Next
If DataTables("表A").Compute("count(标记)","标记 <> true") = 0
    DataTables("表B").DeleteFor("标记 = true")
Else
    MessageBox.Show("不能删除!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
End If
DataTables("表A").DataCols.Delete("标记")
DataTables("表B").DataCols.Delete("标记")


--  作者:wilson
--  发布时间:2012/11/14 15:39:00
--  

非常感谢您对我的帮助!


--  作者:wilson
--  发布时间:2012/11/14 16:03:00
--  

问题已经解决!

谢谢!