Foxtable(狐表)用户栏目专家坐堂 → [求助]代码报错,生成的统计表也不对


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

主题:[求助]代码报错,生成的统计表也不对

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


加好友 发短信
等级:二尾狐 帖子:523 积分:4379 威望:0 精华:0 注册:2014/11/26 15:23:00
[求助]代码报错,生成的统计表也不对  发帖心情 Post By:2018/12/14 11:06:00 [只看该作者]

甜版好!

我创建了一张表,然后给这张表里面填充数据,结果数据填充的不对,麻烦看看,谢谢

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


我做到了一个函数里面,总是报错

代码:

'生产计划金额累计
'取出
Dim dr1 As DataRow
Dim jhje As Double
dr1 = DataTables("计划表").Find("[部门] = 'ORG1011' and [年份] = '2018' and [月份] = '11'")
If dr1 IsNot Nothing Then
    jhje = dr1("计划金额")
Else
    jhje = 1
End If

Dim jelist As New List(Of String)
'返回指定月份的天数
Dim tianshu As Integer = Date.DaysInMonth(Year(Date.Today),11)
Dim pgje As Double = jhje / tianshu



''''''''''''''''''''''''''''
'生成临时表
Dim dtb As New DataTableBuilder("总统计表")
dtb.AddDef("日期", Gettype(String), 32)
dtb.AddDef("计划金额累计", Gettype(String), 32)
dtb.AddDef("实际金额累计", Gettype(String), 32)
dtb.Build()

'添加数据
Dim jj As Integer
Dim zhrq As String
Dim t As Table = Tables("表B")

For jj = 1 To tianshu
    Dim dr3 As DataRow = DataTables("总统计表").AddNew()
    zhrq = Cstr(Year(Date.Today)) + "-11-" + Cstr(jj)
    dr3("日期") = zhrq
    dr3("计划金额累计") = Cstr(pgje*jj)
    For Each r As Row In t.Rows
        If CDate(r("日期")) = CDate(zhrq) Then
            dr3("实际金额累计") = r("实际金额累计")
        Else
            dr3("实际金额累计") = Cstr(pgje*jj)    
        End If
    Next 
Next
DataTables("总统计表").Save()


''''''''''''''''''''''''''''
'make json

Dim Arys1 As List(Of String())
Dim Arys2 As List(Of String())

Dim tjb As Table = Tables("总统计表")
Arys1 = tjb.DataTable.GetValues("日期|计划金额累计","","日期")
Arys1 = tjb.DataTable.GetValues("日期|实际金额累计","","日期")

Dim salesdata As New JObject
Dim xmlb As New JArray
Dim i As Integer
salesdata("xsjh") = xmlb

For Each Ary1 As String() In Arys1
    xmlb.Add(New Jobject)
    xmlb(i)("month") = Ary1(0).ToString
    xmlb(i)("num") = Ary1(1).ToString
    i += 1
Next

Dim salesdata2 As New JObject
Dim xmlb2 As New JArray
Dim j As Integer
j = 0
salesdata("sjxs") = xmlb2

For Each Ary2 As String() In Arys2
    xmlb2.Add(New Jobject)
    xmlb2(j)("month") = Ary2(0).ToString
    xmlb2(j)("num") = Ary2(1).ToString
    j += 1
Next

FileSys.WriteAllText("d:\data1.json",salesdata.ToString,False,Encoding.UTF8)
[此贴子已经被作者于2018/12/14 11:06:57编辑过]

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


加好友 发短信
等级:二尾狐 帖子:523 积分:4379 威望:0 精华:0 注册:2014/11/26 15:23:00
  发帖心情 Post By:2018/12/14 11:10:00 [只看该作者]

计划金额累计 列的数据是取月份总数据 除以 当月天数 然后每天累计生成的
实际金额累计 列的数据是从数据库中取出,我这里放在表B里面的

现在要求就是每天都要有数据,如果实际金额累计没有数据,比如11-05没有数据,就要填充11-04的数据

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


加好友 发短信
等级:二尾狐 帖子:523 积分:4379 威望:0 精华:0 注册:2014/11/26 15:23:00
  发帖心情 Post By:2018/12/14 12:24:00 [只看该作者]

Dim tjb As Table = Tables("总统计表")
Arys1 = tjb.DataTable.GetValues("日期|计划金额累计","","日期")
Arys2 = tjb.DataTable.GetValues("日期|实际金额累计","","日期")
报错问题找到 ,是 这里arys1重复了,但是 实际金额累计不对

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/14 12:43:00 [只看该作者]

填入数据,参考下面,如果不正确,请说明哪里不正确。

 

'生产计划金额累计
'取出
Dim dr1 As DataRow
Dim jhje As Double
dr1 = DataTables("计划表").Find("[部门] = 'ORG1011' and [年份] = '2018' and [月份] = '11'")
If dr1 IsNot Nothing Then
    jhje = dr1("计划金额")
