Foxtable(狐表)用户栏目专家坐堂 → 从字符串“”到类型date的转换无效


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

主题:从字符串“”到类型date的转换无效

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


加好友 发短信
等级:婴狐 帖子:10 积分:138 威望:0 精华:0 注册:2016/10/5 14:38:00
从字符串“”到类型date的转换无效  发帖心情 Post By:2016/10/5 14:57:00 [显示全部帖子]

Dim Customer As WinForm.ComboBox = e.Form.Controls("客户代码")
Dim StartDate As WinForm.DateTimePicker = e.Form.Controls("开始日期")
Dim EndDate As WinForm.DateTimePicker = e.Form.Controls("结束日期")
Dim bd1 As New SQLGroupTableBuilder("统计表1","工序完工明细")
bd1.C
Dim dt1 As fxDataSource
bd1.Groups.AddDef("产品代码") 
bd1.Totals.AddExp("制壳重量","case when 工序 = '制壳' then 数量 * 组件数*单件重量 else 0 end") '对制壳重量进行统计
bd1.Totals.AddExp("浇注重量","case when 工序 = '浇注' then 数量 * 组件数*单件重量 else 0 end") '对浇注重量进行统计
If StartDate.Value <> "" And EndDate.Value <> "" Then
    If Customer.Value = "" Then
        bd1.Filter = "日期 >=  '" & StartDate.Value & "' And 日期 <= '" & EndDate.Value & "'"
    Else
        bd1.Filter = "SubString(产品代码,1,3) = '" & Customer.Value & "' And 日期 >= '" & StartDate.Value & "' And 日期 <= '" & EndDate.Value & "'"
    End If
Else
    If Customer.Value = "" Then
        bd1.Filter = ""
    Else
        bd1.Filter = "SubString(产品代码,1,3) = '" & Customer.Value & "'"
    End If
End If
dt1 = bd1.BuildDataSource()

运行时,出错提示“ 字符串“”到类型date的转换无效 ”。曾经尝试把datetimepicker控件改进textbox, 可以执行,但输入不方便,请问以上代码该做何调整。谢谢




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


加好友 发短信
等级:婴狐 帖子:10 积分:138 威望:0 精华:0 注册:2016/10/5 14:38:00
  发帖心情 Post By:2016/10/7 14:22:00 [显示全部帖子]

谢谢,问题解决,过程中还遇到一个问题,数据加载后统计是相当快的,但进行后台统计的时候,耗时相当长(几分钟),代码如下:
Dim StartDate As WinForm.DateTimePicker = e.Form.Controls("StartDate")
Dim EndDate As WinForm.DateTimePicker = e.Form.Controls("EndDate")
If StartDate.Value IsNot Nothing And EndDate.Value IsNot Nothing Then
    For Each dr As DataRow In DataTables("产品收发存").DataRows
        dr("期初_数量") = DataTables("产品入库明细").SQLCompute("Sum(数量)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '完工入库' and 日期 < '" & StartDate.Value & "'") + DataTables("产品入库明细").Compute("Sum(数量)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '外协入库' and 日期 < '" & StartDate.Value & "'") - DataTables("出库明细").Compute("Sum(实交数量)","[产品代码] = '" & dr("产品代码") & "' and 制单日期 < '" & StartDate.Value & "'")
        dr("期初_重量") = DataTables("产品入库明细").SQLCompute("Sum(数量*单件重量)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '完工入库' and 日期 < '" & StartDate.Value & "'") + DataTables("产品入库明细").Compute("Sum(数量*单件重量)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '外协入库' and 日期 < '" & StartDate.Value & "'")  - DataTables("出库明细").Compute("Sum(重量)","[产品代码] = '" & dr("产品代码") & "' and 制单日期 < '" & StartDate.Value & "'")
        dr("期初_金额") = DataTables("产品入库明细").SQLCompute("Sum(数量*单价)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '完工入库' and 日期 < '" & StartDate.Value & "'") + DataTables("产品入库明细").Compute("Sum(数量*单价)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '外协入库' and 日期 < '" & StartDate.Value & "'") - DataTables("出库明细").Compute("Sum(金额)","[产品代码] = '" & dr("产品代码") & "' and 制单日期 < '" & StartDate.Value & "'")
        dr("入库_数量") = DataTables("产品入库明细").SQLCompute("Sum(数量)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '完工入库' and 日期 >= '" & StartDate.Value & "' and 日期 <= '" & EndDate.Value & "'") + DataTables("产品入库明细").SQLCompute("Sum(数量)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '外协入库' and 日期 >= '" & StartDate.Value & "' and 日期 <= '" & EndDate.Value & "'")
        dr("入库_重量") = DataTables("产品入库明细").SQLCompute("Sum(数量*单件重量)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '完工入库' and 日期 >= '" & StartDate.Value & "' and 日期 <= '" & EndDate.Value & "'") + DataTables("产品入库明细").SQLCompute("Sum(数量*单件重量)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '外协入库' and 日期 >= '" & StartDate.Value & "' and 日期 <= '" & EndDate.Value & "'")
        dr("入库_金额") = DataTables("产品入库明细").SQLCompute("Sum(数量*单价)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '完工入库' and 日期 >= '" & StartDate.Value & "' and 日期 <= '" & EndDate.Value & "'") + DataTables("产品入库明细").SQLCompute("Sum(数量*单价)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '外协入库' and 日期 >= '" & StartDate.Value & "' and 日期 <= '" & EndDate.Value & "'")
        dr("出库_数量") = DataTables("出库明细").SQLCompute("Sum(实交数量)","[产品代码] = '" & dr("产品代码") & "' and 制单日期 >= '" & StartDate.Value & "' and 制单日期 <= '" & EndDate.Value & "'")
        dr("出库_重量") = DataTables("出库明细").SQLCompute("Sum(实交数量*单件重量)","[产品代码] = '" & dr("产品代码") & "' and 制单日期 >= '" & StartDate.Value & "' and 制单日期 <= '" & EndDate.Value & "'")
        dr("出库_金额") = DataTables("出库明细").SQLCompute("Sum(实交数量*单价)","[产品代码] = '" & dr("产品代码") & "' and 制单日期 >= '" & StartDate.Value & "' and 制单日期 <= '" & EndDate.Value & "'")
        dr("期末_数量") = dr("期初_数量") + dr("入库_数量") - dr("出库_数量")
        dr("期末_重量") = dr("期初_重量") + dr("入库_重量") - dr("出库_重量")
        dr("期末_金额") = dr("期初_金额") + dr("入库_金额") - dr("出库_金额")
    Next
