Foxtable(狐表)用户栏目专家坐堂 → 这段代码运行有问题,怎么改动?


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

主题:这段代码运行有问题,怎么改动?

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


加好友 发短信
等级:二尾狐 帖子:562 积分:4521 威望:0 精华:0 注册:2016/4/17 20:05:00
这段代码运行有问题,怎么改动?  发帖心情 Post By:2019/8/27 16:35:00 [只看该作者]

 这段代码红色部分运行有问题,如何修改?
Dim dr As DataRow = e.DataRow '定义变化的行,dr为变量.
Select Case e.DataCol.Name
Case "沙月度计划","本期沙月累计"
        If  dr.IsNull("沙月度计划")  OrElse dr("沙月度计划") = 0 Then
            dr("沙月度计划兑现") = 0
        Else
            dr("沙月度计划兑现") = dr("本期沙月累计")/dr("沙月度计划")
        End If
    Case "石月度计划","本期石月累计"
        If  dr.IsNull("石月度计划")  OrElse dr("石月度计划") = 0  Then
            dr("石月度计划兑现") = 0
        Else
            dr("石月度计划兑现") = dr("本期石月累计")/dr("石月度计划")
        End If
    Case "沙月度计划","石月度计划"
            dr("月度综合计划") = dr("沙月度计划")+dr("石月度计划")----综合计划显示不出来

    Case "月度综合计划","本期综合月累计"
        If dr.IsNull("月度综合计划")  OrElse dr("月度综合计划") = 0  Then
            dr("综合月度计划兑现") = 0
        Else
            dr("综合月度计划兑现") = dr("本期综合月累计")/dr("月度综合计划")----月度计划兑现没有

       End If
   End Select

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


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/27 16:57:00 [只看该作者]

Dim dr As DataRow = e.DataRow '定义变化的行,dr为变量.
Select Case e.DataCol.Name
Case "沙月度计划","本期沙月累计"
        If  dr.IsNull("沙月度计划")  OrElse dr("沙月度计划") = 0 Then
            dr("沙月度计划兑现") = 0
        Else
            dr("沙月度计划兑现") = dr("本期沙月累计")/dr("沙月度计划")
        End If
    Case "石月度计划","本期石月累计"
        If  dr.IsNull("石月度计划")  OrElse dr("石月度计划") = 0  Then
            dr("石月度计划兑现") = 0
        Else
            dr("石月度计划兑现") = dr("本期石月累计")/dr("石月度计划")
        End If
  End Select

Select Case e.DataCol.Name
    Case "沙月度计划","石月度计划"
            dr("月度综合计划") = dr("沙月度计划")+dr("石月度计划")----综合计划显示不出来

    Case "月度综合计划","本期综合月累计"
        If dr.IsNull("月度综合计划")  OrElse dr("月度综合计划") = 0  Then
            dr("综合月度计划兑现") = 0
        Else
            dr("综合月度计划兑现") = dr("本期综合月累计")/dr("月度综合计划")----月度计划兑现没有

       End If
   End Select

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


加好友 发短信
等级:二尾狐 帖子:562 积分:4521 威望:0 精华:0 注册:2016/4/17 20:05:00
这段代码运行有问题,求助改动  发帖心情 Post By:2019/8/27 17:45:00 [只看该作者]

 以下代码运行中,发现一个问题,并不是每个建筑材料每天都有销量,比如说沙、石子,新增行时如果填了日销量,月累计、年累计可计算出来,如果没填,就出不来,帮忙看一下,怎么样在没填的时候也计算月累计、年累计,代码是放在DataColChanged属性里的,另外,这段代码可否更精简一点?

Dim cnt1 As Double '定义cnt(...)为双精度小数类型
Dim cnt2 As Double
Dim cnt3 As Double
Dim cnt4 As Double
Dim cnt5 As Double
Dim cnt6 As Double
Dim cnt7 As Double
Dim cnt8 As Double
Dim cnt9 As Double
Dim cnt1"0" As Double
Dim cnt11 As Double
Dim cnt12 As Double
Dim y As Integer = Date.Today.Year '取Y为今年
Dim m As Integer = Date.Today.Month '取M为当月
Dim d As Integer = Date.Today.Day '取D为当日
Dim dt1 As New Date(y, m, 1)  '获取本月第一天
Dim dt2 As New Date(y, m, d) '获取本月第几天
Dim dt3 As New Date(y, 1, 1)  '取本年度第一天,如2"0"19年1月1日,此为变量,根据年份自动形成.
Select Case e.DataCol.Name
Case "本期沙日销量"
        If e.DataRow.IsNull("本期沙日销量") Then
            e.DataRow("本期沙日销量")  = "0"
        Else
 cnt1 = DataTables("日报").SQLCompute("sum(本期沙日销量)", "报表日期 >= '"& dt1 & "' And 报表日期<='" & dt2 & "' ")
