Foxtable(狐表)用户栏目专家坐堂 → 时段统计问题


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

主题:时段统计问题

美女呀,离线,留言给我吧!
采菊东篱下
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/5/18 14:21:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20210518140659.png
图片点击可在新窗口打开查看
没加第二段红色代码前,不选时段直接查询会报错,选了时段,统计正常,于是我加了第一、二段红色代码,要求起止日期或起止时间控件不能为空,否则取消查询,可加后报错,是要求把时间显示转为字符型吧?请教应如何处理?
If e.Form.Controls("ComboBox1").Value = "" Then'当日期为空取消保存操作
    messagebox.show("请选择分类")
    Return
End If
If e.Form.Controls("ComboBox1").Value = e.Form.Controls("ComboBox1").Items(1) Then
    If e.Form.Controls("StartDate").Value = "" OrElse e.Form.Controls("EndDate").Value = "" Then '当日期为空取消保存操作
        messagebox.show("请选择起止日期")
        Return
    Else
        Dim Filter As String
        Dim f2 As String
        Filter = "分类 = '" & e.Form.Controls("ComboBox1").Value & "'"
        With e.Form.Controls("StartDate")
            If .Value IsNot Nothing Then
                f2 = "缴费_月租_起计日期 <= #" & .Value & "# And 缴费_月租_止计日期 >= #" & .Value & "#"
            End If
        End With
        With e.Form.Controls("EndDate")
            If .Value IsNot Nothing Then
                If f2 > "" Then
                    f2 = Filter & " And "
                End If
                f2  = f2  & "缴费_月租_起计日期 <= #" & .Value & "# and 缴费_月租_止计日期 >= #" & .Value & "#"
            End If
        End With
        If F2 > "" Then
            If Filter > "" Then
                Filter = Filter & " And "
            End If
            Filter = Filter & " (" & F2 & ") "
        End If
        With e.Form.Controls("DropBox1")
            If .Value IsNot Nothing Then
                If Filter > "" Then
                    Filter = Filter & " And "
                End If
                Filter = Filter & "车牌号码 = '" & .Value & "'"
            End If
        End With
        If Filter > "" Then
            With Tables("月租所属期缴费统计表_Table1")
                For i As Integer = .Rows.count - 1 To 0 Step -1
                    .Rows(i).Delete
                Next
                LockBaseMainForm() '锁定主界面
                .StopRedraw()
                For i As Integer = DataTables("缴费情况").DataRows.count - 1 To 0 Step -1
                    Dim tr As DataRow = DataTables("缴费情况").DataRows(i)
                    If tr.Isnull("车牌号码") Then
                        tr.delete
                    End If
                Next
                .Fill("Select [_Identify],分类,住址_巷,住址_号,住址_房,姓名,固定电话,手机号码,车牌号码,缴费_月租_月租单价 fr om {缴费情况} Where " & Filter,False)
                Dim t As DataTable = e.Form.Controls("Table1").Table.DataTable
                If t.DataCols.Contains("查询_月租_起计日期") = False And t.DataCols.Contains("查询_月租_止计日期") = False And t.DataCols.Contains("查询_月租_缴费月数") = False And t.DataCols.Contains("查询_月租_缴费金额") = False Then
                    t.DataCols.add("查询_月租_起计日期", Gettype(Date))
                    t.DataCols.add("查询_月租_止计日期", Gettype(Date))
                    t.DataCols.add("查询_月租_缴费月数", Gettype(Double))
                    t.DataCols.add("查询_月租_缴费金额", Gettype(Double))
                End If
                .SetColVisibleWidth("分类|60|住址_巷|60|住址_号|40|住址_房|40|姓名|50|固定电话|80|手机号码|80|车牌号码|80|缴费_月租_月租单价|60|查询_月租_起计日期|70|查询_月租_止计日期|70|查询_月租_缴费月数|70|查询_月租_缴费金额|70")
                For Each dr As DataRow In DataTables("月租所属期缴费统计表_Table1").DataRows
                    dr("查询_月租_起计日期") = e.Form.Controls("StartDate").Value
                    dr("查询_月租_止计日期") = e.Form.Controls("EndDate").Value
                    dr("查询_月租_缴费月数") = DateDiff("m",e.Form.Controls("StartDate").Value,e.Form.Controls("EndDate").Value) + 1
                    dr("查询_月租_缴费金额") = (DateDiff("m",e.Form.Controls("StartDate").Value,e.Form.Controls("EndDate").Value) + 1) * dr("缴费_月租_月租单价")
                Next
                If .Rows.Count < 15 Then
                    .AddNew(15 - .Rows.Count)
                End If
                .ResumeRedraw()
                UnLockBaseMainForm() '解锁主界面
                .Cols("查询_月租_缴费金额").GrandTotal = True
                .GrandTotal = True
            End With
        End If
    End If
    DataTables("月租所属期缴费统计表_Table1").DataCols("查询_月租_缴费金额").SetFormat("#,###.##")

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/5/18 14:21:00 [只看该作者]

