Foxtable(狐表)用户栏目专家坐堂 → 项目运行速度求教?


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

主题:项目运行速度求教?

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


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2018/12/23 21:56:00 [只看该作者]

附件呢?1个1.6M的压缩包也传不上?


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


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2018/12/23 21:59:00 [只看该作者]

Dim tb As WinForm.TabControl = e.Form.Controls("TabControl1")
Dim pg As WinForm.TabPage = tb.SelectedPage
Dim 表 As String = ""
If tb.SelectedPage.Text = "鉴定信息汇总" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "报名登记汇总" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "中高级工资审" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "中高级工考核" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "技师高技资审" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "技师高技理论" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "技师高技实潜" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "上会评审汇总" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "证书编号汇总" Then
    表 = "证书编号表"
End If

Dim Result As DialogResult
Result = MessageBox.Show("确定要导入吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
    Dim dlg As New OpenFileDialog
    dlg.Filter = "Excel文件|*.xls"
    dlg.MultiSelect = True '允许选择多个文件
    If dlg.ShowDialog =DialogResult.OK Then
        Dim Book As New XLS.Book(dlg.FileName)
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Tables(表).ResumeRedraw()
        Tables(表).StopRedraw()
        systemready = False
        Dim nms As New Dictionary(Of String, Integer)
        Dim dic As new Dictionary(Of DataRow, Integer)
        Dim ls As new List(Of Integer)
        For c As Integer = 0 To sheet.Cols.Count - 1
            Dim str As String = sheet(1,c).Text.Replace(" ", "")
            If  DataTables(表).DataCols.Contains(str) Then
                nms.Add(str, c)
            End If
        Next
        For n As Integer = 2 To Sheet.Rows.Count -1
            Dim jdpc As String = sheet(n,6).Text
            Dim sfzhm As String = sheet(n,9).Text
            Dim dr As DataRow = DataTables(表).Find("鉴定批次 = '" & jdpc & "' And 身份证号码 = '" & sfzhm & "'")
            If dr Is Nothing Then
                ls.add(n)
            Else
                dic.Add(dr, n)
            End If
        Next
        For Each key As DataRow In dic.Keys
            For Each m As String In nms.keys
                If DataTables(表).DataCols(m).IsBoolean Then
                    If Sheet(dic(key),nms(m)).Text = "" OrElse Sheet(dic(key),nms(m)).Text = "False" OrElse Sheet(dic(key),nms(m)).Value = 0 Then
                        key(m) = False
                    Else
                        key(m) = True
                    End If
                Else If DataTables(表).DataCols(m).Expression > "" Then
                    '表达式列
                Else If DataTables(表).DataCols(m).IsNumeric Then
                    key(m) = val(Sheet(dic(key),nms(m)).Value)
                Else
                    key(m) = Sheet(dic(key),nms(m)).Value
                End If
            Next
        Next
        For Each l As Integer In ls
            Dim ndr As DataRow = DataTables(表).AddNew
            For Each m As String In nms.keys
                If DataTables(表).DataCols(m).IsBoolean Then
                    If Sheet(l,nms(m)).Text = "" OrElse Sheet(l,nms(m)).Text = "False" OrElse Sheet(l,nms(m)).Value = 0 Then
                        ndr (m) = False
                    Else
                        ndr (m) = True
                    End If
                Else If DataTables(表).DataCols(m).Expression > "" Then
                    '表达式列
                Else If DataTables(表).DataCols(m).IsNumeric Then
                    ndr (m) = val(Sheet(l,nms(m)).Value)
                Else
                    ndr (m) = Sheet(l,nms(m)).Value
                End If
            Next
        Next
        Tables(表).ResumeRedraw()
        systemready = True
    End If
End If
这是导入代码,还能再优化?

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


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2018/12/23 22:00:00 [只看该作者]


[此贴子已经被作者于2018/12/25 22:06:56编辑过]

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


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

测试了一下,已经没有办法再提升速度了。你加入一个进度条,显示导入进度,让其等待吧。

 

而且,还可以把代码写到异步函数里面,然后调用。这样,可以一遍导入,你还可以去做另外的事情,让其慢慢在后台导入数据。

 

http://www.foxtable.com/mobilehelp/scr/3269.htm

 


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


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

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:我的项目20181223.foxdb


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


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2018/12/23 23:53:00 [只看该作者]

图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看文件版本过高!我打不开!

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


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

以下是引用lisheng1971在2018/12/23 23:53:00的发言:
图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看文件版本过高!我打不开!

 

那你升级到最新版吧。


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


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2018/12/24 11:33:00 [只看该作者]

图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看加密狗过期!!!!!!

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


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

1、加入一个进度条控件;

 

2、导入按钮

 

鉴定管理_导入_Click

Dim tb As WinForm.TabControl = e.Form.Controls("TabControl1")
Dim pg As WinForm.TabPage = tb.SelectedPage
Dim 表 As String = ""
If tb.SelectedPage.Text = "鉴定信息汇总" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "报名登记汇总" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "中高级工资审" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "中高级工考核" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "技师高技资审" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "技师高技理论" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "技师高技实潜" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "上会评审汇总" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "证书编号汇总" Then
    表 = "证书编号表"
End If
Dim Result As DialogResult
Result = MessageBox.Show("确定要导入吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
    Dim dlg As New OpenFileDialog
    dlg.Filter = "Excel文件|*.xls"
    dlg.MultiSelect = True '允许选择多个文件
    If dlg.ShowDialog =DialogResult.OK Then
        Functions.AsyncExecute("异步函数", 表, e.Form.controls("ProgressBar1"), dlg)
    End If
End If

 

3、内部函数【异步函数】代码

 

Dim 表 = args(0)
Dim p As WinForm.ProgressBar = args(1)
Dim dlg = args(2)
p.Minimum = 0 '设置最小值
p.Value = 0 '设置当前值


p.Visible = True
Dim Book As New XLS.Book(dlg.FileName)
Dim Sheet As XLS.Sheet = Book.Sheets(0)
DataTables(表).ResumeRedraw()
DataTables(表).StopRedraw()
systemready = False

p.Maximum = sheet.Rows.count*2

Dim nms As New Dictionary(Of String, Integer)
Dim dic As new Dictionary(Of DataRow, Integer)
Dim ls As new List(Of Integer)
For c As Integer = 0 To sheet.Cols.Count - 1
    Dim str As String = sheet(1,c).Text.Replace(" ", "")
    If  DataTables(表).DataCols.Contains(str) Then
        nms.Add(str, c)
    End If
Next
For n As Integer = 2 To Sheet.Rows.Count -1
    Dim jdpc As String = sheet(n,6).Text
    Dim sfzhm As String = sheet(n,9).Text
    Dim dr As DataRow = DataTables(表).Find("鉴定批次 = '" & jdpc & "' And 身份证号码 = '" & sfzhm & "'")
    If dr Is Nothing Then
        ls.add(n)
    Else
        dic.Add(dr, n)
    End If
    p.value += 1
Next
For Each key As DataRow In dic.Keys
    For Each m As String In nms.keys
        If DataTables(表).DataCols(m).IsBoolean Then
            If Sheet(dic(key),nms(m)).Text = "" OrElse Sheet(dic(key),nms(m)).Text = "False" OrElse Sheet(dic(key),nms(m)).Value = 0 Then
                key(m) = False
            Else
                key(m) = True
            End If
        Else If DataTables(表).DataCols(m).Expression > "" Then
            '表达式列
        Else If DataTables(表).DataCols(m).IsNumeric Then
            key(m) = val(Sheet(dic(key),nms(m)).Value)
        Else
            key(m) = Sheet(dic(key),nms(m)).Value
        End If
        p.value += 1
    Next
Next
For Each l As Integer In ls
    Dim ndr As DataRow = DataTables(表).AddNew
    For Each m As String In nms.keys
        If DataTables(表).DataCols(m).IsBoolean Then
            If Sheet(l,nms(m)).Text = "" OrElse Sheet(l,nms(m)).Text = "False" OrElse Sheet(l,nms(m)).Value = 0 Then
                ndr (m) = False
            Else
                ndr (m) = True
            End If
        Else If DataTables(表).DataCols(m).Expression > "" Then
            '表达式列
        Else If DataTables(表).DataCols(m).IsNumeric Then
            ndr (m) = val(Sheet(l,nms(m)).Value)
        Else
            ndr (m) = Sheet(l,nms(m)).Value
        End If
    Next
    p.value += 1
Next
DataTables(表).ResumeRedraw()
systemready = True
msgbox("导入完成")
p.Visible = False


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


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2018/12/24 20:30:00 [只看该作者]

版主:按您写的步骤,我还是搞不定图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看

        1、导入按钮CLICK代码报错(删除原来的代码,把新代码复制进去);

        2、另外内部函数的代码也是在导入按钮的CLICK里输入?可我只看到有内部函数选项,但没有异步函数选项,这个是真心一点都不懂。

        3、另外我偿试把主表及各个副表都放在是单独的窗口中,然后表、副表用各自窗口中的按钮控制,貌似在速度上还比较快(导入还是差不多,略快些),不知是心理作用还是数据量还没多少的原因。


 回到顶部
总数 21 上一页 1 2 3 下一页