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


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

主题:求助优化一段代码

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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7102 威望:0 精华:0 注册:2013/3/4 18:02:00
求助优化一段代码  发帖心情 Post By:2013/5/10 17:12:00 [只看该作者]

If bname = "产品报价"
    Dim ids As String
    Dim dt As DataTable
    Dim cmd As New SQLCommand
    cmd.C
    cmd.CommandText ="select * from {产品报价主表}"
    dt = cmd.ExecuteReader
    For Each dr As DataRow In dt.DataRows
        ids = ids & ",'" & dr("OPN") &"'"
    Next
    ids= ids.Trim(",")
    Tables("产品报价选择_产品列表").DataTable.fill("Select * From {未报价物料查询} where 料号 not In (" & ids & ")","ERP",True)
    Dim i As Integer =Tables("产品报价选择_产品列表").DataTable.DataRows.Count
    With Tables("产品报价选择_产品列表").DataTable
        .LoadFilter = "料号 not In (" & ids & ")"
        .LoadTop = 15
        .LoadPage = 0
        .Load()
        e.Form.Controls("页码信息").Text= "共[" & .TotalPages & "] 页 ,当前为第[" & .LoadPage + 1 & "]页,共[" & i & "]行数据"
    End With
    With Tables("产品报价选择_产品列表")
        .MergeMode = MergeModeEnum.Free
        .MergeCols.Clear()
        .MergeCols.Add("品牌")
        .MergeCols.Add("供应商")
        .MergeCols.Add("品名")
        .MergeCols.Add("规格")
        .MergeCols.Add("料号")
        .MergeCols.Add("均价")
        .MergeSort = "品牌,供应商,品名"
        .AllowMerge = True
        .Cols("品牌").TextAlign = TextAlignEnum.Center
        .Cols("MOQ").TextAlign = TextAlignEnum.Center
        .Cols("供应商").TextAlign = TextAlignEnum.Center
        .Cols("单价").TextAlign = TextAlignEnum.Center
        .Cols("未税单价").TextAlign = TextAlignEnum.Center
        .Cols("均价").TextAlign = TextAlignEnum.Center
        .Cols("税率").TextAlign = TextAlignEnum.Center
        .DataTable.SysStyles("EmptyArea").BackColor = color.white
        .DataTable.DataCols("单价").SetFormat("##0.#####")
        .DataTable.DataCols("均价").SetFormat("##0.#####")
        .DataTable.DataCols("未税单价").SetFormat("##0.#####")
        .DataTable.DataCols("MOQ").SetFormat("#,####,###")
        .SetColVisibleWidth("品牌|80|供应商|90|未税单价|60|单价|60|均价|60|品名|120|规格|200|料号|190|MOQ|60|含税|40|税率|40")
    End With
End If
卡得疯掉了,窗口的afterload事件,大概会卡3秒左右,求高手帮忙看看能不能优化的?

SQL2000和2005的数据库测试都有这个问题,PING 服务器无丢包现象,PING值少于1MS


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


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

数据量多少?数据量大的话要等是没办法的事,只能弄个有好提示框.

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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7102 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/5/10 17:17:00 [只看该作者]

以下是引用Bin在2013-5-10 17:16:00的发言:
数据量多少?数据量大的话要等是没办法的事,只能弄个有好提示框.

15条数据,偶发性的,我在加载的时候同时间用PING在测试服务器的联通情况


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


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

偶发性的?这么奇怪?例子发出来研究一下看看.
15条数据不至于会这样的.

另外你查询的这个表有多少数据在数据库里?
你到数据库里查询这段拼接好的代码Select * From {未报价物料查询} where 料号 not In (" & ids & ")"
看看耗时


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


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/5/10 17:23:00 [只看该作者]

以下是引用晕了快扶我在2013-5-10 17:12:00的发言:

If bname = "产品报价"
    Dim ids As String
    Dim dt As DataTable
    Dim cmd As New SQLCommand
    cmd.C
    cmd.CommandText ="select * from {产品报价主表}"
    dt = cmd.ExecuteReader
    For Each dr As DataRow In dt.DataRows
        ids = ids & ",'" & dr("OPN") &"'"
    Next
    ids= ids.Trim(",")

