Foxtable(狐表)用户栏目专家坐堂 → [求助]两个数据库表的数据同步速度慢


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

主题:[求助]两个数据库表的数据同步速度慢

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


加好友 发短信
等级:六尾狐 帖子:1316 积分:9484 威望:0 精华:1 注册:2010/7/21 14:20:00
[求助]两个数据库表的数据同步速度慢  发帖心情 Post By:2017/9/26 14:05:00 [只看该作者]

两个数据库做个别表的数据同步
采用如下代码:

Systemready = False
Tables("dsj_C_EI_SECUCHECK").StopRedraw  ‘ 目标表
Tables("C_EI_SECUCHECK").StopRedraw         ‘源表

For Each dr As DataRow In DataTables("C_EI_SECUCHECK").Select("")
   
    Dim fdt As DataRow = DataTables("dsj_C_EI_SECUCHECK").Find("EI_CHECK_ID = '" &  dr("EI_CHECK_ID") & "'  ")
    Dim dri As DataRow
    If fdt IsNot Nothing Then
        dri = DataTables("dsj_C_EI_SECUCHECK").Find("EI_CHECK_ID = '" &  dr("EI_CHECK_ID") & "'  ")
    Else
        dri = DataTables("dsj_C_EI_SECUCHECK").AddNew()
    End If

    Dim fdr As DataRow = DataTables("dsj_C_EI_SECUCHECK").Find("EI_CHECK_ID = '" &  dr("EI_CHECK_ID") & "'  ")
   If fdr IsNot Nothing Then
       For Each dc As DataCol In DataTables("C_EI_SECUCHECK").datacols
        dri(dc.name) = fdr(dc.name)
      Next
   end if
    
    dri.save
Next

Tables("dsj_C_EI_SECUCHECK").ResumeRedraw
Tables("C_EI_SECUCHECK").ResumeRedraw
Systemready = True

发现速度比较慢,几乎是2秒一条,有没有快速点的方法?


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/26 14:53:00 [只看该作者]

查询和赋值一起了,分开来。

 

http://www.foxtable.com/webhelp/scr/2225.htm

 


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


加好友 发短信
等级:六尾狐 帖子:1316 积分:9484 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2017/9/26 16:17:00 [只看该作者]

       For Each dc As DataCol In DataTables("C_EI_SECUCHECK").datacols
        dri(dc.name) = fdr(dc.name)
      Next

这段赋值也比较耗时

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/26 18:16:00 [只看该作者]

以下是引用浙江仔在2017/9/26 16:17:00的发言:
       For Each dc As DataCol In DataTables("C_EI_SECUCHECK").datacols
        dri(dc.name) = fdr(dc.name)
      Next

这段赋值也比较耗时

 

那应该是你表格的datacolchanged事件影响了吧?

 

http://www.foxtable.com/webhelp/scr/2218.htm

 


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


加好友 发短信
等级:六尾狐 帖子:1316 积分:9484 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2017/9/27 17:03:00 [只看该作者]

这个代码在帮我指导一下,数据新增速度还是比较慢

Dim lst1 As New List(of DataRow)  '无记录
Dim lst2 As New List(of DataRow)  '有记录

If str="" Then
    str="is_active ='1' "
Else
    str ="is_active ='1' and [update_time] Like  '" & str & "%' "
End If

If tbn="C_EI_ENTERPRISEINFO" Then
    str=str & " and ent_manage_state_code<> 'E0804'   and is_up_scale<'E4104'   and enterprise_name Not Like '%删%'  and enterprise_name Not Like '%测试%'  and industry_type_code <>'E0411'  "
End If

Dim p As WinForm.ProgressBar
Dim i1 As Integer=0

For Each dr As DataRow In DataTables(tbn).SQLSelect(str)
    If DataTables( "dsj_" & tbn).Find( key & " = '" &  dr(key) & "'  ")  Is Nothing Then  '无记录
        lst1.Add(dr)
    Else                          '有记录
        lst2.Add(dr)
    End If
Next



'新增记录
Dim dri As DataRow
For Each dr As DataRow In lst1
    dri = DataTables("dsj_" & tbn).AddNew()
    For Each dc As DataCol In DataTables(tbn).datacols
        dri(dc.name) = dr(dc.name)
    Next
    dri.save
Next


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


加好友 发短信
等级:超级版主 帖子:106063 积分:539408 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/9/27 17:25:00 [只看该作者]

Dim dri As DataRow
For Each dr As DataRow In lst1
    dri = DataTables("dsj_" & tbn).AddNew()
    For Each dc As DataCol In DataTables(tbn).datacols
        dri(dc.name) = dr(dc.name)
    Next
Next
DataTables("dsj_" & tbn).save

 回到顶部