以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]日期统计问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=55360)

--  作者:man9997
--  发布时间:2014/8/15 1:13:00
--  [求助]日期统计问题
老师,我今天在学习日期统计。
看了筛选树显示统计数据  但还不能举一反三

有个案例老师能不能给知道一下

我有个信息录入表,在表里录入了,然后在窗口建立了一个TreeView(目录树)有点像下面的图

不过我的统计方式的:例如:开票员张三2013年共开了多少次 小面是按月分 例如1月下面  1月1日开了三次票 1月2日开了4次票,一直到12与31日
                                    
                                    开票员王五开了多少次
下面依次类推


[此贴子已经被作者于2014-8-18 14:25:33编辑过]

--  作者:Bin
--  发布时间:2014/8/15 8:32:00
--  
你的表,没看懂要怎么生成目录树,怎么统计也没看懂.
--  作者:有点甜
--  发布时间:2014/8/15 9:13:00
--  

 也没看懂。

 

 第一级是姓名,第二级是年,第三级是月,第四级是日?


--  作者:man9997
--  发布时间:2014/8/15 9:22:00
--  
统计形式像:


例如:李三   
             2013年(108张)
                1月(21张)
                    1月1日(3张)
                    1月2日(0张)
                    1月3日(1张)
                    1月4日(5张)
                    ......
                    1月31日(6张)
                 2月(80张)
                    2月1日(3张)
                    2月2日(0张)
                    2月3日(1张)
                    2月4日(5张)
                    ......
                    2月28日(6张)
                 3月(1000张)
                       3月1日(2张)

                  .........
                 12月(51222张)
一直到开的最后1天

         王五重复以上的形式


[此贴子已经被作者于2014-8-15 9:23:04编辑过]

--  作者:有点甜
--  发布时间:2014/8/15 10:08:00
--  

 。。。。。。代码

 

Dim cmd As new SQLCommand
cmd.CommandText = "Select 开票人信息_姓名 As 姓名,开票日期1_日期 As 日期, year(开票日期1_日期) As 年, month(开票日期1_日期) As 月, day(开票日期1_日期) As 日, 1 as 开单 from {信息录入表} where 开票人信息_姓名 Is not null " _
& " union Select 开票人信息_姓名,开票日期2_日期, year(开票日期2_日期), month(开票日期2_日期) As 月, day(开票日期2_日期), 1 from {信息录入表} where 开票人信息_姓名 Is not null" _
& " union Select 开票人信息_姓名,开票日期3_日期, year(开票日期3_日期), month(开票日期3_日期) As 月, day(开票日期3_日期), 1 from {信息录入表} where 开票人信息_姓名 Is not null"
Dim dt As DataTable = cmd.ExecuteReader

For Each ary As String() In dt.GetValues("姓名|年")
    For i As Integer = 1 To 12
        For j As Integer = 1 To Date.DaysInMonth(ary(1),i)
            Dim d As Date = new Date(ary(1), i, j)
            Dim fdr As DataRow = dt.Find("姓名 = \'" & ary(0) & "\' and 日期 = #" & d & "#")
            If fdr Is Nothing Then
                fdr = dt.AddNew
                fdr("姓名") = ary(0)
                fdr("日期") = d
                fdr("年") = ary(1)
                fdr("月") = i
                fdr("日") = j
                fdr("开单") = 0
            End If
        Next
    Next
Next

Dim tv As WinForm.TreeView = e.Form.Controls("TreeView1")
tv.BuildTree(dt, "姓名|年|月|日")
For Each nd As WinForm.TreeNode In tv.AllNodes
    Select Case nd.Level
        Case 0
            nd.Text = nd.Text & "(" & dt.Compute("count(姓名)", "姓名 = \'" & nd.DataRow("姓名") & "\' and 开单 = 1") & "张)"
        Case 1
            nd.Text = nd.Text & "年(" & dt.Compute("count(姓名)", "姓名 = \'" & nd.DataRow("姓名") & "\' and 开单 = 1 and 年 = \'" & nd.DataRow("年") & "\'") & "张)"
        Case 2
            nd.Text = nd.Text & "月(" & dt.Compute("count(姓名)", "姓名 = \'" & nd.DataRow("姓名") & "\' and 开单 = 1 and 年 = \'" & nd.DataRow("年") & "\' and 月 = \'" & nd.DataRow("月") & "\'") & "张)"
        Case 3
            nd.Text = nd.DataRow("月") & "月" & nd.Text & "日(" & dt.Compute("count(姓名)", "姓名 = \'" & nd.DataRow("姓名") & "\' and 开单 = 1 and 年 = \'" & nd.DataRow("年") & "\' and 月 = \'" & nd.DataRow("月") & "\' and 日 = \'" & nd.DataRow("日") & "\'") & "张)"
    End Select