cnt2 = DataTables("日报").SQLCompute("sum(本期沙日销量)", "报表日期 >= '" & dt3 & "' And 报表日期<='" & dt2 & "' ")
            e.DataRow("本期沙月累计") = cnt1+ e.DataRow("本期沙日销量")
            e.DataRow("本期沙年累计") = cnt2+ e.DataRow("本期沙日销量")
        End If
    Case "本期石子日销量"
        If e.DataRow.IsNull("本期石子日销量") Then
            e.DataRow("本期石子日销量")  = "0"
        Else
cnt3 = DataTables("日报").SQLCompute("sum(本期石子日销量)", "报表日期 >= '" & dt1 & "' And 报表日期<='" & dt2 & "'")
cnt4 = DataTables("日报").SQLCompute("sum(本期石子日销量)", "报表日期 >= '" & dt3 & "' And 报表日期<='" & dt2 & "' ")
            e.DataRow("本期石子月累计") = cnt3+ e.DataRow("本期石子日销量")
            e.DataRow("本期石子年累计") = cnt4+ e.DataRow("本期石子日销量")
        End If
    Case "本期鹅卵石日销量"
        If e.DataRow.IsNull("本期鹅卵石日销量") Then
            e.DataRow("本期鹅卵石日销量")  = "0"
        Else
cnt5 = DataTables("日报").SQLCompute("sum(本期鹅卵石日销量)", "报表日期 >= '" & dt1 & "' And 报表日期<='" & dt2 & "'")
cnt6 = DataTables("日报").SQLCompute("sum(本期鹅卵石日销量)", "报表日期 >= '" & dt3 & "' And 报表日期<='" & dt2 & "' ")
            e.DataRow("本期鹅卵石月累计") = cnt5+ e.DataRow("本期鹅卵石日销量")
            e.DataRow("本期鹅卵石年累计") = cnt6+ e.DataRow("本期鹅卵石日销量")
        End If
    Case "同期沙日销量"
        If e.DataRow.IsNull("同期沙日销量") Then
            e.DataRow("同期沙日销量")  = "0"
        Else
 cnt7 = DataTables("日报").SQLCompute("sum(同期沙日销量)", "报表日期 >= '" & dt1 & "' And 报表日期<='" & dt2 & "'")
 cnt8 = DataTables("日报").SQLCompute("sum(同期沙日销量)", "报表日期 >= '" & dt3 & "' And 报表日期<='" & dt2 & "' ")
            e.DataRow("同期沙月累计") = cnt7+ e.DataRow("同期沙日销量")
            e.DataRow("同期沙年累计") = cnt8+ e.DataRow("同期沙日销量")
        End If
    Case "同期石子日销量"
        If e.DataRow.IsNull("同期石子日销量") Then
            e.DataRow("同期石子日销量")  = "0"
        Else
cnt9 = DataTables("日报").SQLCompute("sum(同期石子日销量)", "报表日期 >= '" & dt1 & "' And 报表日期<='" & dt2 & "'")
cnt1"0" = DataTables("日报").SQLCompute("sum(同期石子日销量)", "报表日期 >= '" & dt3 & "' And 报表日期<='" & dt2 & "' ")
            e.DataRow("同期石子月累计") = cnt9+ e.DataRow("同期石子日销量")
            e.DataRow("同期石子年累计") = cnt1"0"+ e.DataRow("同期石子日销量")
        End If
    Case "同期鹅卵石日销量"
        If e.DataRow.IsNull("同期鹅卵石日销量") Then
            e.DataRow("同期鹅卵石日销量")  = "0"
        Else
cnt11 = DataTables("日报").SQLCompute("sum(同期鹅卵石日销量)", "报表日期 >= '" & dt1 & "' And 报表日期<='" & dt2 & "'")
cnt12 = DataTables("日报").SQLCompute("sum(同期鹅卵石日销量)", "报表日期 >= '" & dt3 & "' And 报表日期<='" & dt2 & "' ")
            e.DataRow("同期鹅卵石月累计") = cnt11+ e.DataRow("同期鹅卵石日销量")
            e.DataRow("同期鹅卵石年累计") = cnt12+ e.DataRow("同期鹅卵石日销量")
        End If
