Foxtable(狐表)用户栏目专家坐堂 → 请教老师保存效率问题


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

主题:请教老师保存效率问题

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


加好友 发短信
等级:五尾狐 帖子:1133 积分:8227 威望:0 精华:0 注册:2013/11/3 19:00:00
请教老师保存效率问题  发帖心情 Post By:2016/8/16 16:51:00 [只看该作者]

批量对锁定后的行添加标记并保存的代码

批量对锁定的行添加标记
For Each r As Row In Tables("预算填写").GetCheckedRows
    If r.Locked=True
        r("财务审核")="财锁"
    End If
Next
这一步效率还行,但一保存就很慢,数据量一次大约在几千行。

保存代码

DataTables("预算填写").save

BeforeSaveDataRow事件代码

Dim dr As DataRow = e.DataRow

If dr.Isnull("部门ID") Or dr.Isnull("期间") Or dr.Isnull("费用金额") Then

    e.Cancel=True

    MessageBox.show("至少要填入部门ID,期间和费用金额!","提示")

Else

    Dim dr1 As DataRow = DataTables("修改日志").AddNew

    dr1("预算填写ID") = dr("ID")

    dr1("用户ID") = _UserName

    dr1("用户名称") = _UserXm

    dr1("修改时间") = Date.Now

    dr1("表名")= "预算填写"

    dr1("列名") = "费用金额"

    dr1("原数值")=  dr.OriginalValue("费用金额")

    dr1("现数值") =dr("费用金额")

    dr1.save

End If


请教老师,如何能更高效率


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


加好友 发短信
等级:五尾狐 帖子:1133 积分:8227 威望:0 精华:0 注册:2013/11/3 19:00:00
  发帖心情 Post By:2016/8/16 16:58:00 [只看该作者]

顶一下!

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


加好友 发短信
等级:五尾狐 帖子:1133 积分:8227 威望:0 精华:0 注册:2013/11/3 19:00:00
  发帖心情 Post By:2016/8/16 17:01:00 [只看该作者]

是否是因为曾加修改日志的代码代来的影响!

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


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

以下是引用zhy400137在2016/8/16 17:01:00的发言:
是否是因为曾加修改日志的代码代来的影响!

 

你把 BeforeSaveDataRow 的代码删掉,保存一次。

 

如果你的是外部数据源,几千行数据保存,慢是肯定的。这是foxtable保存的问题。


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


加好友 发短信
等级:五尾狐 帖子:1133 积分:8227 威望:0 精华:0 注册:2013/11/3 19:00:00
  发帖心情 Post By:2016/8/16 17:09:00 [只看该作者]

删除一样慢,那是否能优化?

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


加好友 发短信
等级:五尾狐 帖子:1133 积分:8227 威望:0 精华:0 注册:2013/11/3 19:00:00
  发帖心情 Post By:2016/8/16 17:22:00 [只看该作者]

求解

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


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

 外部数据源,几千行数据,慢,很正常。

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


加好友 发短信
等级:五尾狐 帖子:1133 积分:8227 威望:0 精华:0 注册:2013/11/3 19:00:00
  发帖心情 Post By:2016/8/16 17:41:00 [只看该作者]

For Each r As Row In Tables("预算填写").GetCheckedRows
    If r.Locked=True
        ("财务审核")="财锁"
    End If
Next

DataTables("预算填写").SQLReplaceFor("财务审核","财锁","_Locked='1'")
DataTables("预算填写").load(False)

这几行代码能揉在一起不?

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


加好友 发短信
等级:五尾狐 帖子:1133 积分:8227 威望:0 精华:0 注册:2013/11/3 19:00:00
  发帖心情 Post By:2016/8/16 17:42:00 [只看该作者]

发现后台替换再加载要快很多,但如果能对选定行操作,且再加载表后,还是原来的选定行

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


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

 

Dim idxs As String = "-1,"
For Each r As Row In Tables("预算填写").GetCheckedRows
    If r.Locked=True
        idxs = idxs & r("_Identify") & ","
    End If
Next


DataTables("预算填写").SQLReplaceFor("财务审核","财锁","[_Identify] in (" & idxs.trim(",") & ")")
DataTables("预算填写").load(False)

 

 


 回到顶部