Foxtable(狐表)用户栏目专家坐堂 → 代码耗时问题请教老师修改


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

主题:代码耗时问题请教老师修改

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


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
代码耗时问题请教老师修改  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
  发帖心情 Post By:2013/5/3 13:30:00 [只看该作者]

感谢ybil老师,学生明白了

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


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
  发帖心情 Post By:2013/5/3 19:03:00 [只看该作者]

t1.redraw = 0  

t1.redraw = 1

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

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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2013/5/3 21:43:00 [只看该作者]

Redraw = 0  ===> 绘制 为 否, 

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

 回到顶部