以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]快速复制  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=108606)

--  作者:huhuyq
--  发布时间:2017/10/25 22:18:00
--  [求助]快速复制
各位老师,

如何能快速实现,A表中第一列符合某一条件则自动添加到B表第一列,但A表某行删除时B表相应列不删除,可建立关联。我认为是快速比较两个表。
遍历有点慢,谢谢!

Dim nt As List(Of String)

nt = DataTables("通讯录").GetValues("Chinese_Name")

Dim ny As List(Of String)

ny = DataTables("员工").GetValues("Chinese_Name","Mobilization_to_Kuwait_From_Boarding Is not Null And Company = \'项目部\'")

For Each n As String In ny

    If nt.Contains(n) = False Then

        Dim dr1 As DataRow

        dr1 = DataTables("员工").Find("Chinese_Name = \'" & n & "\' and Mobilization_to_Kuwait_From_Boarding Is not Null")

        If dr1 IsNot Nothing Then \'如果找到的话

            Dim dr2 As DataRow = DataTables("通讯录").AddNew

            dr2("Chinese_Name") = dr1("Chinese_Name")

            dr2("English_Name") = dr1("English_Name")

            dr2("Department") = dr1("Personnel_Classify_Department")

            dr2("Position") = dr1("Personnel_Classify_Position")

            dr2("Company") = dr1("Company")

        End If

    End If

Next

DataTables("通讯录").Save()


--  作者:有点甜
--  发布时间:2017/10/25 23:02:00
--  
你处理的数据较多?一般是save影响效率,你去掉这句看看 DataTables("通讯录").Save()
--  作者:有点甜
--  发布时间:2017/10/25 23:05:00
--  
你尝试把find去掉,直接循环员工表每一行,这样就不需要find某一行了。
--  作者:huhuyq
--  发布时间:2017/10/26 16:25:00
--  
因为我好多地方要用到类似的功能,A表和B表第一列值是一样的,查找出A表符合一定条件的行,然后两表第一列做比较,并把A表中存在的B表中没有的添加到B表。
我处理的数据将近50万行,这要作比较感觉效率太慢,不知道又没什么效率高点的办法?

--  作者:有点甜
--  发布时间:2017/10/26 16:47:00
--  

直接用sql语句处理,参考代码

 

insert into {表A} (第一列,第二列,第三列) Select b.第一列,b.第二列,b.第三列 from {表B} as b left join {表a} as a on b.第四列 = a.第四列 where a.第四列 is null


--  作者:huhuyq
--  发布时间:2017/10/26 19:20:00
--  
谢谢老师!还是SQL速度快啊。
老师foxtable的保存效率确实较慢,请什么命令可以替代啊?

--  作者:有点甜
--  发布时间:2017/10/26 19:38:00
--  

 参考

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=98689&replyID=680089&skin=1