以文本方式查看主题

-  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=151121)

--  作者:BG小白
--  发布时间:2020/6/15 17:18:00
--  两个表对比,查找并删除没有的行
表B对比表A,对比3个列字段,如果没有删除表B的行
我是这样写的,但是没有效果
For Each dr As DataRow In DataTables("表A").datarows \'循环表的每一行
        DataTables("表B").DeleteFor("spdm<>\'" & dr("SPDM") & "\' and GG1DM<>\'" & dr("GG1DM") & "\' and MDDM<>\'" & dr("CKDM") & "\'")
Next

--  作者:有点蓝
--  发布时间:2020/6/15 17:27:00
--  
既然都没有了,也就是不存在,还删除什么?
--  作者:BG小白
--  发布时间:2020/6/15 17:47:00
--  
说错了,表B对比表A,对比3个列字段,如果表A没有对应的行,删除表B的行

例如表B里面有一行是01,01,01,查找表A有没有01,01,01的行,如果没有,删除表B这一行
[此贴子已经被作者于2020/6/15 17:49:26编辑过]

--  作者:BG小白
--  发布时间:2020/6/15 17:51:00
--  
感觉应该先写表A变量,然后用下面的代码
For Each dr As DataRow In DataTables("表B").datarows \'循环表的每一行
        DataTables("表B").DeleteFor("spdm<>\'" & 表A("SPDM") & "\' and GG1DM<>\'" & 表A("GG1DM") & "\' and MDDM<>\'" & 表A("CKDM") & "\'")
Next
[此贴子已经被作者于2020/6/15 17:55:03编辑过]

--  作者:BG小白
--  发布时间:2020/6/15 17:54:00
--  
但是我写变量表Dim r As DataTable = DataTables("表A")提示我错误
For Each dr As DataRow In DataTables("表B").datarows \'循环表的每一行
        DataTables("表B").DeleteFor("spdm<>\'" & 表A("SPDM") & "\' and GG1DM<>\'" & 表A("GG1DM") & "\' and MDDM<>\'" & 表A("CKDM") & "\'")
Next

红色字段错误
[此贴子已经被作者于2020/6/15 17:56:02编辑过]

--  作者:有点蓝
--  发布时间:2020/6/15 20:06:00
--  
DataTables("表B").sqlDeleteFor("spdm+GG1DM+MDDM not in (select SPDM+GG1DM+CKDM from {表A})")
--  作者:BG小白
--  发布时间:2020/6/15 20:30:00
--  
谢谢
[此贴子已经被作者于2020/6/15 20:31:34编辑过]

--  作者:BG小白
--  发布时间:2020/6/15 20:39:00
--  
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:
详细错误信息:
语法错误或违反访问规则


--  作者:BG小白
--  发布时间:2020/6/15 20:40:00
--  
提示错误!还得麻烦一下蓝老师
--  作者:有点蓝
--  发布时间:2020/6/15 21:02:00
--  
如果不是SqlServer,只能这样

Dim dr As DataRow
For i As Integer = DataTables("表B").DataRows.Count - 1 To 0 Step -1
    dr = DataTables("表B").DataRows(i)
    If DataTables("表A").Find("spdm=\'" & dr("SPDM") & "\' and GG1DM=\'" & dr("GG1DM") & "\' and CKDM=\'" & dr("MDDM") & "\'") Is Nothing Then
        dr.Delete
    End If
Next