以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  代码耗时问题请教老师修改  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=32507)

--  作者:mamuaiqing
--  发布时间:2013/5/3 12:56:00
--  代码耗时问题请教老师修改

下面的代码在加载窗口事件中耗时9.89秒,怎么回事?外部数据是放在区域网中,请教老师

Dim st As Date = Date.Now \'将开始时间保存在变量st中
Tables("提取客户资料_Table1").DataTable.SysStyles("EmptyArea").BackColor = Color.White
Tables("提取客户资料_Table1").DataTable.Fill("Select [客户姓名],[省份],[地区],[联系电话] From {客户资料} ","数据库", True)
Tables("提取客户资料_Table1").SetColVisibleWidth("客户姓名|100|省份|50|地区|100|联系电话|200")
For Each r As Row In Tables("提取客户资料_Table1")
    Dim cmd As New SQLCommand
    Dim dt As DataTable
    cmd.C
    cmd.CommandText = "SELECT * From {客户短信电话} Where [客户姓名] = \'" & r("客户姓名") & "\'"
    dt = cmd.ExecuteReader
    If dt.DataRows.Count > 0 Then
        r.Checked = True
    End If
Next

e.Form.Controls("Label1").Text = "耗时: " & (Date.Now - st).TotalSeconds & "秒"


--  作者:ybil
--  发布时间:2013/5/3 13:18:00
--  

你把Dim cmd As New SQLCommand放入For Next中循环,不足10秒算少了,如Table中有几千行,岂不是要加载几千次!


Dim dr as datarow

Dim t1 As Table = Tables("提取客户资料_Table1")


t1.redraw = 0
t1.DataTable.SysStyles("EmptyArea").BackColor = Color.White
t1.DataTable.Fill("Select [客户姓名],[省份],[地区],[联系电话] From {客户资料} ","数据库", True)
t1.SetColVisibleWidth("客户姓名|100|省份|50|地区|100|联系电话|200")

Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "SELECT * From {客户短信电话}"
dt = cmd.ExecuteReader


For Each r As Row In t1.rows
    dr =dt1.find( "
[客户姓名] = \'" & r("客户姓名") & "\'")
    If dr isnot nothing Then
        r.Checked = True
    End If
Next

t1.redraw = 1



[此贴子已经被作者于2013-5-3 13:23:57编辑过]

--  作者:mamuaiqing
--  发布时间:2013/5/3 13:30:00
--  
感谢ybil老师,学生明白了
--  作者:ybil
--  发布时间:2013/5/3 13:36:00
--  

反正是查询表,这样更好:


Dim SQL As string

Dim t1 As Table = Tables("提取客户资料_Table1")


SQL = "Select a.客户姓名,a.省份,a.地区,a.联系电话,b.客户短信电话  From {客户资料} a "

SQL+ = "INNER JOIN {客户短信电话} b ON a.客户姓名 = b.客户姓名"

t1.redraw = 0
t1.DataTable.SysStyles("EmptyArea").BackColor = Color.White
t1.Fill(SQL,"数据库", True)
t1.SetColVisibleWidth("客户姓名|100|省份|50|地区|100|联系电话|200")


Dim drs As List(of Dadtarow) = t1.DataTable.Select("客户短信电话 > \'\'")

For Each dr As DaRow In drs

      t1.Rows(t1.FindRow(dr)).Checked = -1

Next

t1.redraw = 1

[此贴子已经被作者于2013-5-3 14:47:38编辑过]

--  作者:mamuaiqing
--  发布时间:2013/5/3 19:03:00
--  
t1.redraw = 0  

t1.redraw = 1

学生不解,redraw代表的是什么?请教老师

--  作者:don
--  发布时间:2013/5/3 21:43:00
--  
Redraw = 0  ===> 绘制 为 否, 

Redraw = 1  ===> 绘制 为 是,