以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- AB表同步 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=161320) |
-- 作者:BG小白 -- 发布时间:2021/3/13 1:41:00 -- AB表同步 我现在是读取了MYSQL的表,生成了一张临时A表,然后清空B表,把A表的每一行都新增进去 Dim mda As New MySql.Data.MySqlClient.MySQLDataAdapter("s elect distinct spdm,pic_name from ipos_sptpk" , conn) \'这里可以设置你的查询语句 Dim ds As New System.Data.DataSet() mda.Fill(ds, "TableTemp") \'MySQLDataAdapter方法把数据放到一个新建的临时表里,这个临时表名可自定义,我这里写TableTemp For Each r As System.Data.DataRow In ds.Tables(0).Rows Dim dr As DataRow = DataTables("SPTPB").AddNew() dr("spdm") = r("spdm") dr("pic_name") = r("pic_name") Next conn.close DataTables("SPTPB").Save() 但是这样好慢,能不能生成临时A表后,对比B表,SPDM字段相同的对比PIC_NAME的内容,有变化就修改成和A表一致,如果A表没有该行,那就删除B表里面的行,A表有B表没有,那就复制该行到B表 Dim dt2 As DataTable = DataTables("A表") Dim dr0 As DataRow For i As Integer = DataTables("B表").DataRows.Count - 1 To 0 Step -1 dr0 = DataTables("B表").DataRows(i) If DataTables("A表").Find("第一列=\'" & dr0("第一列") & "\' and 第二列=\'" & dr0("第二列") & "\'") Is Nothing Then ’这里是对比两个数据,我是想根据第一列相同,第二列不同的找出来 dr0.Delete ’这里现在是删除,如何变成修改第二列呢?因为对比的是第一列 Dim ndr As DataRow = dr0.AddNew \'这里我是想把对比A表,B表没有的,从A表复制到B表里面,但是代码无效 ndr("第一列") = dr0("第一列") ndr("第二列") = dr0("第二列") End If Next [此贴子已经被作者于2021/3/13 1:42:36编辑过]
|
-- 作者:BG小白 -- 发布时间:2021/3/13 2:03:00 -- 还有就是根据相同的第一列,找出第二列或者第三列,第四列不同的出来,进行修改,该怎么写 |
-- 作者:BG小白 -- 发布时间:2021/3/13 2:56:00 -- 我想了一个笨办法 Dim dr0 As DataRow For i As Integer = DataTables("B表").DataRows.Count - 1 To 0 Step -1 dr0 = DataTables("B表").DataRows(i) If DataTables("A表").Find("第一列=\'" & dr0("第一列") & "\' and 第二列=\'" & dr0("第二列") & "\'") Is Nothing Then dr0.Delete End If Next Dim dr9 As DataRow For i As Integer = DataTables("A表").DataRows.Count - 1 To 0 Step -1 dr9 = DataTables("A表").DataRows(i) If DataTables("B表").Find("第一列=\'" & dr9("第一列") & "\' and 第二列=\'" & dr9("第二列") & "\'") IsNot Nothing Then dr9.Delete End If Next Dim Cols1() As String = {"第一列","第二列"} Dim Cols2() As String = {"第一列","第二列"} For Each dr1 As DataRow In DataTables("A表").Select("") Dim dr2 As DataRow = DataTables("B表").AddNew() For i As Integer = 0 To Cols1.Length -1 dr2(Cols2(i)) = dr1(Cols1(i)) Next Next 但是只能执行一次,执行第二次的话,B表只会留下A表新增过来的行 [此贴子已经被作者于2021/3/13 2:56:55编辑过]
|
-- 作者:BG小白 -- 发布时间:2021/3/13 3:00:00 -- Dim dr0 As DataRow For i As Integer = DataTables("B表").DataRows.Count - 1 To 0 Step -1 dr0 = DataTables("B表").DataRows(i) If DataTables("A表").Find("第一列=\'" & dr0("第一列") & "\' and 第二列=\'" & dr0("第二列") & "\'") Is Nothing Then dr0.Delete Else Return 这里加进去会报错,提示加入返回值 End If Next
|
-- 作者:有点蓝 -- 发布时间:2021/3/13 12:06:00 -- 如果A表和B表都是同一个数据库的表,或者都是内部表,可以使用sql处理,比如 delete B表.* from B表,A表 where B表.第一列=A表.第一列 and B表.第二列 = A表.第二列 或者试试这样加载第一列相同,第二列不同的数据 select A表.* from B表 ininer join A表 where B表.第一列=A表.第一列 and B表.第二列 <> A表.第二列
|
-- 作者:BG小白 -- 发布时间:2021/3/13 13:39:00 -- 蓝老师,A表是临时表,B表是外部数据表 |
-- 作者:有点蓝 -- 发布时间:2021/3/13 14:40:00 -- 那就只能是3楼那种用法了。执行的时候不要把A表数据删除 |
-- 作者:BG小白 -- 发布时间:2021/3/13 15:55:00 -- 好的,谢谢,三楼的问题重新加载一次临时表就没有问题了 |
-- 作者:BG小白 -- 发布时间:2021/3/13 17:17:00 -- Dim conn As MySql.Data.MySqlClient.MySqlConnection Dim cmd As MySql.Data.MySqlClient.MySqlCommand Dim connStr As String = "server=127.0.0.1; port=3306; user id=root; password=mima; database=ipos;CharSet=utf8" \'设置你的数据库连接字符串 conn = New MySql.Data.MySqlClient.MySqlConnection(connStr) conn.Open Dim mda As New MySql.Data.MySqlClient.MySQLDataAdapter("se lect distinct spdm,pic_name from ipos_sptpk" , conn) \'这里可以设置你的查询语句 Dim ds As New System.Data.DataSet() mda.Fill(ds, "TableTemp") \'MySQLDataAdapter方法把数据放到一个新建的临时表里,这个临时表名可自定义,我这里写TableTemp Dim dr0 As DataRow For i As Integer = DataTables("SPTPB").DataRows.Count - 1 To 0 Step -1 dr0 = DataTables("SPTPB").DataRows(i) If DataTables("TableTemp").Find("SPDM=\'" & dr0("SPDM") & "\' and pic_name=\'" & dr0("pic_name") & "\'") Is Nothing Then dr0.Delete End If Next Dim dr9 As DataRow For i As Integer = DataTables("TableTemp").DataRows.Count - 1 To 0 Step -1 dr9 = DataTables("TableTemp").DataRows(i) If DataTables("SPTPB").Find("SPDM=\'" & dr9("SPDM") & "\' and pic_name=\'" & dr9("pic_name") & "\'") IsNot Nothing Then dr9.Delete End If Next Dim Cols1() As String = {"SPDM","pic_name"} Dim Cols2() As String = {"SPDM","pic_name"} For Each dr1 As DataRow In DataTables("TableTemp").Select("") Dim dr2 As DataRow = DataTables("SPTPB").AddNew() For i As Integer = 0 To Cols1.Length -1 dr2(Cols2(i)) = dr1(Cols1(i)) Next Next conn.close DataTables("SPTPB").Save() End If 为什么找不到这个表呢 |
-- 作者:有点蓝 -- 发布时间:2021/3/13 17:33:00 -- 只有foxtable里的用法加载的表才能使用DataTables("xxx")这种用法。第三方数据库加载的临时表无法这样用 |