Foxtable(狐表)用户栏目专家坐堂 → 统计数据代码出错问题


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

主题:统计数据代码出错问题

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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
统计数据代码出错问题  发帖心情 Post By:2017/2/14 8:46:00 [只看该作者]

For Each dr As DataRow In DataTables("合同表").Select("")
    '第一季度应返数量
    Dim dt1 As DataTable=DataTables("批发表")
    Dim dt2 As DataTable=DataTables("入库表")
   
    Dim y As Integer = 2016 '指定年份
    Dim q As Integer = 1 '指定季度
    Dim dt3 As New Date(y, 3 * (q - 1) + 1, 1) '获取该季度的第一天
    Dim dt4 As New Date(y, 3 * q, Date.DaysInMonth(y,3 * q)) '获取该季度的最后一天
    Dim Filter As String
    Filter = "日期 >= #" & dt3 & "# And 日期 <= #" & dt4 & "#"
   
    Dim YFSL1 As Double = dt1.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "'","Filter")
    Dim YFSL2 As Double = dt1.Compute("sum(数量)", "返利编号 = '" & dr("财务编号") & "'","Filter")
    Dim YFSL3 As Double = dt2.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "'","Filter")
    Dim YFSL4 As Double = dt2.Compute("sum(数量)", "返利编号 = '" & dr("财务编号") & "'","Filter")
    dr("第一季度应返数量") = YFSL1 + YFSL2+ YFSL3+ YFSL4
   
    '第一季度应返金额
    Dim YFJE1 As Double = dt1.Compute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") & "'",Filter)
    Dim YFJE2 As Double = dt1.Compute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "'",Filter)
    Dim YFJE3 As Double = dt2.Compute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") & "'",Filter)
    Dim YFJE4 As Double = dt2.Compute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "'",Filter)
    dr("第一季度应返金额") = YFJE1 + YFJE2+ YFJE3+ YFJE4
   
Next

 

 

 

以上代码,我想统计第一季度数据,结果出错,提示如下:

 

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170214084351.png
图片点击可在新窗口打开查看

 

请老师帮忙改一下。


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


加好友 发短信
等级:超级版主 帖子:105470 积分:536335 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/2/14 9:03:00 [只看该作者]

Dim YFSL1 As Double = dt1.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and " & Filter)

其它Compute参考自己改改

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


加好友 发短信
等级:超级版主 帖子:105470 积分:536335 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/2/14 9:05:00 [只看该作者]

或者

Dim YFSL1 As Double = dt1.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(日期) in (1,2,3)" )

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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 10:07:00 [只看该作者]

For Each dr As DataRow In DataTables("合同表").Select("")
    Dim dt1 As DataTable=DataTables("批发表")
    Dim dt2 As DataTable=DataTables("入库表")
    Dim dt3 As DataTable=DataTables("合同表")
    Dim dt4 As DataTable=DataTables("收缴表")
    
    '第一季度应返数量
    Dim YFSL1 As Double = dt1.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL2 As Double = dt1.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL3 As Double = dt2.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL4 As Double = dt2.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    dr("第一季度应返数量") = YFSL1 + YFSL2+ YFSL3+ YFSL4
    
    '第一季度应返金额
    Dim YFJE1 As Double = dt1.SqlCompute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") &"' And month(单据日期) In (1,2,3)" )
    Dim YFJE2 As Double = dt1.SqlCompute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFJE3 As Double = dt2.SqlCompute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFJE4 As Double = dt2.SqlCompute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    dr("第一季度应返金额") = YFJE1 + YFJE2+ YFJE3+ YFJE4
    
           
Next

我这是统计第一季度数据,现在合同表里有录入时间一列,我想重新改代码,加入,录入时间在第一季度的合同才统计以上数据,怎么改,请有点蓝老师帮忙。

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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 10:25:00 [只看该作者]

请有点蓝老师帮忙呀。

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


加好友 发短信
等级:超级版主 帖子:105470 积分:536335 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/2/14 10:44:00 [只看该作者]

month(录入时间) in (1,2,3)

SqlCompute的效率也不高,数据多的话可能会很慢。上传例子看看,能不能有其他方法统计

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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 10:48:00 [只看该作者]

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

 

