以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 重置列 (http://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 -- 不要觉得,行动起来,改代码测试,然后看效果。 |