ElseIf e.Form.Controls("ComboBox1").Value = e.Form.Controls("ComboBox1").Items(2)
    If e.Form.Controls("DateTimePicker1").Value = "" OrElse e.Form.Controls("DateTimePicker2").Value = "" Then '当日期为空取消保存操作
        messagebox.show("请选择起止时间")
        Return
    Else
        Dim Filter1 As String
        Filter1 = "分类 = '" & e.Form.Controls("ComboBox1").Value & "'"
        With e.Form.Controls("DateTimePicker1")
            If .Value IsNot Nothing Then
                If Filter1 > "" Then
                    Filter1 = Filter1 & " And "
                End If
                Filter1 = Filter1 & "缴费_临时停放_起计时间 >= #" & Format(.Value.adddays(-1),"G") & "#"
            End If
        End With
        With e.Form.Controls("DateTimePicker2")
            If .Value IsNot Nothing Then
                If Filter1 > "" Then
                    Filter1 = Filter1 & " And "
                End If
                Filter1 = Filter1 & "缴费_临时停放_止计时间 <= #" & Format(.Value.adddays(1),"G") & "#"
            End If
        End With
        With e.Form.Controls("DropBox1")
            If .Value IsNot Nothing Then
                If Filter1 > "" Then
                    Filter1 = Filter1 & " And "
                End If
                Filter1 = Filter1 & "车牌号码 = '" & .Value & "'"
            End If
        End With
        If Filter1 > "" Then
            With Tables("月租所属期缴费统计表_Table1")
                For i As Integer = .Rows.count - 1 To 0 Step -1
                    .Rows(i).Delete
                Next
                LockBaseMainForm() '锁定主界面
                .StopRedraw()
                For i As Integer = DataTables("缴费情况").DataRows.count - 1 To 0 Step -1
                    Dim tr As DataRow = DataTables("缴费情况").DataRows(i)
                    If tr.Isnull("车牌号码") Then
                        tr.delete
                    End If
                Next
                .Fill("Select 分类,亲属临时停车,车牌号码,Count(车牌号码) As 查询_临时停放_出入次数 fro m {缴费情况} Where " & Filter1 & " group by 分类,亲属临时停车,车牌号码",True)
                Dim t As DataTable = e.Form.Controls("Table1").Table.DataTable
                If t.DataCols.Contains("查询_临时停放_起计时间") = False And t.DataCols.Contains("查询_临时停放_止计时间") = False And t.DataCols.Contains("查询_临时停放_停放累计时间") = False And t.DataCols.Contains("查询_临时停放_计费累计时间") = False And t.DataCols.Contains("查询_临时停放_缴费累计金额") = False Then
                    t.DataCols.add("查询_临时停放_起计时间", Gettype(Date))
                    t.DataCols.add("查询_临时停放_止计时间", Gettype(Date))
                    t.DataCols.add("查询_临时停放_停放累计时间", Gettype(Double))
                    t.DataCols.add("查询_临时停放_计费累计时间", Gettype(Double))
                    t.DataCols.add("查询_临时停放_缴费累计金额", Gettype(Double))
                End If
                .SetColVisibleWidth("分类|80|亲属临时停车|50|车牌号码|100|查询_临时停放_出入次数|80|查询_临时停放_起计时间|100|查询_临时停放_止计时间|100|查询_临时停放_停放累计时间|100|查询_临时停放_计费累计时间|100|查询_临时停放_缴费累计金额|120")
                For Each dr As DataRow In DataTables("月租所属期缴费统计表_Table1").DataRows
                    dr("查询_临时停放_起计时间") = e.Form.Controls("DateTimePicker1").Value
                    dr("查询_临时停放_止计时间") = e.Form.Controls("DateTimePicker2").Value
                    dr("查询_临时停放_停放累计时间") = DataTables("缴费情况").Compute("Sum(缴费_临时停放_停车时间)","[车牌号码] ='" & dr("车牌号码") & "' And [缴费_临时停放_起计时间] >= #" & Format(e.Form.Controls("DateTimePicker1").Value.adddays(-1),"G") & "# And [缴费_临时停放_止计时间] <= #" & Format(e.Form.Controls("DateTimePicker2").Value.adddays(1),"G") & "#")
                    dr("查询_临时停放_计费累计时间") = DataTables("缴费情况").Compute("Sum(缴费_临时停放_计费时间)","[车牌号码] ='" & dr("车牌号码") & "' And [缴费_临时停放_起计时间] >= #" & Format(e.Form.Controls("DateTimePicker1").Value.adddays(-1),"G") & "# And [缴费_临时停放_止计时间] <= #" & Format(e.Form.Controls("DateTimePicker2").Value.adddays(1),"G") & "#")
                    dr("查询_临时停放_缴费累计金额") = DataTables("缴费情况").Compute("Sum(缴费_临时停放_缴费金额)","[车牌号码] ='" & dr("车牌号码") & "' And [缴费_临时停放_起计时间] >= #" & Format(e.Form.Controls("DateTimePicker1").Value.adddays(-1),"G") & "# And [缴费_临时停放_止计时间] <= #" & Format(e.Form.Controls("DateTimePicker2").Value.adddays(1),"G") & "#")
                Next
                If .Rows.Count < 15 Then
                    .AddNew(15 - .Rows.Count)
                End If
                .ResumeRedraw()
                UnLockBaseMainForm()
                .Cols("查询_临时停放_停放累计时间").GrandTotal = True
                .Cols("查询_临时停放_计费累计时间").GrandTotal = True
                .Cols("查询_临时停放_缴费累计金额").GrandTotal = True
                .GrandTotal = True
            End With
            DataTables("月租所属期缴费统计表_Table1").DataCols("查询_临时停放_缴费累计金额").SetFormat("#,###.##")
        End If
    End If
