每次表单加载时循环遍历整个记录

时间:2018-02-07 16:27:56

标签: vba ms-access access-vba

该代码应该检查是否存档" YearBigins"为空并请求输入然后检查" YearBigins"中的日期值是否为在超过一年的时间内提交并在"计数器中设置值#34;归档为0.我有以下代码但不起作用:

Private Sub Form_Load()
Me.Caption = Date
YearBegins_AfterUpdate
End Sub

Private Sub YearBegins_AfterUpdate()

Dim rst As Recordset
Do While Not rst.EOF
If IsNull(rst.Fields("YearBegins").Value) Then
YearBegins = InputBox("Please Enter the Beginning of counter Year  Date as: 
dd/mm/yyyy")
Else: YearBegins = YearBegins.Value
End If
rst.MoveNext
If (DateTime.Now - YearBegins.Value) < 365 Then
counter.Value = 0
End If

Loop

End Sub

1 个答案:

答案 0 :(得分:2)

您错过了实际更新记录集的部分。

Private Sub Form_Load()
    Me.Caption = Date
    YearBegins_AfterUpdate
End Sub

Private Sub YearBegins_AfterUpdate()

    Dim rst As Recordset
    Do While Not rst.EOF
        If IsNull(rst.Fields("YearBegins").Value) Then
            YearBegins = InputBox("Please Enter the Beginning of counter Year  Date as: dd/mm/yyyy")
            rst.Edit  '<---
            rst("YearBegins") = cdate(YearBegins) '<---
            rst.Update '<---
        Else
            YearBegins = YearBegins.Value
        End If
        rst.MoveNext
        If (DateTime.Now - YearBegins.Value) < 365 Then
            counter.Value = 0
        End If

    Loop

End Sub

据说有更好的方法可以做到这一点。您可以打开另一个表单,其中只包含您要更新的数据,这样您就可以为用户提供一些上下文。只是拥有一个没有数据验证的弹出对话框,他们甚至不会真正看到他们正在更新的记录。他们如何知道要放入什么价值?

如果您可以将YearBegins_AfterUpdate中的代码重构为新函数并从Form_Load调用该代码而不是调用YearBegins_AfterUpdate之类的事件处理程序,那会更好。

我不知道你在哪里设置rst。您从Dim rst As Recordset转到使用它,但鉴于您提供的代码rst将始终为空。