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


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

主题:代码效率求助

帅哥哟,离线,有人找我吗?
凡夫俗子
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/4/27 18:33:00 [只看该作者]

up date table1,table2 set table1.f1=table2.f1, table1.f2=table2.f2 where table1.ID=table2.ID 这种方法是最快的不错 但要求所有的数据都是同一个数据源的 且数据都已保存

如果数据没有保存就不能使用这个方法了

 回到顶部
帅哥哟,离线,有人找我吗?
凡夫俗子
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/4/27 18:38:00 [只看该作者]

9楼的方法是最快的。还有一种方法,就是先把数据一次性加载出来,然后select也很快。 这个方法如果万一碰到要加载的数据比如有20万行的时候 也不是个好的方法

 回到顶部
帅哥哟,离线,有人找我吗?
凡夫俗子
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/4/27 19:18:00 [只看该作者]

http://pan.baidu.com/s/1gfpXBTD


做了个示例数据库,请老师 优化一下 后台数据的更新方式

怎么示例中的后台更新方式没有生效。调试SQLUPDATE成功修改的行数都有1返回,但是结果还是空的。



 回到顶部
帅哥哟,离线,有人找我吗?
凡夫俗子
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/4/27 19:27:00 [只看该作者]

SystemReady = False

DataTables("物料").ReplaceFor("名称","")
DataTables("物料").ReplaceFor("规格型号","")
DataTables("物料").save
DataTables("物料").LoadFilter = ""
DataTables("物料").Loadtop = 5
DataTables("物料").Load
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        
        DataTables("物料").SQLReplaceFor("名称", dr("名称"), "代码 = '" & dr("代码") & "'")                   ‘这代码成更新前台数据了,我 前面DataTables("物料").Loadtop = 5 就更新5条,是10就更新10条
        DataTables("物料").SQLReplaceFor("规格型号", dr("规格型号"), "代码 = '" & dr("代码") & "'")         ‘这代码成更新前台数据了,我 前面DataTables("物料").Loadtop = 5 就更新5条,是10就更新10条
    Next
Next
msgbox("完成耗时:" & Format((Date.Now - st).TotalSeconds,"0.0000") & "秒")
DataTables("物料").LoadFilter = ""
DataTables("物料").Loadtop = ""
DataTables("物料").Load

SystemReady = True
[此贴子已经被作者于2016/4/27 19:34:34编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
凡夫俗子
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/4/27 19:52:00 [只看该作者]

DataTables("物料").SQLReplaceFor("名称", dr("名称"), "代码 = '" & dr("代码") & "'")                   ‘这代码成更新前台数据了,我 前面DataTables("物料").Loadtop = 5 就更新5条,是10就更新10条
DataTables("物料").SQLReplaceFor("规格型号", dr("规格型号"), "代码 = '" & dr("代码") & "'")         ‘这代码成更新前台数据了,我 前面DataTables("物料").Loadtop = 5 就更新5条,是10就更新10条

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


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

 自己看15楼

 回到顶部
帅哥哟,离线,有人找我吗?
凡夫俗子
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/4/27 20:40:00 [只看该作者]

以下是引用大红袍在2016/4/27 19:53:00的发言:
 自己看15楼

我是问 官方帮助里 说的是更新后台数据的,怎么成了只能更新前台数据的,偶尔更新一个的时候还是可以这样用用的

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

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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
凡夫俗子
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:457 积分:3523 威望:0 精华:0 注册:2016/1/22 18:17:00
  发帖心情 Post By:2016/4/27 20:51:00 [只看该作者]

以下是引用大红袍在2016/4/27 20:48:00的发言:
SQLReplaceFor 是更新后台数据的,没你说的不能更新的情况。

14楼代码 有问题没,这段代码 就不能更新后台数据,更新的实际上是 前台数据,我反复测试过

测试方法, 先让前台 只显示10条数据
DataTables("物料").LoadFilter = ""
DataTables("物料").LoadTop = 10
DataTables("物料").Load

然后:

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        
        DataTables("物料").SQLReplaceFor("名称", dr("名称"), "代码 = '" & dr("代码") & "'")
        DataTables("物料").SQLReplaceFor("规格型号", dr("规格型号"), "代码 = '" & dr("代码") & "'")
    Next
Next
msgbox("完成耗时:" & Format((Date.Now - st).TotalSeconds,"0.0000") & "秒")
DataTables("物料").LoadFilter = ""
DataTables("物料").Loadtop = ""
DataTables("物料").Load

SystemReady = True

结果应该更新 100条数据的,实际上 只更新10条数据。如果 最开始 DataTables("物料").LoadTop = 5 则只更新 5条数据

[此贴子已经被作者于2016/4/27 21:02:38编辑过]

 回到顶部
总数 27 上一页 1 2 3 下一页