End If

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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/18 14:29:00 [只看该作者]

帮助搜索“空值”学一下。

日期是值类型对象,使用=/<> nothing判断

If e.Form.Controls("StartDate").Value = nothing

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/11/30 20:46:00 [只看该作者]


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

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20211130202805.png
图片点击可在新窗口打开查看
数据源是的月租_起计日期是2021-01-01,查询日期是:2020-12-01到2021-01-31得出2个月数据这显然不对,因为数据源中根本没有2020-12-01到2020-12-31的数据,何来2个月,因此此代码中还需用数据源中的
月租_起计日期跟查询日期中的起计日期比较,如果查询日期小于数据源中的日期,则取源数据中的起计日期,否则等于查询日期,同理月租_止计日期也作比较,如果查询止计日期大于数据源中的月租_止计日期,则取源据中最大日期,请教这代码应怎么写?
If e.Form.Controls("ComboBox1").Value = "" Then'当日期为空取消保存操作
    messagebox.show("请选择分类")
    Return
End If
If e.Form.Controls("ComboBox1").Value = e.Form.Controls("ComboBox1").Items(1) Then
    If e.Form.Controls("StartDate").Value = Nothing OrElse e.Form.Controls("EndDate").Value = Nothing Then '当日期为空取消保存操作
        messagebox.show("请选择起止日期")
        Return
    Else
        Dim Filter As String
        Dim f2 As String
        Filter = "分类 = '" & e.Form.Controls("ComboBox1").Value & "'"
        With e.Form.Controls("StartDate")
            If .Value IsNot Nothing Then
                f2 = "[缴费_月租_起计日期] <= #" & .Value & "# And [缴费_月租_止计日期] >= #" & .Value & "#"
            End If
        End With
        With e.Form.Controls("EndDate")
            If .Value IsNot Nothing Then
                If f2 > "" Then
                    f2 = Filter & " And "
                End If
                f2  = f2  & "[缴费_月租_起计日期] <= #" & .Value & "# And [缴费_月租_止计日期] >= #" & .Value & "#"
            End If
        End With
        If F2 > "" Then
            If Filter > "" Then
                Filter = Filter & " And "
            End If
            Filter = Filter & " (" & F2 & ") "
        End If
        With e.Form.Controls("DropBox1")
            If .Value IsNot Nothing Then
                If Filter > "" Then
                    Filter = Filter & " And "
                End If
                Filter = Filter & "车牌号码 = '" & .Value & "'"
            End If
        End With
        If Filter > "" Then
            With Tables("安费用所属期查询统计_Table1")
                For i As Integer = .Rows.count - 1 To 0 Step -1
                    .Rows(i).Delete
                Next
                LockBaseMainForm() '锁定主界面
                .StopRedraw()
                For i As Integer = DataTables("缴费情况").DataRows.count - 1 To 0 Step -1
                    Dim tr As DataRow = DataTables("缴费情况").DataRows(i)
                    If tr.Isnull("车牌号码") Then
                        tr.delete
                    End If
                Next
                .Fill("Select [_Identify],分类,住址_巷,住址_号,住址_房,姓名,手机号码,车牌号码,缴费_月租_月租单价,备注 fro m {缴费情况} Where " & Filter,False)
                Dim t As DataTable = e.Form.Controls("Table1").Table.DataTable
                If t.DataCols.Contains("查询_月租_起计日期") = False And t.DataCols.Contains("查询_月租_止计日期") = False And t.DataCols.Contains("查询_月租_缴费月数") = False And t.DataCols.Contains("查询_月租_缴费金额") = False Then
                    t.DataCols.add("查询_月租_起计日期", Gettype(Date))
                    t.DataCols.add("查询_月租_止计日期", Gettype(Date))
                    t.DataCols.add("查询_月租_缴费月数", Gettype(Double))
                    t.DataCols.add("查询_月租_缴费金额", Gettype(Double))
                End If
                .SetColVisibleWidth("分类|60|住址_巷|60|住址_号|30|住址_房|30|姓名|50|手机号码|80|车牌号码|70|缴费_月租_月租单价|60|查询_月租_起计日期|70|查询_月租_止计日期|70|查询_月租_缴费月数|60|查询_月租_缴费金额|60|备注|127")
                .SetHeaderRowHeight(0,0,25)
                For Each dr As DataRow In DataTables("安费用所属期查询统计_Table1").DataRows
                    dr("查询_月租_起计日期") = e.Form.Controls("StartDate").Value
                    dr("查询_月租_止计日期") = e.Form.Controls("EndDate").Value
                    dr("查询_月租_缴费月数") = DateDiff("m",e.Form.Controls("StartDate").Value,e.Form.Controls("EndDate").Value) + 1
                    dr("查询_月租_缴费金额") = (DateDiff("m",e.Form.Controls("StartDate").Value,e.Form.Controls("EndDate").Value) + 1) * dr("缴费_月租_月租单价")
                Next
                If .Rows.Count < 15 Then
                    .AddNew(15 - .Rows.Count)
                End If
                .ResumeRedraw()
                UnLockBaseMainForm() '解锁主界面
                .Cols("查询_月租_缴费金额").GrandTotal = True
                .GrandTotal = True
            End With
        End If
    End If
    DataTables("安费用所属期查询统计_Table1").DataCols("查询_月租_缴费金额").SetFormat("#,###.##")

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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/11/30 20:56:00 [只看该作者]

        With e.Form.Controls("StartDate")
            If .Value IsNot Nothing Then
                f2 = "[缴费_月租_起计日期] >= #" & .Value & "#"
            End If
        End With
        With e.Form.Controls("EndDate")
            If .Value IsNot Nothing Then
                If f2 > "" Then
                    f2 = Filter & " And "
                End If
                f2  = f2  & "[缴费_月租_起计日期] <= #" & .Value & "#"
            End If
        End With

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/11/30 21:06:00 [只看该作者]

不能这样写,数据源中的起、止日期夸3个月甚到更多,不是每行连续,查询日期或许等于,或许少于,又或许大于这些起、止日期,查询的起计日期或许等于数据源中的止计日期,你这样写不行的。
[此贴子已经被作者于2021/11/30 21:06:28编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  27楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/11/30 21:29:00 [只看该作者]

我把你的代码复进去试了一下,数据源里根本没这月份,也安查询日期计,统计出2个月数据。

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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/11/30 22:16:00 [只看该作者]

请上传实例说明问题

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  29楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/11/30 23:04:00 [只看该作者]

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


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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/11/30 23:23:00 [只看该作者]

查询日期是:2020-12-01到2021-01-31进行查询,什么数据才是正确的结果?

 回到顶部
总数 123 上一页 1 2 3 4 5 6 7 8 9 10 下一页 ..13