End Select

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/27 20:05:00 [只看该作者]

Case "本期沙日销量"
    e.DataRow("本期沙月累计") = e.DataRow("本期沙日销量") + DataTables("日报").SQLCompute("sum(本期沙日销量)", "报表日期 >= '"& dt1 & "' And 报表日期<='" & dt2 & "' ")
    e.DataRow("本期沙年累计") = e.DataRow("本期沙日销量") + DataTables("日报").SQLCompute("sum(本期沙日销量)", "报表日期 >= '" & dt3 & "' And 报表日期<='" & dt2 & "' ")



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


加好友 发短信
等级:二尾狐 帖子:562 积分:4521 威望:0 精华:0 注册:2016/4/17 20:05:00
  发帖心情 Post By:2019/8/27 21:01:00 [只看该作者]

 代码是简洁了不少,可还是实现不了,新增行在日销量还没录入数据或者没数据时,月累计和年累计等于上一行,我增加了四个辅助列(csn,tsn,csl,tsl),然后在

DataRowAdding属性里加入以下代码:

e.DataRow("csn") = 1
e.DataRow("tsn") = 1
e.DataRow("tsl") = 1
e.DataRow("csl") = 1,然后再把前面的代码修改为如下:
Select Case e.DataCol.Name
    Case "本期沙日销量","csn" --加一个列变量
        e.DataRow("本期沙月累计") = e.DataRow("本期沙日销量") + DataTables("日报").SQLCompute("sum(本期沙日销量)", "报表日期 >= '"& dt1 & "' And 报表日期<='" & dt2 & "' ")
        e.DataRow("本期沙年累计") = e.DataRow("本期沙日销量") + DataTables("日报").SQLCompute("sum(本期沙日销量)", "报表日期 >= '" & dt3 & "' And 报表日期<='" & dt2 & "' ")
    Case "本期石子日销量","csl"--加一个列变量
        e.DataRow("本期石子月累计") = e.DataRow("本期石子日销量") + DataTables("日报").SQLCompute("sum(本期石子日销量)", "报表日期 >= '"& dt1 & "' And 报表日期<='" & dt2 & "' ")
        e.DataRow("本期石子年累计") = e.DataRow("本期石子日销量") + DataTables("日报").SQLCompute("sum(本期石子日销量)", "报表日期 >= '" & dt3 & "' And 报表日期<='" & dt2 & "' ")
    Case "同期沙日销量","tsn"--加一个列变量
        e.DataRow("同期沙月累计") = e.DataRow("同期沙日销量") + DataTables("日报").SQLCompute("sum(同期沙日销量)", "报表日期 >= '"& dt1 & "' And 报表日期<='" & dt2 & "' ")
        e.DataRow("同期沙年累计") = e.DataRow("同期沙日销量") + DataTables("日报").SQLCompute("sum(同期沙日销量)", "报表日期 >= '" & dt3 & "' And 报表日期<='" & dt2 & "' ")
    Case "同期石子日销量","tsl"--加一个列变量
        e.DataRow("同期石子月累计") = e.DataRow("同期石子日销量") + DataTables("日报").SQLCompute("sum(同期石子日销量)", "报表日期 >= '"& dt1 & "' And 报表日期<='" & dt2 & "' ")
        e.DataRow("同期石子年累计") = e.DataRow("同期石子日销量") + DataTables("日报").SQLCompute("sum(同期石子日销量)", "报表日期 >= '" & dt3 & "' And 报表日期<='" & dt2 & "' ")
end select
但这种用法,如果大数据会不会运算很慢。有没办法让我模拟以下,我想在数据库中以100万行作为测试目标,试试运行结果如何?问题就是怎么样一次性插入100万的数据?

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


加好友 发短信
等级:二尾狐 帖子:562 积分:4521 威望:0 精华:0 注册:2016/4/17 20:05:00
  发帖心情 Post By:2019/8/27 21:03:00 [只看该作者]

 噢,数据库是sql server,然后最好能有一个sql语句,让我一次性插入100万行。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/27 21:42:00 [只看该作者]

应该数据没有保存吧,SQLCompute只能统计已经保存的数据。具体上传实例说明。



 回到顶部