我有两个子程序。
我有一个由最终用户更新的表单。更新表单中的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查询之前获取记录?
答案 0 :(得分:1)
我明白了。在CDL_AfterUpdate
子执行完成之后,才会提交在目标表中创建的记录。由于updateReportFlag
来自CDL_AfterUpdate
子系统,因此在UPDATE中定位的记录尚未提交,因此无法找到要更新的记录。
我添加了以下代码块,强制在调用updateReportFlag
子代之前提交记录:
If Me.Dirty Then
Me.Dirty = False
End If