Foxtable(狐表)用户栏目专家坐堂 → 醉了,5000条数据处理20分钟


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

主题:醉了,5000条数据处理20分钟

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


加好友 发短信
等级:小狐 帖子:350 积分:3412 威望:0 精华:0 注册:2015/5/12 15:33:00
醉了,5000条数据处理20分钟  发帖心情 Post By:2016/7/16 22:10:00 [只看该作者]

Select Case e.DataCol.name
    Case "身份证号","户主姓名","粮食直补面积","粮食直补标准","粮食直补金额","农资补贴面积","农资补贴标准","农资补贴金额"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("身份证号") Then
        Else
            Dim filter As String
            filter = "身份证号 = '" & dr("身份证号") & "'"
            pr = DataTables("员工资料").Find(filter)
            If pr IsNot Nothing Then
                pr("姓名") = dr("户主姓名")
                pr("户主关系") = "户主"
            End If
        End If
End Select

 

从当前表复制“姓名”和“户主关系”到“员工资料表”,当前表5000多行,“员工资料”表80000多行,处理要20分钟,肯定是方法问题,求大神指点。


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


加好友 发短信
等级:三尾狐 帖子:780 积分:5756 威望:0 精华:0 注册:2012/10/21 7:57:00
  发帖心情 Post By:2016/7/17 6:03:00 [只看该作者]


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


加好友 发短信
等级:小狐 帖子:350 积分:3412 威望:0 精华:0 注册:2015/5/12 15:33:00
  发帖心情 Post By:2016/7/17 7:32:00 [只看该作者]

不知道跨表有没有影响?正在试验中

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2016/7/17 9:02:00 [只看该作者]

一次性处理5000行,用表事件当然慢,你还不如用按钮处理.

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


加好友 发短信 F6
等级:狐精 帖子:3036 积分:19223 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2016/7/17 10:53:00 [只看该作者]

Select Case e.DataCol.name
    Case "身份证号","户主姓名"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("身份证号") Then
        Else
            Dim filter As String
            filter = "身份证号 = '" & dr("身份证号") & "'"
            pr = DataTables("员工资料").Find(filter)
            If pr IsNot Nothing Then
                pr("姓名") = dr("户主姓名")
                pr("户主关系") = "户主"
            End If
        End If
End Select

删减无关的字段,再测试一下


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


加好友 发短信
等级:二尾狐 帖子:574 积分:4252 威望:0 精华:0 注册:2015/5/13 8:32:00
  发帖心情 Post By:2016/7/17 11:02:00 [只看该作者]

 用字典做 键值对,瞬间完成!

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


加好友 发短信
等级:小狐 帖子:350 积分:3412 威望:0 精华:0 注册:2015/5/12 15:33:00
  发帖心情 Post By:2016/7/17 13:18:00 [只看该作者]

@cbt: 能不能麻烦老兄告知一下数据字典应该如何操作?

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


加好友 发短信
等级:二尾狐 帖子:574 积分:4252 威望:0 精华:0 注册:2015/5/13 8:32:00
  发帖心情 Post By:2016/7/17 17:37:00 [只看该作者]

DataTables("表A").DataRows.Clear
DataTables("表A").StopRedraw()
For i As Integer = 0 To 5000
    Dim dr As DataRow = DataTables("表A").AddNew
    dr("第一列")= "aa" & i
    dr("第二列")= "bb1" & i
Next
DataTables("表A").ResumeRedraw()

DataTables("表B").DataRows.Clear
DataTables("表B").StopRedraw()
For i As Integer = 0 To 80000
    Dim dr As DataRow = DataTables("表B").AddNew
    dr("第一列")= "aa" & i
    dr("第二列")= "bb1" & i
Next
DataTables("表B").ResumeRedraw()
MessageBox.show("模拟数据完成")

Dim zd1 As new Dictionary(of String,DataRow)
Dim zd2 As new Dictionary(of String,DataRow)
For Each  dr As DataRow In DataTables("表A").DataRows
    zd1.Add(dr("第一列"),dr)
Next
For Each  dr As DataRow In DataTables("表B").DataRows
    zd2.Add(dr("第一列"),dr)
Next

For Each str As String In zd1.Keys
    If zd2.ContainsKey(str) Then
        zd2(str)("第三列")= zd1(str)("第二列") '赋值
    End If
Next

MessageBox.show("数据复制完成")

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


加好友 发短信
等级:小狐 帖子:350 积分:3412 威望:0 精华:0 注册:2015/5/12 15:33:00
  发帖心情 Post By:2016/7/18 11:10:00 [只看该作者]

高手如云,学习了,谢谢

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/19 1:13:00 [只看该作者]

Case "身份证号","户主姓名","粮食直补面积","粮食直补标准","粮食直补金额","农资补贴面积","农资补贴标准","农资补贴金额"

 

改成

 

Case "身份证号"

 

而且,你要确保,你datacolchanged事件没有其他代码会影响。


 回到顶部