Next


--  作者:man9997
--  发布时间:2014/8/15 11:41:00
--  
老师, 谢谢你提供的代码。太感谢了。我安装你提供的代码做了修改,当系统提示
.NET Framework 版本:2.0.50727.5483
Foxtable 版本:2014.8.4.1
错误所在事件:
详细错误信息:
SELECT 子句中包含一个保留字、拼写错误或丢失的参数,或标点符号不正确。




代码如下:


Dim cmd As new SQLCommand
cmd.CommandText = "Select Masseur_Name As Name,Date①_Date As Date, year(Date①_Date) As 年, month(Date①_Date) As 月, day(Date①_Date) As 日, 1 as 开单 from {Information} where Masseur_Name Is not null " _
& " union Select Masseur_Name,Date②_Date, year(Date②_Date), month(Date②_Date) As 月, day(Date②_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date③_Date, year(Date③_Date), month(Date③_Date) As 月, day(Date③_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date④_Date, year(Date④_Date), month(Date④_Date) As 月, day(Date④_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date⑤_Date, year(Date⑤_Date), month(Date⑤_Date) As 月, day(Date⑤_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date⑥_Date, year(Date⑥_Date), month(Date⑥_Date) As 月, day(Date⑥_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date⑦_Date, year(Date⑦_Date), month(Date⑦_Date) As 月, day(Date⑦_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date⑧_Date, year(Date⑧_Date), month(Date⑧_Date) As 月, day(Date⑧_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date⑨_Date, year(Date⑨_Date), month(Date⑨_Date) As 月, day(Date⑨_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date⑩_Date, year(Date⑩_Date), month(Date⑩_Date) As 月, day(Date⑩_Date), 1 from {Information} where Masseur_Name Is not null" 

Dim dt As DataTable = cmd.ExecuteReader
For Each ary As String() In dt.GetValues("Name|年")
    For i As Integer = 1 To 12
        For j As Integer = 1 To Date.DaysInMonth(ary(1),i)
            Dim d As Date = new Date(ary(1), i, j)
            Dim fdr As DataRow = dt.Find("Name = \'" & ary(0) & "\' and Date = #" & d & "#")
            If fdr Is Nothing Then
                fdr = dt.AddNew
                fdr("Name") = ary(0)
                fdr("Date") = d
                fdr("年") = ary(1)
                fdr("月") = i
                fdr("日") = j
                fdr("开单") = 0
            End If
        Next
    Next
Next
Dim tv As WinForm.TreeView = e.Form.Controls("TreeView1")
tv.BuildTree(dt, "Name|年|月|日")
For Each nd As WinForm.TreeNode In tv.AllNodes
    Select Case nd.Level
        Case 0
            nd.Text = nd.Text & "(" & dt.Compute("count(Name)", "Name = \'" & nd.DataRow("Name") & "\' and 开单 = 1") & "张)"
        Case 1
            nd.Text = nd.Text & "年(" & dt.Compute("count(Name)", "Name = \'" & nd.DataRow("Name") & "\' and 开单 = 1 and 年 = \'" & nd.DataRow("年") & "\'") & "张)"
        Case 2
            nd.Text = nd.Text & "月(" & dt.Compute("count(Name)", "Name = \'" & nd.DataRow("Name") & "\' and 开单 = 1 and 年 = \'" & nd.DataRow("年") & "\' and 月 = \'" & nd.DataRow("月") & "\'") & "张)"
        Case 3
            nd.Text = nd.DataRow("月") & "月" & nd.Text & "日(" & dt.Compute("count(Name)", "Name = \'" & nd.DataRow("Name") & "\' and 开单 = 1 and 年 = \'" & nd.DataRow("年") & "\' and 月 = \'" & nd.DataRow("月") & "\' and 日 = \'" & nd.DataRow("日") & "\'") & "张)"
    End Select
Next

--  作者:有点甜
--  发布时间:2014/8/15 11:51:00
--  

你看看是不是name和date的问题,改成别的名字,比如 名字、日期 或者 tname、tdate

 

----------------------------

 

1、你加入代码output.show(cmd.CommandText) 然后在命令窗口看一下得出的sql语句是什么;

 