麻烦有点蓝老师了,正常我的所有表都是外部数据表,而且批发及和入库表都有40万条数据。


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/14 11:02:00 [只看该作者]

参考代码

 

For Each dr As DataRow In DataTables("合同表").Select("")
    Dim y As Integer = cdate(dr("录入时间")).year '指定年份
    Dim q As Integer = Math.Ceiling(cdate(dr("录入时间")).Month / 3) '指定季度
   
    If q = 1 Then
        Dim dt1 As DataTable=DataTables("批发表")
        Dim dt2 As DataTable=DataTables("入库表")
       
        Dim dt3 As New Date(y, 3 * (q - 1) + 1, 1) '获取该季度的第一天
        Dim dt4 As Date = dt3.AddMonths(1)
        Dim Filter As String
        Filter = "单据日期 >= #" & dt3 & "# And 单据日期 < #" & dt4 & "#"
       
        Dim YFSL1 As Double = dt1.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and " & Filter)
        Dim YFSL2 As Double = dt1.Compute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and " & Filter)
        Dim YFSL3 As Double = dt2.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and " & Filter)
        Dim YFSL4 As Double = dt2.Compute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and " & Filter)
        dr("第一季度应返数量") = YFSL1 + YFSL2+ YFSL3+ YFSL4
    End If
Next

 


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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 14:20:00 [只看该作者]

For Each dr As DataRow In DataTables("合同表").Select("")
    Dim dt1 As DataTable=DataTables("批发表")
    Dim dt2 As DataTable=DataTables("入库表")
    Dim y As Integer = cdate(dr("录入时间")).year '指定年份
    Dim q As Integer = Math.Ceiling(cdate(dr("录入时间")).Month / 3) '指定季度
    
    '第一季度应返数量
    Dim YFSL1 As Double = dt1.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL2 As Double = dt1.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL3 As Double = dt2.SqlCompute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFSL4 As Double = dt2.SqlCompute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    dr("第一季度应返数量") = YFSL1 + YFSL2+ YFSL3+ YFSL4
    
    '第一季度应返金额
    Dim YFJE1 As Double = dt1.SqlCompute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") &"' And month(单据日期) In (1,2,3)" )
    Dim YFJE2 As Double = dt1.SqlCompute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFJE3 As Double = dt2.SqlCompute("sum(返利应返金额)", "返利编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    Dim YFJE4 As Double = dt2.SqlCompute("sum(高开应返金额)", "高开编号 = '" & dr("财务编号") & "' and month(单据日期) in (1,2,3)" )
    dr("第一季度应返金额") = YFJE1 + YFJE2+ YFJE3+ YFJE4
    
    '以下代码是计算第一季度计提数量和金额
    If q = 1 Then
        Dim dt3 As New Date(y, 3 * (q - 1) + 1, 1) '获取该季度的第一天
        Dim dt4 As Date = dt3.AddMonths(1)
        Dim Filter As String
        Filter = "单据日期 >= #" & dt3 & "# And 单据日期 < #" & dt4 & "#"
        
        Dim JTSL1 As Double = dt1.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and " & Filter)
        Dim JTSL2 As Double = dt1.Compute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and " & Filter)
        Dim JTSL3 As Double = dt2.Compute("sum(数量)", "高开编号 = '" & dr("财务编号") & "' and " & Filter)
        Dim JTSL4 As Double = dt2.Compute("sum(数量)", "返利编号 = '" & dr("财务编号") & "' and " & Filter)
        dr("第一季度计提数量") = JTSL1 + JTSL2+ JTSL3+ JTSL4
    End If
Next


有点色老师,我的代码如下,但第一季度计提数量全部是零。我分析可能是Filter的取值范围的问题,我想问一下:
Filter = "单据日期 >= #" & dt3 & "# And 单据日期 < #" & dt4 & "#"      
这句的取值范围是第一季度吗,也就是说,日期为1月1日至3月31日吗?



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


加好友 发短信
等级:二尾狐 帖子:503 积分:4002 威望:0 精华:0 注册:2016/6/7 7:45:00
  发帖心情 Post By:2017/2/14 14:29:00 [只看该作者]

找出问题了,是录入的时间为2016年,而单据日期为2017年,所以没有统计数量。

 回到顶部
总数 40 1 2 3 4 下一页