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


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

主题: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

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


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

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

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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
BG小白
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

为什么找不到这个表呢

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


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
  发帖心情 Post By:2021/3/13 17:45:00 [显示全部帖子]

那我该怎么写呢?

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


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
  发帖心情 Post By:2021/3/13 17:47:00 [显示全部帖子]

只能清空再写入了吗?


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


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
  发帖心情 Post By:2021/3/15 12:45:00 [显示全部帖子]

如果是绑定到窗口表,我这个表有2万行,运行的速度是不是和清空差不多?而且这个我是设置了定时计划,是不是不能用窗口表了

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