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


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

主题:时段统计问题

美女呀,在线,快来找我吧!
采菊东篱下
  31楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

结果应为1个月,因为数据源中没有2020-12-01到2020-12-31的数据,如果中途由于业主长时间旅游或者出差,那个月没交月租,改交临时缴费,但之后回来正常出入了,又交月租费,那么这个业主的月租缴费会出现中断现象,时段统计的起计日期应取在月租起、止计日期里最接近查询日期的起计日期的日期,不是直接取查询日期,月租止计日期亦应作同理判断。
[此贴子已经被作者于2021/12/1 10:32:41编辑过]

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


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

不是很理解您的意思。

请举例说明一下,比如举个有代表性的车牌号码,这个号码在表格里的日期应该怎么和窗口的日期进行比较和计算?

 回到顶部
美女呀,在线,快来找我吧!
采菊东篱下
  33楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

        With e.Form.Controls("StartDate")
            If .Value IsNot Nothing Then
                If "[缴费_月租_起计日期] >= #" & .Value Then
                    f2 = "[缴费_月租_起计日期] = #" & .Value & "#"
                ElseIf "[缴费_月租_起计日期] < #" & .Value & "# And [缴费_月租_止计日期] >= #" & .Value & "#" Then
                    f2 = DataTables("缴费情况").DataRows("缴费_月租_起计日期")
                End If
            End If
        End With
        With e.Form.Controls("EndDate")
            If .Value IsNot Nothing Then
                If f2 > "" Then
                    f2 = Filter & " And "
                End If
                If "[缴费_月租_止计日期] >= #" & .Value Then
                    f2  = f2  & "[缴费_月租_起计日期] = #" & .Value & "#"
                ElseIf "[缴费_月租_止计日期] < #" & .Value & "#" Then
                    f2 = f2 & DataTables("缴费情况").DataRows("缴费_月租_止计日期")
                End If
            End If
        End With
[此贴子已经被作者于2021/12/1 11:04:13编辑过]

 回到顶部
美女呀,在线,快来找我吧!
采菊东篱下
  34楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

改为这样也报错:
        With e.Form.Controls("StartDate")
            If .Value IsNot Nothing Then
                If "[缴费_月租_起计日期] >= #" & .Value Then
                    f2 = "[缴费_月租_起计日期] = #" & .Value & "#"
                ElseIf "[缴费_月租_起计日期] < #" & .Value & "# And [缴费_月租_止计日期] >= #" & .Value & "#" Then
                    Dim ds As DataRow = DataTables("缴费情况").("[缴费_月租_起计日期] < #" & .Value & "# And [缴费_月租_止计日期] >= #" & .Value & "#")
                    f2 = ds("缴费_月租_起计日期")
                End If
            End If
        End With
        With e.Form.Controls("EndDate")
            If .Value IsNot Nothing Then
                If f2 > "" Then
                    f2 = Filter & " And "
                End If
                If "[缴费_月租_止计日期] >= #" & .Value Then
                    f2  = f2  & "[缴费_月租_起计日期] = #" & .Value & "#"
                ElseIf "[缴费_月租_止计日期] < #" & .Value & "#" Then
                    Dim ds1 As DataRow = DataTables("缴费情况").("[缴费_月租_止计日期] < #" & .Value & "#")
                    f2 = f2 & ds1("缴费_月租_止计日期")
                End If
            End If
        End With

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


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

都是自己创造的语法,佩服,但是我不知道怎么回答好。

建议不要使用表达式查询了,遍历源表所有行,逐行判断日期处理吧

 回到顶部
美女呀,在线,快来找我吧!
采菊东篱下
  36楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

有这样的想法

 回到顶部
美女呀,在线,快来找我吧!
采菊东篱下
  37楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

换种方法,我知道应怎么做了。

 回到顶部
美女呀,在线,快来找我吧!
采菊东篱下
  38楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