Else
    For Each dr As DataRow In DataTables("产品收发存").DataRows
        dr("入库_数量") = DataTables("产品入库明细").SQLCompute("Sum(数量)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '完工入库'") + DataTables("产品入库明细").SQLCompute("Sum(数量)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '外协入库'")
        dr("入库_重量") = DataTables("产品入库明细").SQLCompute("Sum(数量*单件重量)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '完工入库'") + DataTables("产品入库明细").SQLCompute("Sum(数量*单件重量)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '外协入库'")
        dr("入库_金额") = DataTables("产品入库明细").SQLCompute("Sum(数量*单价)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '完工入库'") + DataTables("产品入库明细").SQLCompute("Sum(数量*单价)","[产品代码] = '" & dr("产品代码") & "' and 工序 = '外协入库'")
        dr("出库_数量") = DataTables("出库明细").SQLCompute("Sum(实交数量)","[产品代码] = '" & dr("产品代码") & "'")
        dr("出库_重量") = DataTables("出库明细").SQLCompute("Sum(实交数量*单件重量)","[产品代码] = '" & dr("产品代码") & "'")
        dr("出库_金额") = DataTables("出库明细").SQLCompute("Sum(实交数量*单价)","[产品代码] = '" & dr("产品代码") & "'")
        dr("期末_数量") = dr("入库_数量") - dr("出库_数量")
        dr("期末_重量") = dr("入库_重量") - dr("出库_重量")
        dr("期末_金额") = dr("入库_金额") - dr("出库_金额")
    Next
End If

请问,上述代码的问题出在哪里,需要怎么改进?

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


加好友 发短信
等级:婴狐 帖子:10 积分:138 威望:0 精华:0 注册:2016/10/5 14:38:00
  发帖心情 Post By:2016/10/7 17:39:00 [显示全部帖子]

好的,谢谢您啦

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


加好友 发短信
等级:婴狐 帖子:10 积分:138 威望:0 精华:0 注册:2016/10/5 14:38:00
  发帖心情 Post By:2016/10/9 18:16:00 [显示全部帖子]

我用以下代码生成一个统计表,但最终想得到年度的合格率对比分析,请问有什么办法吗?
Dim bd1 As New SQLCrossTableBuilder("统计表1","出库明细")
bd1.C
Dim dt1 As fxDataSource
bd1.VGroups.AddDef("制单日期",DateGroupEnum.Year,"年")
bd1.HGroups.AddDef("客户代码")
bd1.Totals.AddExp("发货重量","实交数量 * 单件重量")

dt1 = bd1.BuildDataSource()