Else
    jhje = 1
End If

Dim jelist As New List(Of String)
'返回指定月份的天数
Dim tianshu As Integer = Date.DaysInMonth(Year(Date.Today),11)
Dim pgje As Double = jhje / tianshu

 

''''''''''''''''''''''''''''
'生成临时表
Dim dtb As New DataTableBuilder("总统计表")
dtb.AddDef("日期", Gettype(String), 32)
dtb.AddDef("计划金额累计", Gettype(String), 32)
dtb.AddDef("实际金额累计", Gettype(String), 32)
dtb.Build()

'添加数据
Dim jj As Integer
Dim zhrq As String
Dim t As Table = Tables("表B")

For jj = 1 To tianshu
    Dim dr3 As DataRow = DataTables("总统计表").AddNew()
    zhrq = Cstr(Year(Date.Today)) + "-11-" + Cstr(jj)
    dr3("日期") = zhrq
    dr3("计划金额累计") = Cstr(pgje*jj)
    For Each r As Row In t.Rows
        If CDate(r("日期")) = CDate(zhrq) Then
            dr3("实际金额累计") = r("实际金额累计")

exit for
        End If
    Next
    If dr3("实际金额累计") = Nothing Then
        dr3("实际金额累计") = Cstr(pgje*jj)
    End If
Next
DataTables("总统计表").Save()


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


加好友 发短信
等级:二尾狐 帖子:523 积分:4379 威望:0 精华:0 注册:2014/11/26 15:23:00
  发帖心情 Post By:2018/12/14 13:31:00 [只看该作者]

老大!
我改成这样:

'添加数据
Dim jj As Integer
Dim zhrq As String
Dim t As Table = Tables("表B")
'定义一个变量,用于存储前一天的实际金额累计值
Dim bfsjje As Double

For jj = 1 To tianshu
    Dim dr3 As DataRow = DataTables("总统计表").AddNew()
    zhrq = Cstr(Year(Date.Today)) + "-11-" + Cstr(jj)
    dr3("日期") = zhrq
    dr3("计划金额累计") = Cstr(pgje*jj)
    For Each r As Row In t.Rows
        If Datediff("d",CDate(r("日期")),CDate(zhrq)) = 0 Then
            dr3("实际金额累计") = r("实际金额累计")
            bfsjje = r("实际金额累计")
            Exit For
        Else
            dr3("实际金额累计") = bfsjje    
        End If
    Next 
Next
DataTables("总统计表").Save()

这样,生成的总统计表正确了,但是我是用了字符型存储日期列的,因此排序出了问题,在生成临时表的时候,能够用日期列存储进去吗?谢谢

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


加好友 发短信
等级:二尾狐 帖子:523 积分:4379 威望:0 精华:0 注册:2014/11/26 15:23:00
  发帖心情 Post By:2018/12/14 13:35:00 [只看该作者]

我改成dtb.AddDef("日期", Gettype(Date)) 可以了
基础不牢靠!

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/14 13:41:00 [只看该作者]

以下是引用xndd在2018/12/14 13:31:00的发言:
 

这样,生成的总统计表正确了,但是我是用了字符型存储日期列的,因此排序出了问题,在生成临时表的时候,能够用日期列存储进去吗?谢谢

 

可以的。生成的时候,直接生成日期列即可。


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


加好友 发短信
等级:二尾狐 帖子:523 积分:4379 威望:0 精华:0 注册:2014/11/26 15:23:00
  发帖心情 Post By:2018/12/14 13:50:00 [只看该作者]

问题是,如果是日期列,会带有后面的00:00:00啊,不要时分秒怎么办?
{
  "xsjh": [
    {
      "month": "2018-11-01 00:00:00",
      "num": "396664.666666667"
    },
    {
      "month": "2018-11-02 00:00:00",
      "num": "793329.333333333"
    },

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


加好友 发短信
等级:二尾狐 帖子:523 积分:4379 威望:0 精华:0 注册:2014/11/26 15:23:00
  发帖心情 Post By:2018/12/14 14:29:00 [只看该作者]

我在获取时,用字符串截断处理了,但是数值不知道怎么处理

    xmlb(i)("month") = Ary1(0).ToString().SubString(0,10)

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/14 14:52:00 [只看该作者]

以下是引用xndd在2018/12/14 14:29:00的发言:
我在获取时,用字符串截断处理了,但是数值不知道怎么处理

    xmlb(i)("month") = Ary1(0).ToString().SubString(0,10)

 

参考

 

    xmlb(i)("month") = Ary1(0).Split(" ")(0)
    xmlb(i)("num") = format(val(Ary1(1)), "0.00")

 回到顶部