2、拷贝得出的sql语句,测试一下,看报什么错 http://www.foxtable.com/help/topics/1484.htm

 


--  作者:man9997
--  发布时间:2014/8/15 11:56:00
--  
提示是:

无效的 SQL语句;期待 \'DELETE\'、\'INSERT\'、\'PROCEDURE\'、\'SELECT\'、或 \'UPDATE\'。

--  作者:有点甜
--  发布时间:2014/8/15 11:58:00
--  

 把 As Date 改成 As 日期

 

 下面对应的也改一下


--  作者:man9997
--  发布时间:2014/8/15 12:10:00
--  
继续提示:

.NET Framework 版本:2.0.50727.5483
Foxtable 版本:2014.8.4.1
错误所在事件:窗口,日期查询,AfterLoad
详细错误信息:
从字符串“”到类型“Integer”的转换无效。
输入字符串的格式不正确。



修改后的代码

Dim cmd As new SQLCommand
cmd.CommandText = "Select Masseur_Name As 姓名,Date①_Date As 日期, year(Date①_Date) As 年, month(Date①_Date) As 月, day(Date①_Date) As 日, 1 as 开单 from {Information} where Masseur_Name Is not null " _
& " union Select Masseur_Name,Date②_Date, year(Date②_Date), month(Date②_Date) As 月, day(Date②_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date③_Date, year(Date③_Date), month(Date③_Date) As 月, day(Date③_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date④_Date, year(Date④_Date), month(Date④_Date) As 月, day(Date④_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date⑤_Date, year(Date⑤_Date), month(Date⑤_Date) As 月, day(Date⑤_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date⑥_Date, year(Date⑥_Date), month(Date⑥_Date) As 月, day(Date⑥_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date⑦_Date, year(Date⑦_Date), month(Date⑦_Date) As 月, day(Date⑦_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date⑧_Date, year(Date⑧_Date), month(Date⑧_Date) As 月, day(Date⑧_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date⑨_Date, year(Date⑨_Date), month(Date⑨_Date) As 月, day(Date⑨_Date), 1 from {Information} where Masseur_Name Is not null" _
& " union Select Masseur_Name,Date⑩_Date, year(Date⑩_Date), month(Date⑩_Date) As 月, day(Date⑩_Date), 1 from {Information} where Masseur_Name Is not null" 

Dim dt As DataTable = cmd.ExecuteReader
For Each ary As String() In dt.GetValues("姓名|年")
    For i As Integer = 1 To 12
        For j As Integer = 1 To Date.DaysInMonth(ary(1),i)
            Dim d As Date = new Date(ary(1), i, j)
            Dim fdr As DataRow = dt.Find("姓名 = \'" & ary(0) & "\' and 日期 = #" & d & "#")
            If fdr Is Nothing Then
                fdr = dt.AddNew
                fdr("姓名") = ary(0)
                fdr("日期") = d
                fdr("年") = ary(1)
                fdr("月") = i
                fdr("日") = j
                fdr("开单") = 0
            End If
        Next
    Next
Next
Dim tv As WinForm.TreeView = e.Form.Controls("TreeView1")
tv.BuildTree(dt, "姓名|年|月|日")
For Each nd As WinForm.TreeNode In tv.AllNodes
    Select Case nd.Level
        Case 0
            nd.Text = nd.Text & "(" & dt.Compute("count(姓名)", "姓名 = \'" & nd.DataRow("姓名") & "\' and 开单 = 1") & "张)"
        Case 1
            nd.Text = nd.Text & "年(" & dt.Compute("count(姓名)", "姓名 = \'" & nd.DataRow("姓名") & "\' and 开单 = 1 and 年 = \'" & nd.DataRow("年") & "\'") & "张)"
        Case 2
            nd.Text = nd.Text & "月(" & dt.Compute("count(姓名)", "Name = \'" & nd.DataRow("姓名") & "\' and 开单 = 1 and 年 = \'" & nd.DataRow("年") & "\' and 月 = \'" & nd.DataRow("月") & "\'") & "张)"
        Case 3
            nd.Text = nd.DataRow("月") & "月" & nd.Text & "日(" & dt.Compute("count(姓名)", "姓名 = \'" & nd.DataRow("姓名") & "\' and 开单 = 1 and 年 = \'" & nd.DataRow("年") & "\' and 月 = \'" & nd.DataRow("月") & "\' and 日 = \'" & nd.DataRow("日") & "\'") & "张)"
    End Select
Next