以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求助优化一段代码  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=32934)

--  作者:晕了快扶我
--  发布时间: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
--  发布时间:2013/5/10 17:16:00
--  
数据量多少?数据量大的话要等是没办法的事,只能弄个有好提示框.
--  作者:晕了快扶我
--  发布时间:2013/5/10 17:17:00
--  
以下是引用Bin在2013-5-10 17:16:00的发言:
数据量多少?数据量大的话要等是没办法的事,只能弄个有好提示框.

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


--  作者:Bin
--  发布时间:2013/5/10 17:19:00
--  
偶发性的?这么奇怪?例子发出来研究一下看看.
15条数据不至于会这样的.

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


--  作者:jspta
--  发布时间: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

加上这两条应该就够了

 


--  作者:晕了快扶我
--  发布时间:2013/5/10 17:27:00
--  
我再研究一下,网络也要彻查一下,刚刚连续狂点五分钟后卡顿,服务器PING值到了1000多,郁闷,不知道是不是什么程序在局域网里发广播..
--  作者:菲舍尔
--  发布时间: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卡的话,都是这两条的问题,无解


--  作者:晕了快扶我
--  发布时间: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的地方真的都有这种偶发性的情况出现