Foxtable(狐表)用户栏目专家坐堂 → AB表同步


  共有2813人关注过本帖树形打印复制链接

主题:AB表同步

帅哥哟,离线,有人找我吗?
BG小白
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
AB表同步  发帖心情 Post By:2021/3/13 1:41:00 [只看该作者]

我现在是读取了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小白
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
  发帖心情 Post By:2021/3/13 2:03:00 [只看该作者]

还有就是根据相同的第一列,找出第二列或者第三列,第四列不同的出来,进行修改,该怎么写

 回到顶部
帅哥哟,离线,有人找我吗?
BG小白
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
  发帖心情 Post By: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小白
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109728 积分:558356 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/13 12:06:00 [只看该作者]

如果A表和B表都是同一个数据库的表,或者都是内部表,可以使用sql处理,比如

de
lete B表.* from B表,A表 where B表.第一列=A表.第一列 and B表.第二列 = A表.第二列

或者试试这样加载第一列相同,第二列不同的数据

select A表.* from B表 ininer join A表 where B表.第一列=A表.第一列 and B表.第二列 <> A表.第二列

 回到顶部
帅哥哟,离线,有人找我吗?
BG小白
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
  发帖心情 Post By:2021/3/13 13:39:00 [只看该作者]

蓝老师,A表是临时表,B表是外部数据表

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109728 积分:558356 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/13 14:40:00 [只看该作者]

那就只能是3楼那种用法了。执行的时候不要把A表数据删除

 回到顶部
帅哥哟,离线,有人找我吗?
BG小白
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
  发帖心情 Post By:2021/3/13 15:55:00 [只看该作者]

好的,谢谢,三楼的问题重新加载一次临时表就没有问题了

 回到顶部
帅哥哟,离线,有人找我吗?
BG小白
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
  发帖心情 Post By: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

为什么找不到这个表呢

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109728 积分:558356 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/13 17:33:00 [只看该作者]

只有foxtable里的用法加载的表才能使用DataTables("xxx")这种用法。第三方数据库加载的临时表无法这样用

 回到顶部
总数 15 1 2 下一页