Foxtable(狐表)用户栏目专家坐堂 → [求助] 优化代码


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

主题:[求助] 优化代码

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


加好友 发短信
等级:童狐 帖子:286 积分:2345 威望:0 精华:0 注册:2013/8/30 3:37:00
[求助] 优化代码  发帖心情 Post By:2015/4/2 9:37:00 [只看该作者]

每天汇总数据,但是到月底的时候数据多了以后,系统就有点慢了,请问如何可以优化一下代码?  还有以下代码不能实现多个文件合并,代码看看是不是错了?
代码如下:

Dim pr As Integer = DataTables("加硫").DataRows.Count     '查询表行数
Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "excel文件|*.xls" '设置筛选器
dlg.MultiSelect = True   '允许选择多个文件
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim mg As New Merger
    For Each fl As String In dlg.FileNames
        mg.SourcePath =dlg.FileName '指定数据文件
        mg.Format = "excel" '指定格式
        mg.SourceTableName = "data$" '指定要合并的表
        mg.DataTableName = "加硫" '指定接收数据的表
        mg.Merge() '开始合并
    Next


Dim i As Integer
For i  = DataTables("加硫").DataRows.Count-1 To 0 Step -1
    Dim dr As DataRow = DataTables("加硫").DataRows(i)
    Dim dr2 As DataRow = DataTables("加硫").Find("管理号码='" & dr("管理号码") & "' and 良品='" & dr("良品") & "'and 管理号码1='" & dr("管理号码1") & "'and 工号='" & dr("工号") & "'  and _Identify <> " & dr("_Identify"))
    If dr2 IsNot Nothing Then
        dr2.Delete
    End If
Next  '去重复值

DataTables("加硫").DeleteFor("[管理号码] is null or [良品] is null")  '删除空白行

pr = DataTables("加硫").DataRows.Count - pr '查询表行数


MessageBox.Show("成功导入数据"& pr &"条","提示")

Syscmd.Table.ToggleSortAndFilter()
DataTables("加硫").Save()
End If

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/2 10:21:00 [只看该作者]

合并文件,可以把文件名写为同一个即可

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


加好友 发短信
等级:童狐 帖子:286 积分:2345 威望:0 精华:0 注册:2013/8/30 3:37:00
  发帖心情 Post By:2015/4/2 10:24:00 [只看该作者]

怎么理解这句话,是把要导入的文件名写成一样吗?

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/2 10:25:00 [只看该作者]

我好像搞错了你的意思,你的意思是什么?

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


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

1、数据多,你这样删除重复值,肯定会慢;

 

2、不能实现多个文件

 

mg.SourcePath =dlg.FileName '指定数据文件

 

改成

 

mg.SourcePath = fl '指定数据文件


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


加好友 发短信
等级:童狐 帖子:286 积分:2345 威望:0 精华:0 注册:2013/8/30 3:37:00
  发帖心情 Post By:2015/4/2 10:36:00 [只看该作者]

谢谢你回复!
1.希望可以合并多个EXCEl文件,但是我现在的代码不可以。
2.现在的代码,数据多了以后,系统变得很慢,因为要逐行匹配重复的数据。希望可以优化一下代码

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


加好友 发短信
等级:童狐 帖子:286 积分:2345 威望:0 精华:0 注册:2013/8/30 3:37:00
  发帖心情 Post By:2015/4/2 10:40:00 [只看该作者]

1、数据多,你这样删除重复值,肯定会慢; 难道这个就没有其它办法吗?


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


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

试试用下面的方法。

 

Dim str As String = "第一列,第二列"
Dim idx As String = ""
Dim ary() As String = str.Split(",")
Dim pdr As DataRow = Nothing
Dim count As Integer = 0
For Each dr As DataRow In DataTables("表A").Select("第一列 is not null", str)
    Dim flag As Boolean = False
    For Each a As String In ary
        If pdr IsNot Nothing AndAlso dr(a) <> pdr(a) Then
            flag = True
        End If
    Next
    If flag = False Then
        count += 1
    Else
        'If count = 1 Then
            idx &= pdr("_Identify") & ","
        'End If
        count = 1
    End If
    pdr = dr
Next

For Each a As String In ary
    If pdr IsNot Nothing AndAlso Tables("表A").Rows(Tables("表A").Rows.count-2)(a) <> pdr(a) Then
        idx &= pdr("_Identify") & ","
    End If
Next

DataTables("表A").DeleteFor("_Identify not in (" & idx.trim(",") & ")")

[此贴子已经被作者于2015/4/2 10:45:36编辑过]

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


加好友 发短信
等级:童狐 帖子:286 积分:2345 威望:0 精华:0 注册:2013/8/30 3:37:00
  发帖心情 Post By:2015/4/2 10:57:00 [只看该作者]

可以把代码的大概意思告诉我。或注解一下代码,谢谢

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


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

 意思是:按顺序取出表数据;判断此行和上一行是否为相同的内容,如果是,不操作,如果不是,就加入到idx里面去;最后根据idx删除那些相同的内容

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