以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 下面代码执行速度很慢 有没有好的方法实现这个要求? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85996) |
-- 作者:jswjyjf -- 发布时间:2016/6/7 15:46:00 -- 下面代码执行速度很慢 有没有好的方法实现这个要求? 根据库存表的期初数和某段期间的进货 销售 要实现新的库存数 下列代码 执行 速度很慢 有没有好的办法? Dim dt As DataTable = DataTables("区间进销存_Table1") For Each dr As DataRow In dt.DataRows Dim filter2 As String \' filter2="产品名称 = \'" & dr("产品名称") & "\' and 颜色 = \'" & dr("颜色") & "\' and 仓库 = \'" & dr("仓库") & "\' and 日期 >= #" & e.Form.Controls("startdate").value & "# " & " And 日期 <= #" & e.Form.Controls("enddate").value & "#" filter2="产品名称 = \'" & dr("产品名称") & "\' and 仓库 = \'" & dr("仓库") & "\' and 日期 < #" & e.Form.Controls("startdate").value & "#" Dim s1 As Double = DataTables("进货单明细").sqlCompute("sum(数量)", filter2) Dim s2 As Double = DataTables("销售单明细").sqlCompute("sum(数量)", filter2) Dim s3 As Double = DataTables("其他出库单明细").sqlCompute("sum(数量)", filter2) Dim s4 As Double = DataTables("其他入库单明细").sqlCompute("sum(数量)", filter2) dr("期初_数量") += s1+s4 - s2 - s3 Dim s5 As Double = DataTables("进货单明细").sqlCompute("sum(金额)", filter2) Dim s6 As Double = DataTables("销售单明细").sqlCompute("sum(金额)", filter2) Dim s7 As Double = DataTables("其他出库单明细").sqlCompute("sum(金额)", filter2) Dim s8 As Double = DataTables("其他入库单明细").sqlCompute("sum(金额)", filter2) dr("期初_金额") += s5+s6-s7-s8 Next |
-- 作者:狐狸爸爸 -- 发布时间:2016/6/7 15:53:00 -- 直接用多表统计工具SQLGroupTableBuilder得到所有的统计结果。 然后遍历这个统计表,逐行将统计结果写入到DataTables("区间进销存_Table1")中。
效率会提高百倍甚至千倍。
http://www.foxtable.com/help/topics/1626.htm
[此贴子已经被作者于2016/6/7 15:54:33编辑过]
|
-- 作者:jswjyjf -- 发布时间:2016/6/7 15:58:00 -- 不会弄 |
-- 作者:Hyphen -- 发布时间:2016/6/7 17:05:00 -- 不会就上传实例,说明操作逻辑 |
-- 作者:大红袍 -- 发布时间:2016/6/8 10:42:00 -- 尽量不要用sqlCompute,数据越多,越慢。
建议根据日期,先把所需的数据加载出来,然后直接用compute统计效率更高。 |
-- 作者:jswjyjf -- 发布时间:2016/6/8 14:52:00 -- 下面是我做的项目 要求计算某段期间的进销存报表 每个期间期初 进货 销售 库存都是不同的 除非没有发生 |
-- 作者:大红袍 -- 发布时间:2016/6/8 16:35:00 -- 参考
Dim filter1 As String Dim bd2 As New SqlGroupTableBuilder("统计表2","销售单明细") Dim bd5 As New GroupTableBuilder("统计表5",DataTables("期初库存")) Dim filter2="日期 < #" & e.Form.Controls("startdate").value & "#" Dim bd10 As New SQLGroupTableBuilder("统计表1","进货单明细") Dim bd11 As New SqlGroupTableBuilder("统计表11","销售单明细")
Dim dt As DataTable = DataTables("区间进销存_Table1") With DataTables("区间进销存_Table1").DataCols \'用表达式列计算库存数据
[此贴子已经被作者于2016/6/8 16:36:24编辑过]
|
-- 作者:jswjyjf -- 发布时间:2016/6/8 20:45:00 -- 字段:进货_之前数量 能否不要显示 |
-- 作者:大红袍 -- 发布时间:2016/6/10 20:54:00 -- 以下是引用jswjyjf在2016/6/8 20:45:00的发言:
字段:进货_之前数量 能否不要显示
你可以生成之后隐藏嘛
Tables("区间进销存_table1").Cols("进货_之前数量").Visible = False |