Foxtable(狐表)用户栏目专家坐堂 → 恢复定期提醒


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

主题:恢复定期提醒

帅哥,在线噢!
cd_tdh
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3203 积分:21289 威望:0 精华:0 注册:2016/3/28 16:57:00
恢复定期提醒  发帖心情 Post By: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编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

增加一个不再提醒日期列,插入勾选时的日期。判断这个不再提醒日期不在当月/当周的就取消勾选,继续提醒

 回到顶部
帅哥,在线噢!
cd_tdh
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3203 积分:21289 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/8/18 12:49:00 [只看该作者]

怎么判断当周呢?


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

http://www.foxtable.com/webhelp/topics/0229.htm

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

 回到顶部
帅哥,在线噢!
cd_tdh
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3203 积分:21289 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By: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
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3203 积分:21289 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/8/19 13:39:00 [只看该作者]

老师,发现一个问题,我提醒是做的一个PopupForm类型窗口,有多条提醒信息时,只显示了最后一条,怎么然他每条都显示一个提醒呢?

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/19 13:47:00 [只看该作者]

没有办法,窗口只能打开一个。考虑在窗口里显示上一条,下一条提示

 回到顶部
帅哥,在线噢!
cd_tdh
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3203 积分:21289 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By: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

 

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


 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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 )

 回到顶部