dim t as table = Tables("产品报价选择_产品列表")  '建议以后都进行代码定义,之后修改代码方便很多

t.StopRedraw

    Tables("产品报价选择_产品列表").fill("Select * From {未报价物料查询} where 料号 not In (" & ids & ")","ERP",True)
    Dim i As Integer =Tables("产品报价选择_产品列表").DataTable.DataRows.Count


    With Tables("产品报价选择_产品列表").DataTable
        .LoadFilter = "料号 not In (" & ids & ")"
        .LoadTop = 15
        .LoadPage = 0
        .Load()
        e.Form.Controls("页码信息").Text= "共[" & .TotalPages & "] 页 ,当前为第[" & .LoadPage + 1 & "]页,共[" & i & "]行数据"
    End With
    With Tables("产品报价选择_产品列表")
        .MergeMode = MergeModeEnum.Free
        .MergeCols.Clear()
        .MergeCols.Add("品牌")
        .MergeCols.Add("供应商")
        .MergeCols.Add("品名")
        .MergeCols.Add("规格")
        .MergeCols.Add("料号")
        .MergeCols.Add("均价")
        .MergeSort = "品牌,供应商,品名"
        .AllowMerge = True
        .Cols("品牌").TextAlign = TextAlignEnum.Center
        .Cols("MOQ").TextAlign = TextAlignEnum.Center
        .Cols("供应商").TextAlign = TextAlignEnum.Center
        .Cols("单价").TextAlign = TextAlignEnum.Center
        .Cols("未税单价").TextAlign = TextAlignEnum.Center
        .Cols("均价").TextAlign = TextAlignEnum.Center
        .Cols("税率").TextAlign = TextAlignEnum.Center
        .DataTable.SysStyles("EmptyArea").BackColor = color.white
        .DataTable.DataCols("单价").SetFormat("##0.#####")
        .DataTable.DataCols("均价").SetFormat("##0.#####")
        .DataTable.DataCols("未税单价").SetFormat("##0.#####")
        .DataTable.DataCols("MOQ").SetFormat("#,####,###")
        .SetColVisibleWidth("品牌|80|供应商|90|未税单价|60|单价|60|均价|60|品名|120|规格|200|料号|190|MOQ|60|含税|40|税率|40")
    End With
End If

t.ResumeRedraw

卡得疯掉了,窗口的afterload事件,大概会卡3秒左右,求高手帮忙看看能不能优化的?

SQL2000和2005的数据库测试都有这个问题,PING 服务器无丢包现象,PING值少于1MS

加上这两条应该就够了

 


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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7102 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/5/10 17:27:00 [只看该作者]

我再研究一下,网络也要彻查一下,刚刚连续狂点五分钟后卡顿,服务器PING值到了1000多,郁闷,不知道是不是什么程序在局域网里发广播..

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


加好友 发短信
等级:二尾狐 帖子:504 积分:3492 威望:0 精华:3 注册:2012/11/13 15:49:00
  发帖心情 Post By:2013/5/11 0:26:00 [只看该作者]

 Dim dt As DataTable
Dim cmd As New SQLCommand
cmd.C
cmd.CommandText ="select * from {产品报价主表}"
dt = cmd.ExecuteReader

 Tables("产品报价选择_产品列表").fill("Select * From {未报价物料查询} where 料号 not In (" & ids & ")","ERP",True)

一般sqlserver卡的话,都是这两条的问题,无解


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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7102 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/5/12 21:06:00 [只看该作者]

以下是引用菲舍尔在2013-5-11 0:26:00的发言:

 Dim dt As DataTable
Dim cmd As New SQLCommand
cmd.C
cmd.CommandText ="select * from {产品报价主表}"
dt = cmd.ExecuteReader

 Tables("产品报价选择_产品列表").fill("Select * From {未报价物料查询} where 料号 not In (" & ids & ")","ERP",True)

一般sqlserver卡的话,都是这两条的问题,无解

高手,这个有没有变通的办法解决呢?我仔细查了只要有Fill的地方真的都有这种偶发性的情况出现


 回到顶部