以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请教老师保存效率问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=89172)

--  作者:zhy400137
--  发布时间: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
--  发布时间:2016/8/16 16:58:00
--  
顶一下!
--  作者:zhy400137
--  发布时间:2016/8/16 17:01:00
--  
是否是因为曾加修改日志的代码代来的影响!
--  作者:大红袍
--  发布时间:2016/8/16 17:06:00
--  
以下是引用zhy400137在2016/8/16 17:01:00的发言:
是否是因为曾加修改日志的代码代来的影响!

 

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

 

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


--  作者:zhy400137
--  发布时间:2016/8/16 17:09:00
--  
删除一样慢,那是否能优化?
--  作者:zhy400137
--  发布时间:2016/8/16 17:22:00
--  
求解
--  作者:大红袍
--  发布时间:2016/8/16 17:32:00
--  
 外部数据源,几千行数据,慢,很正常。
--  作者:zhy400137
--  发布时间: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
--  发布时间:2016/8/16 17:42:00
--  
发现后台替换再加载要快很多,但如果能对选定行操作,且再加载表后,还是原来的选定行
--  作者:大红袍
--  发布时间: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)