报错:
.NET Framework 版本:4.0.30319.18063
Foxtable 版本:2021.11.18.11
错误所在事件:
详细错误信息:
Dynamic SQL generation is not supported against a SelectCommand that does not return any base table information.
我想用临时表生成过渡数据后直接统计。

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 cmd As New SQLCommand
        Dim dt As DataTable
        cmd.CommandText = "Select [_Identify],分类,住址_巷,住址_号,住址_房,姓名,手机号码,车牌号码,缴费_月租_起计日期,缴费_月租_止计日期,缴费_月租_月租单价,备注 fro m {缴费情况} Where [缴费_月租_起计日期] >= #" & e.Form.Controls("StartDate").Value & "# And [缴费_月租_止计日期] <= #" & e.Form.Controls("EndDate").Value & "#"
        dt = cmd.ExecuteReader()
        If dt.DataCols.Contains("查询_月租_有效起计日期") = False And dt.DataCols.Contains("查询_月租_有效止计日期") = False And dt.DataCols.Contains("查询_月租_缴费月数") = False And dt.DataCols.Contains("查询_月租_缴费金额") = False Then
            dt.DataCols.add("查询_月租_有效起计日期", Gettype(Date))
            dt.DataCols.add("查询_月租_有效止计日期", Gettype(Date))
            dt.DataCols.add("查询_月租_缴费月数", Gettype(Double))
            dt.DataCols.add("查询_月租_缴费金额", Gettype(Double))
        End If
        If dt.DataRows.Count > 0 Then
            For Each dr As DataRow In dt.DataRows
                If dr("缴费_月租_起计日期") <= "#" & e.Form.Controls("StartDate").Value & "#" Then
                    dr("查询_月租_有效起计日期") = "#" & e.Form.Controls("StartDate").Value & "#"
                ElseIf dr("缴费_月租_起计日期") > "#" & e.Form.Controls("StartDate").Value & "#" Then
                    dr("查询_月租_有效起计日期") = dr("缴费_月租_起计日期")
                End If
                If dr("缴费_月租_止计日期") >= "#" & e.Form.Controls("EndDate").Value Then
                    dr("查询_月租_有效止计日期") = "#" & e.Form.Controls("EndDate").Value & "#"
                ElseIf dr("缴费_月租_止计日期") < "#" & e.Form.Controls("EndDate").Value & "#" Then
                    dr("查询_月租_有效止计日期") = dr("缴费_月租_止计日期")
                End If
                dr("查询_月租_缴费月数") = DateDiff("m",dr("查询_月租_有效起计日期"),dr("查询_月租_有效止计日期")) + 1
                dr("查询_月租_缴费金额") = (DateDiff("m",dr("查询_月租_有效起计日期"),dr("查询_月租_有效止计日期")) + 1) * dr("缴费_月租_月租单价")
            Next
        End If
        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
        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
        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 {dt} Where " & Filter,False)
                Dim t As DataTable = e.Form.Controls("Table1").Table.DataTable
                .SetColVisibleWidth("分类|60|住址_巷|60|住址_号|30|住址_房|30|姓名|50|手机号码|80|车牌号码|70|查询_月租_有效起计日期|70|查询_月租_有效止计日期|70|查询_月租_缴费月数|60|缴费_月租_月租单价|60|查询_月租_缴费金额|60|备注|127")
                .SetHeaderRowHeight(0,0,25)
                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("#,###.##")

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


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

.Fill("Select [_Identify],分类,住址_巷,住址_号,住址_房,姓名,手机号码,车牌号码,查询_月租_有效起计日期,查询_月租_有效止计日期,缴费_月租_月租单价,查询_月租_缴费月数,查询_月租_缴费金额,备注 fro m {dt} Where " & Filter,False)

有dt这个名称表吗

 回到顶部
美女呀,在线,快来找我吧!
采菊东篱下
  40楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

是生成的临时表啊

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