Foxtable(狐表)用户栏目专家坐堂 → 请帮优化代码


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

主题:请帮优化代码

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/6 10:38:00 [显示全部帖子]

1、红色这一行应该去掉,因为第一行已经清除数据,不存在排除已存在数据的问题:

 

    DataTables("产品进销存").DataRows.Clear()

    Dim f As New Filler

    f.SourceTable = DataTables("产品设置")

    f.SourceCols = "产品状态,商品代码,类别,系列,品名,规格,型号,包装率,计量系数,计量单位,价格_成本,价格_批发,价格_零售,价格_标价,安全库存量,产品状态日志,产品图片,产品效果,产品特点简介" '指定数据来源列

    f.DataTable = DataTables("产品进销存")

    f.DataCols = "产品状态,商品代码,类别,系列,品名,规格,型号,包装率,计量系数,计量单位,价格_成本,价格_批发,价格_零售,价格_标价,安全库存量,产品状态日志,产品图片,产品效果,产品特点简介" '指定数据接收列

    f.ExcludeExistValue=True

    f.Fill() 

    DataTables("产品进销存").dataCols("商品代码").RaiseDataColChanged()

 

2、既然前面是用Filler填充,使用的是已经加载的数据,那么后面为啥用SQL语句,直接用DataTable的Compute计算就行了啊,当然如果有些参与统计的表没有加载,就只能用SQL语句了。

 

3、这个不影响性能, 但是看上去不舒服,就是没必要定义这么对变量,变量可以重用的:

 

Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.CommandText = "Select SUM(计量_数量) as 入库数量,SUM(无税金额) as 入库无税金额,SUM(含税金额) as 入库含税金额  From {入库明细} Where 商品代码 ='" & e.DataRow("商品代码") & "' And 入库日期 <= # " & Vars("enddate") & "#"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
    da("累计入库_数量")=dr("入库数量")
    da("累计入库_无税金额")=dr("入库无税金额")
    da("累计入库_含税金额")=dr("入库含税金额")
Next
cmd.CommandText = "Select SUM(计量_数量) as 出库数量,SUM(成本_无税金额) As 出库无税金额,SUM(成本_含税金额) As 出库含税金额  From {出库明细} Where 商品代码 ='" & e.DataRow("商品代码") & "' And 出库日期 <= # " & Vars("enddate") & "#"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
    da("累计出库_数量")=dr("出库数量")
    da("累计出库_无税金额")=dr("出库无税金额")
    da("累计出库_含税金额")=dr("出库含税金额")
Next
cmd.CommandText = "Select SUM(计量_数量) as 订单数量,SUM(无税金额) As 无税金额,SUM(含税金额) As 含税金额  From {销售订单明细} Where 商品代码 ='" & e.DataRow("商品代码") & "' And 销售订单日期 <= # " & Vars("enddate") & "#"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
    da("累计订单_数量")=dr("订单数量")
    da("累计订单_无税金额")=dr("无税金额")
    da("累计订单_含税金额")=dr("含税金额")
Next


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/6 11:13:00 [显示全部帖子]

因为使用SQL统计,性能不会有啥问题的。

 

另外这样的代码:

For Each dr As DataRow In dt.DataRows
    da("累计出库_数量")=dr("出库数量")
    da("累计出库_无税金额")=dr("出库无税金额")
    da("累计出库_含税金额")=dr("出库含税金额")
Next

 

应该改为:

 

If dt.DataRows.Count > 0 Then

    da("累计出库_数量") = dt.DataRows(0)("出库数量")
    da("累计出库_无税金额") = dt.DataRows(0)("出库无税金额")
    da("累计出库_含税金额") = dt.DataRows(0)("出库含税金额")
End If


 

[此贴子已经被作者于2010-12-6 11:13:38编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/6 12:03:00 [显示全部帖子]

不改,也没有影响


 回到顶部