以文本方式查看主题

-  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=188365)

--  作者:cxmxjwlmq
--  发布时间:2023/9/16 9:40:00
--  同步表耗时太长

各位老师:一个系统,用数据库外部表,出库单汇总与出库单明细关联,在同步表时耗时太长。

代码如下:

Dim st As Date = Date.Now  \'将开始时间保存在变量st中
DataTables("出库单明细").RemoveFor("出库日期 = \'" & e.Form.Controls("DateTimePicker1").Text & "\'")
DataTables("出库单明细").AppendLoad("出库日期 = \'" & e.Form.Controls("DateTimePicker1").Text & "\'")

DataTables("出库单汇总").StopRedraw
DataTables("出库单汇总").RemoveFor("出库日期 = \'" & e.Form.Controls("DateTimePicker1").Text & "\'")
DataTables("出库单汇总").AppendLoad("出库日期 = \'" & e.Form.Controls("DateTimePicker1").Text & "\'")
DataTables("出库单汇总").ResumeRedraw
MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒") \'计算并显示执行代码所花费的秒数

 

 

耗时如下图:

 


图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20230916094003.png
图片点击可在新窗口打开查看

 

请各位老师,怎样修改一下代码,将耗时减少!

谢谢!


--  作者:有点蓝
--  发布时间:2023/9/16 10:12:00
--  
每个表同一个出库日期的数据有多少行?内网还是跨网连接数据源?

出库单明细也添加StopRedraw、ResumeRedraw

再试试

--  作者:cxmxjwlmq
--  发布时间:2023/9/16 10:22:00
--  

老师:好

现一出库日期中,汇总表100行之内,明细表1000行之内!

用的内部局域网!

[此贴子已经被作者于2023/9/16 10:22:40编辑过]

--  作者:有点蓝
--  发布时间:2023/9/16 11:33:00
--  
屏蔽事件和表达式也不行?
--  作者:cxmxjwlmq
--  发布时间:2023/9/16 13:02:00
--  

老师:好

屏蔽事件代码耗时更长

 60多秒

 

屏蔽表达式代码如下:

Dim st As Date = Date.Now  \'将开始时间保存在变量st中

\'SystemReady =  False
\' Try
\'追加数据代码

DataTables("出库单明细").DataCols("折后单价").Expression = ""
DataTables("出库单明细").DataCols("金额").Expression = ""
\'Sum(Child(出库关联).数量)

DataTables("出库单明细").StopRedraw
DataTables("出库单明细").RemoveFor("出库日期 = \'" & e.Form.Controls("DateTimePicker1").Text & "\'")
DataTables("出库单明细").AppendLoad("出库日期 = \'" & e.Form.Controls("DateTimePicker1").Text & "\'")
DataTables("出库单明细").ResumeRedraw

DataTables("出库单明细").DataCols("折后单价").Expression = "单价 * 折扣率"
DataTables("出库单明细").DataCols("金额").Expression = "数量 * 折后单价 * 修正"

DataTables("出库单汇总").DataCols("金额").Expression = ""
DataTables("出库单汇总").DataCols("数量").Expression = ""
DataTables("出库单汇总").StopRedraw
DataTables("出库单汇总").RemoveFor("出库日期 = \'" & e.Form.Controls("DateTimePicker1").Text & "\'")
DataTables("出库单汇总").AppendLoad("出库日期 = \'" & e.Form.Controls("DateTimePicker1").Text & "\'")
DataTables("出库单汇总").ResumeRedraw
DataTables("出库单汇总").DataCols("数量").Expression = "Sum(Child(出库关联).数量)"
DataTables("出库单汇总").DataCols("金额").Expression = "Sum(Child(出库关联).金额)"


With Tables("销售出库单_Table2")
    .Position = .Rows.Count - 1
End With
   \'e.Form.Controls("Label7").Visible = False

\'Catch ex As Exception
\'     MessageBox.Show("追加数据失败")
\'End Try
\'SystemReady = True

MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒") \'计算并显示执行代码所花费的秒数

 

耗时如图:

 
此主题相关图片如下:微信图片_20230916130145.png
按此在新窗口浏览图片

麻烦老师给看看,谢谢!

[此贴子已经被作者于2023/9/16 13:02:17编辑过]

--  作者:有点蓝
--  发布时间:2023/9/16 13:56:00
--  
这样测试看看

Dim st As Date = Date.Now \'将开始时间保存在变量st中

SystemReady = False
\' Try
\'追加数据代码

