Foxtable(狐表)用户栏目专家坐堂 → 重置列


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

主题:重置列

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


加好友 发短信
等级:幼狐 帖子:55 积分:460 威望:0 精华:0 注册:2015/6/7 19:52:00
重置列  发帖心情 Post By:2021/10/16 9:18:00 [只看该作者]

老师你好,我想问一下如何重置列的时候速度会快一点,因为我把他当中afterload里面每次重置3000条数据启动的时候有点慢
DataTables("table_3").DataCols("记录日期").RaiseDataColChanged()


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106011 积分:539142 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/10/16 9:26:00 [只看该作者]

只能说明datacolchanged事件代码的处理逻辑有问题

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


加好友 发短信
等级:幼狐 帖子:55 积分:460 威望:0 精华:0 注册:2015/6/7 19:52:00
  发帖心情 Post By: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

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106011 积分:539142 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/10/16 9:29:00 [只看该作者]

这个是datacolchanged事件全部代码?

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

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


加好友 发短信
等级:幼狐 帖子:55 积分:460 威望:0 精华:0 注册:2015/6/7 19:52:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:55 积分:460 威望:0 精华:0 注册:2015/6/7 19:52:00
  发帖心情 Post By:2021/10/16 9:34:00 [只看该作者]

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

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106011 积分:539142 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:55 积分:460 威望:0 精华:0 注册:2015/6/7 19:52:00
  发帖心情 Post By:2021/10/16 10:50:00 [只看该作者]

我觉得是不是在If e.DataRow.IsNull("记录日期") = False AndAlso e.DataRow("状态")="跟进中" 加多个AndAlso e.DataRow("处理人")=user.name 是不是更快

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106011 积分:539142 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/10/16 11:02:00 [只看该作者]

不要觉得,行动起来,改代码测试,然后看效果。

 回到顶部