Foxtable(狐表)用户栏目专家坐堂 → 我在后台提取数据速度很慢,如何处理?


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

主题:我在后台提取数据速度很慢,如何处理?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/31 11:41:00 [显示全部帖子]

你重置列了?重复执行sqlSelect很慢的。

 

多行处理很慢还是处理一行数据也很慢?

 

如果是多行处理,不要用重置列,请单独做一个按钮处理你的逻辑。不要用sqlSelect。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/31 13:11:00 [显示全部帖子]

新增了多少行?重复多次执行sqlselect会很慢的。

 

或者你在粘贴的时候,不要触发datacolchanged事件。

 

或者是粘贴完以后,加载出所有的值查找后,再填充数据。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/31 19:24:00 [显示全部帖子]

Try
    Dim t As Table = e.Table
    If e.Control = True AndAlso t.Current IsNot Nothing Then
        Dim r As Integer = t.RowSel
        If e.KeyCode = keys.V Then
            vars("stop") = true
            Dim str As String = ClipBoard.GetText
            Dim nr As Integer = str.Replace(vblf,"").Trim(vbcr).Split(vbcr).Length + (t.RowSel) - t.Rows.Count
            If nr > 0 Then
                t.AddNew(nr)
                t.Select(r,t.ColSel)
            End If
        End If
    End If
Catch ex As Exception
    MessageBox.Show("追加数据失败")
End Try
 
DataColChanged事件判断
 
If vars("stop") = true Then return
 
粘贴完成后,再设置 vars("stop") = false

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/1 8:57:00 [显示全部帖子]

1、KeyDown
'粘贴新增N行
Try
    Dim t As Table = e.Table
    If e.Control = True AndAlso t.Current IsNot Nothing Then
        Dim r As Integer = t.RowSel
        If e.KeyCode = keys.V Then
            vars("stop") = True
            Dim str As String = ClipBoard.GetText
            Dim nr As Integer = str.Replace(vblf,"").Trim(vbcr).Split(vbcr).Length + (t.RowSel) - t.Rows.Count
            If nr > 0 Then
                t.AddNew(nr)
                t.Select(r,t.ColSel)
            End If
        End If
    End If
Catch ex As Exception
    MessageBox.Show("追加数据失败")
End Try

2、DataColChanged

If vars("stop") = True Then
    Return
Else
    Dim dr As DataRow = e.DataRow
    'Dim fdt As DataRow = DataTables("合同清单").Find("专业编号 = '" & dr("专业编号") & "' And 项目编码 = '" & dr("项目编码") & "'")
    Dim fdts As List(of DataRow) = DataTables("合同清单").SQLSelect("专业编号 = '" & dr("专业编号") & "' And 项目编码 = '" & dr("项目编码") & "'")
    For Each fdt As DataRow In fdts
        Select Case e.DataCol.Name
            Case "项目名称"
                If e.DataCol.IsString Then  '判断所有字符串型列
                    For Each r As Row In CurrentTable.Rows
                        For Each c As Col In CurrentTable.Cols
                            r(c.name) = Cstr(r(c.name)).replace("'", "").replace("""", "")  '删除双引号
                        Next
                    Next
                End If
            Case "项目编码"
                If fdt IsNot Nothing Then
                    dr("项目名称") = fdt("项目名称")
                    dr("项目特征") = fdt("项目特征")
                    dr("单位") = fdt("单位")
                    dr("综合单价") = fdt("综合单价")
                    dr("清单类别") = fdt("清单类别")
                Else
                    MessageBox.Show("无此清单项目,请核对!")
                    dr("项目名称") = Nothing
                    dr("项目特征") = Nothing
                    dr("单位") = Nothing
                    dr("综合单价") = Nothing
                    dr("清单类别") = Nothing
                End If
                
            Case "施工单位报审_工程量"
                If fdt IsNot Nothing AndAlso dr.IsNull("施工单位报审_工程量") = False Then
                    dr("施工单位报审_综合单价") = fdt("综合单价")
                    dr("施工单位报审_合价") = dr("施工单位报审_工程量") * dr("施工单位报审_综合单价")
                    dr("施工单位报审_人工费") = dr("施工单位报审_工程量") * fdt("单位_人工费")
                    dr("施工单位报审_机械费") = dr("施工单位报审_工程量") * fdt("单位_机械费")
                Else
                    dr("施工单位报审_综合单价") = Nothing
                    dr("施工单位报审_合价") = Nothing
                    dr("施工单位报审_人工费") = Nothing
                    dr("施工单位报审_机械费") = Nothing
                End If
            Case "监理单位审核_工程量"
                If fdt IsNot Nothing AndAlso dr.IsNull("监理单位审核_工程量") = False Then
                    dr("监理单位审核_综合单价") = fdt("综合单价")
                    dr("监理单位审核_合价") = dr("监理单位审核_工程量") * dr("监理单位审核_综合单价")
                    dr("监理单位审核_人工费") = dr("监理单位审核_工程量") * fdt("单位_人工费")
                    dr("监理单位审核_机械费") = dr("监理单位审核_工程量") * fdt("单位_机械费")
                    fdt("累计完成量") = fdt("累计完成量") + e.NewValue - e.OldValue
                    fdt.Save()
                Else
                    dr("监理单位审核_综合单价") = Nothing
                    dr("监理单位审核_合价") = Nothing
                    dr("监理单位审核_人工费") = Nothing
                    dr("监理单位审核_机械费") = Nothing
                End If
            Case "造价单位审核_工程量"
                If fdt IsNot Nothing AndAlso dr.IsNull("造价单位审核_工程量") = False Then
                    dr("造价单位审核_综合单价") = fdt("综合单价")
                    dr("造价单位审核_合价") = dr("造价单位审核_工程量") * dr("造价单位审核_综合单价")
                    dr("造价单位审核_人工费") = dr("造价单位审核_工程量") * fdt("单位_人工费")
                    dr("造价单位审核_机械费") = dr("造价单位审核_工程量") * fdt("单位_机械费")
                Else
                    dr("造价单位审核_综合单价") = Nothing
                    dr("造价单位审核_合价") = Nothing
                    dr("造价单位审核_人工费") = Nothing
                    dr("造价单位审核_机械费") = Nothing
                End If
        End Select
    Next
End If

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/1 10:44:00 [显示全部帖子]

我测试没问题,请问如何测试?

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:单元格多列下拉显示.foxdb


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/1 16:13:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:单元格多列下拉显示 (1).foxdb


 回到顶部