以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]目录树中不能直接使用 SQLCommand 生产的表 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=154055) |
||||
-- 作者:绿火柴 -- 发布时间:2020/9/2 13:41:00 -- [求助]目录树中不能直接使用 SQLCommand 生产的表 目录树里的事件代码, 为什么 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
|
||||
-- 作者:有点蓝 -- 发布时间:2020/9/2 13:56:00 -- SQL的语法就这样的,如果要使用表名,外层再套一个select cmd.CommandText = "select * from (原来的sql语句) as a" 另外SQL语句里已经有【where A15是否入库 = \'Y\'】这个添加,不可能还会查询出没有Y的数据
|
||||
-- 作者:绿火柴 -- 发布时间:2020/9/2 14:09:00 -- 之前已经测试了,外层我套了一个。还是和没套一样的效果 where A15是否入库 = \'Y\' 确实没有在dt 中生效
|
||||
-- 作者:有点蓝 -- 发布时间:2020/9/2 14:15:00 -- 表格导部分数据出来测试一下 |
||||
-- 作者:绿火柴 -- 发布时间:2020/9/2 14:21:00 -- SQL 外套后,列名无效。 ![]() ![]() |
||||
-- 作者:有点蓝 -- 发布时间:2020/9/2 14:37:00 -- 这个是点击目录树的代码吧。生成目录树的代码发上来看看 |
||||
-- 作者:有点蓝 -- 发布时间:2020/9/2 14:50:00 -- 调换一下顺序 End If dt.loadFilter = Filter dt.Load tab.DataSource = dt |
||||
-- 作者:绿火柴 -- 发布时间:2020/9/2 15:02:00 -- 看 日报不良 那个页签下的。多谢。
|
||||
-- 作者:有点蓝 -- 发布时间: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 |
||||
-- 作者:绿火柴 -- 发布时间: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的吗? |