以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  重置列  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=172507)

--  作者:112
--  发布时间:2021/10/16 9:18:00
--  重置列
老师你好,我想问一下如何重置列的时候速度会快一点,因为我把他当中afterload里面每次重置3000条数据启动的时候有点慢
DataTables("table_3").DataCols("记录日期").RaiseDataColChanged()


--  作者:有点蓝
--  发布时间:2021/10/16 9:26:00
--  
只能说明datacolchanged事件代码的处理逻辑有问题
--  作者:112
--  发布时间:2021/10/16 9:28:00
--  
If e.DataCol.Name = "记录日期" Then
    
    
    If e.DataRow.IsNull("记录日期") = False AndAlso e.DataRow("状态")="跟进中"
        If e.DataRow("记录日期")>  Date.Today.AddDays(val(e.DataRow("处理时间")) * -1) Then
            e.DataRow("状态")="跟进中"
        Else
            e.DataRow("状态")="跟进中(已超时)"
        End If
    End If
End If

--  作者:有点蓝
--  发布时间:2021/10/16 9:29:00
--  
这个是datacolchanged事件全部代码?

afterload去掉1楼红色的代码就不会慢?

--  作者:112
--  发布时间:2021/10/16 9:33:00
--  
Select Case e.DataCol.Name
    Case "状态","记录时间","店铺名称","产品类别","单号","产品SKU","责任方","状况描述 原因","客户姓名","联系方式","寄送地址","处理方式","寄送SKU","配件SKU","数量","备注","发货仓库","系统单号","追踪号","物流公司","发货日期","下单日期","回访","记录日期","结束日期","赠送SKU"
        e.DataRow("记录内容") = user.name & "在" & Date.now & "把【" & e.DataCol.name & "】值【" & e.OldValue & "】修改成【" & e.NewValue & "】" & vbcrlf & e.DataRow("记录内容")
End Select
If e.DataCol.Name = "记录日期" Then
    
    
    If e.DataRow.IsNull("记录日期") = False AndAlso e.DataRow("状态")="跟进中"
        If e.DataRow("记录日期")>  Date.Today.AddDays(val(e.DataRow("处理时间")) * -1) Then
            e.DataRow("状态")="跟进中"
        Else
            e.DataRow("状态")="跟进中(已超时)"
        End If
    End If
End If 这是我datacolchanged 的全部的代码

--  作者:112
--  发布时间:2021/10/16 9:34:00
--  
是我哪里导致他运算起来慢呢,我想修改一下,请问老师应该怎么修改比较好呢 ,是快一点的删了后
[此贴子已经被作者于2021/10/16 9:40:07编辑过]

--  作者:有点蓝
--  发布时间:2021/10/16 9:49:00
--  
datacolchanged事件的处理逻辑,比如重置一行"记录日期"

1、第一段select case代码会执行,"记录内容"被更改增加
2、第二段select case代码会执行,计算日期更改状态列
3、状态列被更改,程序触发datacolchanged事件,执行第一段select case代码,"记录内容"被更改增加

如果是3000行数据也就是datacolchanged事件会被触发6000次,"记录内容"被更改6000次,随着"记录内容"数据越来越多也就越来越慢

试试重置里的时候不要触发二次事件,在加一个变量判断不要写日志
SystemReady = False
vars("xie")=true
DataTables("table_3").DataCols("记录日期").RaiseDataColChanged()
vars("xie")=false
SystemReady = True


if  vars("xie")=false
Select Case e.DataCol.Name
    Case "状态","记录时间","店铺名称","产品类别","单号","产品SKU","责任方","状况描述 原因","客户姓名","联系方式","寄送地址","处理方式","寄送SKU","配件SKU","数量","备注","发货仓库","系统单号","追踪号","物流公司","发货日期","下单日期","回访","记录日期","结束日期","赠送SKU"
        e.DataRow("记录内容") = user.name & "在" & Date.now & "把【" & e.DataCol.name & "】值【" & e.OldValue & "】修改成【" & e.NewValue & "】" & vbcrlf & e.DataRow("记录内容")
End Select
end if
If e.DataCol.Name = "记录日期" Then
    If e.DataRow.IsNull("记录日期") = False AndAlso e.DataRow("状态")="跟进中"
        If e.DataRow("记录日期")>  Date.Today.AddDays(val(e.DataRow("处理时间")) * -1) Then
            e.DataRow("状态")="跟进中"
        Else
            e.DataRow("状态")="跟进中(已超时)"
        End If
    End If
End If 

--  作者:112
--  发布时间:2021/10/16 10:50:00
--  
我觉得是不是在If e.DataRow.IsNull("记录日期") = False AndAlso e.DataRow("状态")="跟进中" 加多个AndAlso e.DataRow("处理人")=user.name 是不是更快
--  作者:有点蓝
--  发布时间:2021/10/16 11:02:00
--  
不要觉得,行动起来,改代码测试,然后看效果。