以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  恢复定期提醒  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=171103)

--  作者:cd_tdh
--  发布时间:2021/8/18 11:56:00
--  恢复定期提醒

老师,我用计时器做了一个定期提醒功能,比如每月或每周提醒,提醒后如果我点了不在提醒,不在提醒就为true,但是按照提醒周期下个月或是下周又需要提醒,怎么处理呢?

表结构如下:


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

代码如下:

If Forms("主窗口").Opened = True Then
    \'事务定期提醒
    Dim d As Date = Date.Today
    Dim day As Integer = d.day
    Dim week As Integer = d.DayOfWeek
    Dim cmd As New SQLCommand
    Dim dt As DataTable
    cmd.ConnectionName = 
    cmd.CommandText = "S  elect * From {事务定期提醒}"
    dt = cmd.ExecuteReader()
    For Each dr As DataRow In dt.DataRows
        If dr("责任人") = _UserXingMing Then
            If dr("不在提醒") = False Then
                If dr("提醒周期") = "每月" Then
                    If day - dr("提醒日期") >= 0 Then
                        Forms("事务定期提醒").Show
                    End If
                ElseIf dr("提醒周期") = "每周" Then
                    If week - dr("提醒日期") >= 0 Then
                        Forms("事务定期提醒").Show
                    End If
                End If
            End If
        End If
    Next
End If

[此贴子已经被作者于2021/8/18 11:55:52编辑过]

--  作者:有点蓝
--  发布时间:2021/8/18 12:29:00
--  
增加一个不再提醒日期列,插入勾选时的日期。判断这个不再提醒日期不在当月/当周的就取消勾选,继续提醒
--  作者:cd_tdh
--  发布时间:2021/8/18 12:49:00
--  

怎么判断当周呢?


--  作者:有点蓝
--  发布时间:2021/8/18 13:32:00
--  
http://www.foxtable.com/webhelp/topics/0229.htm

比如:date.today.DayOfWeek=1今天是周一,完后加6天,就是周日,在这时间范围内的就是本周

--  作者:cd_tdh
--  发布时间:2021/8/18 15:11:00
--  

终于写好了,谢谢老师,效果如下:

 
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20210818150850.jpg
图片点击可在新窗口打开查看
代码发出来供参考

If Forms("主窗口").Opened = True Then
    \'事务定期提醒
    Dim d As Date = Date.Today
    Dim m As Integer = d.Month \'算出今天是几月
    Dim day As Integer = d.day \'算出今天是几日
    Dim w As Integer = d.DayOfWeek \'算出今天是星期几
    Dim dt1 As Date = d.AddDays(-w) \'获取本周的第一天
    Dim dt2 As Date = d.AddDays(6 - w) \'获取本周的最后一天
  
    Dim cmd As New SQLCommand
    Dim dt As DataTable
    cmd.CS  elect * From {事务定期提醒}"
    dt = cmd.ExecuteReader(True)
   
    Dim drs As List(Of DataRow)
    drs = dt.Select("[提醒周期] = \'每月\'")
    For Each dr As DataRow In drs
        If dr("不在提醒日期").Month <> m Then   \'不在提醒日期不在本月
            dr("不在提醒") = False
            dr("不在提醒日期") = Date.Now
            dr("处理人员") = "系统自动处理"
            dr.Save
        Else
            If dr("不在提醒") = False Then
                If dr("责任人") = _UserXingMing Then
                    If day - dr("提醒日期") >= 0 Then
                        Forms("事务定期提醒").Show
                    End If
                End If
            End If
        End If
    Next
    Dim drw As List(Of DataRow)
    drw = dt.Select("[提醒周期] = \'每周\'")
    For Each dw As DataRow In drw
        If dw("不在提醒日期") < dt1 Then  \'不在提醒日期小于本周第一天
            dw("不在提醒") = False
            dw("不在提醒日期") = Date.Now
            dw("处理人员") = "系统自动处理"
            dw.Save
        Else
            If dw("不在提醒") = False Then
                If dw("责任人") = _UserXingMing Then
                    If w - dw("提醒日期") >= 0 Then
                        Forms("事务定期提醒").Show
                    End If
                End If
            End If
        End If
    Next
End If


--  作者:cd_tdh
--  发布时间:2021/8/19 13:39:00
--  
老师,发现一个问题,我提醒是做的一个PopupForm类型窗口,有多条提醒信息时,只显示了最后一条,怎么然他每条都显示一个提醒呢?
--  作者:有点蓝
--  发布时间:2021/8/19 13:47:00
--  
没有办法,窗口只能打开一个。考虑在窗口里显示上一条,下一条提示
--  作者:cd_tdh
--  发布时间:2021/8/19 16:19:00
--  

老师,我提醒窗口代码这样写的,用find找到的第一条

Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.ConnectionName =
cmd.CommandText = "S  elect * From {事务定期提醒}"
dt = cmd.ExecuteReader()

Dim dr As DataRow = dt.Find("责任人 = \'" & _UserXingMing & "\'")
If dr IsNot Nothing Then
    e.Form.Controls("事务名称").text = dr("事务名称")
    e.Form.Controls("事务详情").text = dr("事务详情")
End If

 

上一条下一条思路一直没想通过来


--  作者:有点蓝
--  发布时间:2021/8/19 16:27:00
--  
参考:http://www.foxtable.com/webhelp/topics/3055.htm

使用标签记录查询到的行的_identify值,

上一行
Dim id As String = e.Form.Controls("Label2").Text
Dim dr As DataRow = dt.Find("_identify < " & id ,“_identify  desc”)

下一行
Dim id As String = e.Form.Controls("Label2").Text
Dim dr As DataRow = dt.Find("_identify > " & id )