Dim bd2 As New SQLCrossTableBuilder("统计表2","退废明细")
bd2.C
Dim dt2 As fxDataSource
bd2.VGroups.AddDef("日期",DateGroupEnum.Year,"年")
bd2.HGroups.AddDef("客户代码")
bd2.Totals.AddExp("退废重量","(IsNull([退废原因_可挽救],0) + IsNull([退废原因_黑皮],0) + IsNull([退废原因_缩松],0) + IsNull([退废原因_气孔],0) + IsNull([退废原因_夹渣],0) + IsNull([退废原因_变形],0)) * 单件重量")
dt2 = bd2.BuildDataSource()

dt1.Combine("客户代码",dt2,"客户代码")

Tables("质量年度分析_Table1").DataSource = dt1
想用得到的统计结果来生成下表,请问能达成吗?谢谢!
  客户代码  合格率     
      2015  2016 
         

图片点击可在新窗口打开查看
图片点击可在新窗口打开查看

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


加好友 发短信
等级:婴狐 帖子:10 积分:138 威望:0 精华:0 注册:2016/10/5 14:38:00
  发帖心情 Post By:2016/10/10 9:38:00 [显示全部帖子]

进销存用参考的方法没有问题,但这种要对统计结果进行再计算,新组成的列名称应该如何写,弄不明白,试了很多次都不行。我现在只有把统计的结果输出为Excel格式,再进行退废率的统计。

 


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


加好友 发短信
等级:婴狐 帖子:10 积分:138 威望:0 精华:0 注册:2016/10/5 14:38:00
  发帖心情 Post By:2016/10/10 10:33:00 [显示全部帖子]

图片点击可在新窗口打开查看

Dim bd1 As New SQLCrossTableBuilder("统计表1","出库明细")
bd1.C
Dim dt1 As fxDataSource
bd1.VGroups.AddDef("制单日期",DateGroupEnum.Year,"年")
bd1.HGroups.AddDef("客户代码")
bd1.Totals.AddExp("发货重量","实交数量 * 单件重量")

dt1 = bd1.BuildDataSource()

Dim bd2 As New SQLCrossTableBuilder("统计表2","退废明细")
bd2.C
Dim dt2 As fxDataSource
bd2.VGroups.AddDef("日期",DateGroupEnum.Year,"年")
bd2.HGroups.AddDef("客户代码")
bd2.Totals.AddExp("退废重量","(IsNull([退废原因_可挽救],0) + IsNull([退废原因_黑皮],0) + IsNull([退废原因_缩松],0) + IsNull([退废原因_气孔],0) + IsNull([退废原因_夹渣],0) + IsNull([退废原因_变形],0)) * 单件重量")
dt2 = bd2.BuildDataSource()

dt1.Combine("客户代码",dt2,"客户代码")

Tables("质量年度分析_Table1").DataSource = dt1
Tables("质量年度分析_Table1").DataSource = dt1 '将统计结果绑定到Table
With DataTables("质量年度分析_Table1").DataCols  '用表达式列计算库存数据
    .Add("退废率",Gettype(Single), "[退废重量] /[发货重量]")
End With

 
代码这样做后,得到上述的结果,代码错在哪里呢?

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


加好友 发短信
等级:婴狐 帖子:10 积分:138 威望:0 精华:0 注册:2016/10/5 14:38:00
  发帖心情 Post By:2016/10/10 13:54:00 [显示全部帖子]

麻烦你先看下,如果不行,我把相应的数据传给你。
图片点击可在新窗口打开查看此主题相关图片如下:20161010134717.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:婴狐 帖子:10 积分:138 威望:0 精华:0 注册:2016/10/5 14:38:00
  发帖心情 Post By:2016/10/10 17:24:00 [显示全部帖子]

Tables("质量年度分析_Table1").DataSource = dt1
With DataTables("质量年度分析_Table1").DataCols  '用表达式列计算库存数据
    .Add("退废率_2015",Gettype(Single), "[退废重量_1] /[发货重量_1]")
    .Add("退废率_2016",Gettype(Single), "[退废重量_2] /[发货重量_2]")
End With

按列名称输入后能计算出来,请问有没有方法写个表达式,把2015年 2016年表述出来,同时也把列名称表述出来,总不可能每一年来写一个代码,增加一年吧!
谢谢了

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


加好友 发短信
等级:婴狐 帖子:10 积分:138 威望:0 精华:0 注册:2016/10/5 14:38:00
  发帖心情 Post By:2016/10/10 19:57:00 [显示全部帖子]


 

 

[此贴子已经被作者于2016/10/12 9:59:15编辑过]

 回到顶部