Foxtable(狐表)用户栏目专家坐堂 → [求助]目录树中不能直接使用 SQLCommand 生产的表


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

主题:[求助]目录树中不能直接使用 SQLCommand 生产的表

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


加好友 发短信
等级:一尾狐 帖子:482 积分:4510 威望:0 精华:0 注册:2014/3/4 21:20:00
[求助]目录树中不能直接使用 SQLCommand 生产的表  发帖心情 Post By:2020/9/2 13:41:00 [只看该作者]

目录树里的事件代码,
为什么 dt 表生成以后。不能按 dt 条件过滤。
年,月 不能直接使用 dt 中的 别名 年,月。而必须使用原表中的字段。目录树事件中 必须把A15是否入库 = 'Y' 加入,不然没有Y的也过滤出来了。


Dim tab As Table = Tables("绩效统计_table4")
'1查询缴库成本表中数据,2并设置目录树的筛选条件,3查询表附加给窗口控件表,4按筛选条件调用查询内容------↓
Dim dt As DataTable
Dim cmd As New SQLCommand
Dim cbh As WinForm.CheckBox = e.Form.Controls("CheckBox2")
cmd.ConnectionName = con_name
cmd.CommandText = "Se lect A04部门代号,A05部门 车间, A15是否入库,YEAR(A03生产日期) as 年,MONTH(A03生产日期) as 月,A58简称 简称, A07品号,A08品名,A09货品规格, " & _
"SUM(isnull(A49不良,0)) 不良,SUM(isnull(A48产量,0)) 产量,SUM(isnull(A50良品,0)) 良品  from 生产日报 " & _
"where A15是否入库 = 'Y' " & _
"group by A04部门代号,A05部门,A15是否入库,YEAR(A03生产日期),MONTH(A03生产日期),A58简称,A07品号,A08品名,A09货品规格 "
dt = cmd.ExecuteReader()
Dim Filter As String
If e.node.Name = "所有数据" Then
    Filter = ""
Else
    Dim dr As DataRow = e.Node.DataRow '获取生成此节点的DataRow
    Select Case e.Node.Level
        Case 0
            Filter ="YEAR(A03生产日期)  = '" & dr("年") & "' AND A15是否入库 = 'Y'"
        Case 1
            Filter ="YEAR(A03生产日期)  = '" & dr("年") & "' And MONTH(A03生产日期) = '" & dr("月") & "' AND A15是否入库 = 'Y'"
    End Select
End If
tab.DataSource = dt
dt.loadFilter = Filter
dt.Load

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


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

SQL的语法就这样的,如果要使用表名,外层再套一个select

cmd.CommandText = "select * from (原来的sql语句) as a"

另外SQL语句里已经有【where A15是否入库 = 'Y'】这个添加,不可能还会查询出没有Y的数据

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


加好友 发短信
等级:一尾狐 帖子:482 积分:4510 威望:0 精华:0 注册:2014/3/4 21:20:00
  发帖心情 Post By:2020/9/2 14:09:00 [只看该作者]

之前已经测试了,外层我套了一个。还是和没套一样的效果
where A15是否入库 = 'Y'  确实没有在dt 中生效

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


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

表格导部分数据出来测试一下

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


加好友 发短信
等级:一尾狐 帖子:482 积分:4510 威望:0 精华:0 注册:2014/3/4 21:20:00
  发帖心情 Post By:2020/9/2 14:21:00 [只看该作者]

SQL 外套后,列名无效。

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


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


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

这个是点击目录树的代码吧。生成目录树的代码发上来看看

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


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

调换一下顺序
End If

dt.loadFilter = Filter
dt.Load
tab.DataSource = dt

另外套一层我测试没有问题

此主题相关图片如下:1.png
按此在新窗口浏览图片


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


加好友 发短信
等级:一尾狐 帖子:482 积分:4510 威望:0 精华:0 注册:2014/3/4 21:20:00
  发帖心情 Post By:2020/9/2 15:02:00 [只看该作者]

看  日报不良  那个页签下的。多谢。

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


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


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

换种方式,没有必要加载2次

Dim tab As Table = Tables("绩效统计_table4")
'1查询缴库成本表中数据,2并设置目录树的筛选条件,3查询表附加给窗口控件表,4按筛选条件调用查询内容------↓
Dim dt As DataTable
Dim cmd As New SQLCommand
Dim cbh As WinForm.CheckBox = e.Form.Controls("CheckBox2")
cmd.C
cmd.CommandText = "select * from ( Select A04部门代号,A05部门 as 车间, A15是否入库,YEAR(A03生产日期) as 年,MONTH(A03生产日期) as 月,A58简称 as 简称, A07品号,A08品名,A09货品规格, " & _
"SUM(iif(isnull(A49不良),0)) as 不良,SUM(iif(isnull(A48产量),0)) as 产量,SUM(iif(isnull(A50良品),0)) as 良品  from {生产日报} " & _
"where A15是否入库 = 'Y' " & _
"group by A04部门代号,A05部门,A15是否入库,YEAR(A03生产日期),MONTH(A03生产日期),A58简称,A07品号,A08品名,A09货品规格) as xx "


Dim Filter As String
If e.node.Name = "所有数据" Then
    Filter = ""
Else
    Dim dr As DataRow = e.Node.DataRow '获取生成此节点的DataRow
    Select Case e.Node.Level
        Case 0
            Filter =" where [年] = " & dr("年")    ' And A15是否入库 = 'Y'"
        Case 1
            Filter =" where [年]=" & dr("年") & " and [月]=" & dr("月") 
    End Select
End If
cmd.CommandText = cmd.CommandText & Filter 
dt = cmd.ExecuteReader()
tab.DataSource = dt

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


加好友 发短信
等级:一尾狐 帖子:482 积分:4510 威望:0 精华:0 注册:2014/3/4 21:20:00
  发帖心情 Post By:2020/9/3 9:17:00 [只看该作者]

蓝版这个方法好,图片点击可在新窗口打开查看图片点击可在新窗口打开查看
还有疑问。
1.这里问题的原理是什么:年,月 不能直接使用 dt 中的 别名 年,月。而必须使用原表中的字段。目录树事件中 必须把A15是否入库 = 'Y' 加入,不然没有Y的也过滤出来了。
2.SUM(iif(isnull(A48产量),0)) as 产量  这样子写为什么是没有值。换成 sum(A48产量) as 产量。就有值了。。
3.在MS SQL中求和中不能有NULL 值的。在ACCESS 好像是可以有NULL的吗?


 回到顶部
总数 13 1 2 下一页