以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 这样子刷新,每次都会等待很长一段时间,求帮助? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=146767) |
-- 作者:fengwenliuyan -- 发布时间:2020/3/2 10:19:00 -- 这样子刷新,每次都会等待很长一段时间,求帮助? 已知:“入库表”与“客户表”,关于“客户”列建立了关联,现在“客户表”的DataColChanged事件中写入以下代码: If e.DataCol.name = "用户名" Or e.DataCol.name = "编辑者" Then Return Else \'表中任意一列的行数据发生改变,则执行. e.DataRow("用户名") = user.name End If \'表中指定列的行数据发生改变,则执行. Select Case e.DataCol.Name Case "客户" e.DataRow("日志时间") = Date.Now End Select Dim d As Date = Date.Now DataTables("客户表").ReplaceFor("日志", True, "日志时间 <= #" & d.AddMinutes(-2) & "#") DataTables("客户表").ReplaceFor("日志", False, "日志时间 > #" & d.AddMinutes(-2) & "#") \'没做天数: If e.DataCol.name = "客户" Then If e.DataRow.IsNull("客户") Then e.DataRow("没做天数") = Nothing Else Dim fdr = DataTables("入库表").find("客户=\'" & e.DataRow("客户") & "\' and 入库日期 <= #" & Date.now & "#", "入库日期 desc") If fdr Is Nothing Then e.DataRow("没做天数") = -1 Else Dim sp As TimeSpan = Date.now - cdate(fdr("入库日期")) e.DataRow("没做天数") = sp.TotalDays End If End If End If 需求: 刷新每个客户最新一笔入库日期,至今的日期差,即“没做天数”。 本人现在的做法: 新建一个控件按钮,代码如下: \'没做天数: DataTables("客户表").datacols("客户").RaiseDataColChanged() 问题: 这样子刷新,每次都会等待很长一段时间,求帮助?
|
-- 作者:有点蓝 -- 发布时间:2020/3/2 10:39:00 -- RaiseDataColChanged会每一行都触发一次,其它代码应该没有问题,然后下面代码也会每一行都执行一次,假设有100行,就会执行200次更新整个表数据的操作,当然就慢了。 Dim d As Date = Date.Now DataTables("客户表").ReplaceFor("日志", True, "日志时间 <= #" & d.AddMinutes(-2) & "#") DataTables("客户表").ReplaceFor("日志", False, "日志时间 > #" & d.AddMinutes(-2) & "#") |
-- 作者:fengwenliuyan -- 发布时间:2020/3/2 10:45:00 -- 回复:(有点蓝)RaiseDataColChanged会每一行都触发一... 那么,有什么办法处理呢? |
-- 作者:有点蓝 -- 发布时间:2020/3/2 10:55:00 -- 加个全局变量控制一下,RaiseDataColChanged时候不执行 …… if vars("a") = true Dim d As Date = Date.Now DataTables("客户表").ReplaceFor("日志", True, "日志时间 <= #" & d.AddMinutes(-2) & "#") DataTables("客户表").ReplaceFor("日志", False, "日志时间 > #" & d.AddMinutes(-2) & "#") end if …… 新建一个控件按钮,代码如下: \'没做天数: vars("a") = false DataTables("客户表").datacols("客户").RaiseDataColChanged() vars("a") = true |
-- 作者:fengwenliuyan -- 发布时间:2020/3/2 15:01:00 -- 回复:(有点蓝)加个全局变量控制一下,RaiseDataColC... 试了一下您的办法,但是还是很慢,主要是刷新后的第一次换行,会迟缓6/7秒时间,这还是数据不多的时候? 请问,这换行的触发条件,应该如何优化? 在“入库表”的CurrentChanged事件中写了新增同步代码: Dim cr As Row = e.Table.Current If cr IsNot Nothing Then Dim idx As Integer = Tables("产品表").FindRow("客户 = \'" & cr("客户") & "\'") If idx >= 0 Then Tables("产品表").Position = idx End If End If ,且窗口表的CurrentChanged事件也写了: \'SystemReady = False If e.Table.current Is Nothing Then Return systemready = False \'换行时,同客户列同步: DataTables("产品表").Load Tables("产品表").filter = "" Dim i = Tables("产品表").FindRow("客户 = \'" & e.Table.current("客户") & "\'") If i>=0 Then Tables("产品表").position = i Else Tables("产品表").filter = "1=2" End If systemready = True [此贴子已经被作者于2020/3/2 15:04:38编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/3/2 15:36:00 -- http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=146710 |