2部分AfterUpdate()子程序不起作用

时间:2014-03-05 22:39:41

标签: sql ms-access access-vba

我有两个子程序。

我有一个由最终用户更新的表单。更新表单中的Me.ID字段后,会触发子ID_AfterUpdate。这部分是成功的。

然后,我希望触发一个SQL更新查询updateReportFlag,用于标记具有特定值的记录。这部分不起作用。有人可以告诉我为什么吗?我在初始更新后检查Input_Table.[ReportFlag]字段并且它是NULL,所以理论上第二个子应该可以工作。

这是我的代码:

    Private Sub ID_AfterUpdate()
Dim db As Database
Set db = CurrentDb
Dim rs As Recordset

Set rs = db.OpenRecordset("SELECT Customer.[Customer Name] " _
                        & "FROM Customer " _
                        & "WHERE Customer.[ID] = '" & Me.ID & "'")

If (rs.RecordCount <> 0) Then
    Me.txtCustomerName = rs![Customer Name]
    updateReportFlag ' TRIGGERS THE UPDATE IN THE NEXT SUBROUTINE
Else
    MsgBox ("Invalid ID")
End If

End Sub


Private Sub updateReportFlag()

    DoCmd.RunSQL "UPDATE Input_Table " _
                & "SET Input_Table.[ReportFlag] = ""Report1"" " _
                & "WHERE Input_Table.[ReportFlag] IS NULL "
End Sub

编辑 - 这是用作表单记录源的代码。注意它是如何不选择Input_Table。[ReportFlag])字段,但表中包含它。这就是sub updateReportFlag中的我的UPDATE查询不更新表单而是更新提供表单的表的原因。不确定这是否相关。

SELECT Input_Table.[ID], Input_Table.[Customer Name] FROM Input_Table
WHERE (((Input_Table.[ReportFlag])="Report1"));

编辑2 - 我正在玩这个,并注意到如果您输入多个Me.ID值,查询将起作用。第一次输入后,没有任何更新。在第二个条目之后,第一个条目得到更新。在UPDATE查询被触发之前,似乎记录实际上没有提交到表中。有没有办法在运行UPDATE查询之前获取记录?

1 个答案:

答案 0 :(得分:1)

我明白了。在CDL_AfterUpdate子执行完成之后,才会提交在目标表中创建的记录。由于updateReportFlag来自CDL_AfterUpdate子系统,因此在UPDATE中定位的记录尚未提交,因此无法找到要更新的记录。

我添加了以下代码块,强制在调用updateReportFlag子代之前提交记录:

If Me.Dirty Then
    Me.Dirty = False
End If