Foxtable(狐表)用户栏目专家坐堂 → 代码效率求助


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

主题:代码效率求助

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/27 15:32:00 [显示全部帖子]

 肯定是你dataColChanged事件有耗时的代码,试试

 

SystemReady = False

 

'你原本的代码

 

SystemReady = False


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/27 15:40:00 [显示全部帖子]

 或者做个例子上来测试,你这里赋值和查找在一起了,有可能慢,试试代码

 

SystemReady = False
Dim st As Date = Date.Now  '要测试耗时的代码
Dim drs As List(Of DataRow)
drs = DataTables("物料测试").Select("测试 = true")
Dim alldrs As New Dictionary(Of List(Of DataRow), DataRow)
For Each dr As DataRow In drs
    Dim drbs As List(Of DataRow)
    drbs = DataTables("物料").Select("[代码] = '" & dr("代码") & "'")
    alldrs.add(drbs, dr)
Next
For Each key As object In alldrs.Keys
    Dim dr As DataRow = alldrs(key)
    For Each drb As DataRow In key
        drb("名称") = dr("名称")
        drb("规格型号") = dr("规格型号")
    Next
Next
msgbox("完成耗时:" & Format((Date.Now - st).TotalSeconds,"0.0000") & "秒")
SystemReady = True


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/27 15:45:00 [显示全部帖子]

看4楼代码。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/27 17:33:00 [显示全部帖子]

那直接写sql语句

 

up date table1,table2 set table1.f1=table2.f1, table1.f2=table2.f2 where table1.ID=table2.ID

 

http://www.foxtable.com/help/topics/0696.htm

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/27 17:34:00 [显示全部帖子]

9楼的方法是最快的。还有一种方法,就是先把数据一次性加载出来,然后select也很快。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/27 19:36:00 [显示全部帖子]


Dim st As Date = Date.Now  '要测试耗时的代码
Dim str As String = DataTables("物料测试").GetComboListString("代码", "测试 = true").replace("|", "','")
Dim alldrs As New Dictionary(Of List(Of DataRow), DataRow)

DataTables("物料").LoadFilter = "代码 in ('" & str & "')"
DataTables("物料").Loadtop = "100 percent"
DataTables("物料").Load
Dim drs As List(Of DataRow)
drs = DataTables("物料测试").Select("测试 = true")
For Each dr As DataRow In drs
    Dim drbs As List(Of DataRow)
    drbs = DataTables("物料").Select("[代码] = '" & dr("代码") & "'")
    alldrs.add(drbs, dr)
Next
For Each key As object In alldrs.Keys
    Dim dr As DataRow = alldrs(key)
    For Each drb As DataRow In key
        drb("名称") = dr("名称")
        drb("规格型号") = dr("规格型号")
    Next
Next
msgbox("完成耗时:" & Format((Date.Now - st).TotalSeconds,"0.0000") & "秒")
SystemReady = True

 

[此贴子已经被作者于2016/4/27 19:37:08编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/27 19:53:00 [显示全部帖子]

 自己看15楼

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/27 20:48:00 [显示全部帖子]

SQLReplaceFor 是更新后台数据的,没你说的不能更新的情况。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/27 21:00:00 [显示全部帖子]

尝试15楼代码。然后再测试LoadTop的设置。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/27 21:07:00 [显示全部帖子]

我测试没问题啊

 

Dim dt As DataTable = DataTables("表A")
dt.LoadFilter = ""
dt.LoadTop = 5
dt.Load
dt.SQLReplaceFor("第一列", 123456)
dt.LoadFilter = ""
dt.LoadTop = "100 percent"
dt.Load


 回到顶部
总数 13 1 2 下一页