DataTables("出库单明细").DataCols("折后单价").Expression = ""
DataTables("出库单明细").DataCols("金额").Expression = ""
\'Sum(Child(出库关联).数量)
Output.Show("去掉出库单明细表达式耗时: " & (Date.Now - st).TotalSeconds & "秒")
st = Date.Now
DataTables("出库单明细").StopRedraw
DataTables("出库单明细").RemoveFor("出库日期 = \'" & e.Form.Controls("DateTimePicker1").Text & "\'")
Output.Show("移除出库单明细耗时: " & (Date.Now - st).TotalSeconds & "秒")
st = Date.Now
DataTables("出库单明细").AppendLoad("出库日期 = \'" & e.Form.Controls("DateTimePicker1").Text & "\'")
Output.Show("追加出库单明细耗时: " & (Date.Now - st).TotalSeconds & "秒")
st = Date.Now

DataTables("出库单明细").DataCols("折后单价").Expression = "单价 * 折扣率"
DataTables("出库单明细").DataCols("金额").Expression = "数量 * 折后单价 * 修正"
Output.Show("添加出库单明细表达式耗时: " & (Date.Now - st).TotalSeconds & "秒")
st = Date.Now
DataTables("出库单明细").ResumeRedraw
Output.Show("恢复绘制出库单明细耗时: " & (Date.Now - st).TotalSeconds & "秒")
st = Date.Now

DataTables("出库单汇总").DataCols("金额").Expression = ""
DataTables("出库单汇总").DataCols("数量").Expression = ""
Output.Show("去掉出库单汇总达式耗时: " & (Date.Now - st).TotalSeconds & "秒")
st = Date.Now
DataTables("出库单汇总").StopRedraw
DataTables("出库单汇总").RemoveFor("出库日期 = \'" & e.Form.Controls("DateTimePicker1").Text & "\'")
Output.Show("移除出库单汇总耗时: " & (Date.Now - st).TotalSeconds & "秒")
st = Date.Now
DataTables("出库单汇总").AppendLoad("出库日期 = \'" & e.Form.Controls("DateTimePicker1").Text & "\'")
Output.Show("追加出库单汇总耗时: " & (Date.Now - st).TotalSeconds & "秒")
st = Date.Now
DataTables("出库单汇总").DataCols("数量").Expression = "Sum(Child(出库关联).数量)"
DataTables("出库单汇总").DataCols("金额").Expression = "Sum(Child(出库关联).金额)"
Output.Show("添加出库单汇总表达式耗时: " & (Date.Now - st).TotalSeconds & "秒")
st = Date.Now
DataTables("出库单汇总").ResumeRedraw
Output.Show("复绘制出库单汇总耗时: " & (Date.Now - st).TotalSeconds & "秒")
st = Date.Now


With Tables("销售出库单_Table2")
    .Position = .Rows.Count - 1
End With
   \'e.Form.Controls("Label7").Visible = False

\'Catch ex As Exception
\'     MessageBox.Show("追加数据失败")
\'End Try
SystemReady = True


--  作者:cxmxjwlmq
--  发布时间:2023/9/16 17:38:00
--  

老师:好

测试:Output.Show("移除出库单明细耗时: " & (Date.Now - st).TotalSeconds & "秒")

       移除出库单明细耗时:22.027秒

 

      Output.Show("追加出库单明细耗时: " & (Date.Now - st).TotalSeconds & "秒")

      追加出库单明细耗时:21.45秒

 

      Output.Show("添加出库单明细表达式耗时: " & (Date.Now - st).TotalSeconds & "秒")

      添加出库单明细表达式耗时:0.29秒

 

     Output.Show("移除出库单汇总耗时: " & (Date.Now - st).TotalSeconds & "秒")

     移除出库单汇总耗时:5.522

 

    这几项耗时较长,有没有缩短的可能?

请老师费心!谢谢


--  作者:有点蓝
--  发布时间:2023/9/16 17:54:00
--  
1000行数据不可能这么慢,应该是有其它什么代码影响了。我测试移除5000行数据不到1秒。

具体什么原因要测试过才知道,方便做个例子发上来看看

--  作者:cxmxjwlmq
--  发布时间:2023/9/16 18:14:00
--  

老师,图片点击可在新窗口打开查看外部数据表怎么做例子?

 

 

[此贴子已经被作者于2023/9/17 10:24:09编辑过]

--  作者:cxmxjwlmq
--  发布时间:2023/9/17 11:38:00
--  

老师:请查收附件,耗时过长的事,还需要你指教!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

代码中要屏蔽表事件,这两个表的表事件都没有加!

请多费心!