我有一个包含2个子表单的表单:
想法是用户可以通过更新“付款状态”列来在子表单1和子表单2之间移动付款记录:
这可以使用我创建的命令按钮批量完成,例如,将所有持有的付款设置为“Release”会导致它们全部移动到底部子窗体:
...或者可以通过更改“付款状态”组合框来按记录完成:
问题:更新Pay State组合框更新从子窗体2到子窗体1(即从“Release”更新为“Hold”)时出现问题。其他每个场景似乎都可以。
第一次通过组合框将付款从“发布”设置为“保留”时,记录正确地从子表单2中消失...
...但由于某种原因,记录不会显示在子表单1中,即使为子表单1计算的总值表明记录应该在那里:
如果我将下一条记录从“发布”移动到“保留”,则会显示该记录,但仍然没有显示我移动的第一条记录(也是为子表单计算的总值仍然比显示的值多500英镑):
当我将最终记录从“Release”移动到“Hold”时,所有3条记录现在实际显示在子窗体1中:
主表单绑定到名为PaymentRun的表。子表单1和2使用查询来显示其数据,但两者都使用名为Payments的表,该表与PaymentRun建立了关系,其中PaymentRunID是PaymentRun的PK和付款的FK。
当记录的PayStatus设置为“Release”时,某些VBA会将主表单中的PaymentRunID分配给付款记录的PaymentRunID(并在PayStatus为“Hold”或空白时将其删除)。
子表单2(ReleasedPayments)设置为主表单的子表单,因此每次付款记录获取主表单的PaymentRunID时,它将显示子表单2中的记录。
子表单1(UnreleasedPayments)未链接到主表单,并根据传递给其.Filter
属性的字符串显示记录。
这是从Subform 2(ReleasedPayments)中的PayStatus组合框的更改事件运行的顺序中的代码:
cboPayStatus更改事件:
If _
Me.cboPayStatus.Value = "Hold" _
Then
Me.PaymentRunID.Value = Null
ElseIf _
Me.cboPayStatus.Value = "Release" _
Then
Me.PaymentRunID.Value = Me.Parent!PaymentRunID.Value
End If
Call PaymentsFilter
Call PaymentsRequery
PaymentsFilter sub(用于过滤子表单1):
Dim strUnreleased As String
strUnreleased = ""
strUnreleased = "[PaymentPeriod] IN " _
& "(SELECT PayPer.PaymentPeriod " _
& "FROM PaymentPeriod PayPer " _
& "WHERE PayPer.PaymentPeriodSort <=" & Forms!PaymentDetails!cboPaymentPeriod.Column(1) & ") " _
& "AND [EDRSRef] = '" & Forms!PaymentDetails!cboEmployer & "' " _
& "AND ([PaymentStatus]='Hold' Or [PaymentStatus] IS NULL)"
Forms!PaymentDetails!PaymentDetails_sub.Form.Filter = strUnreleased
Forms!PaymentDetails!PaymentDetails_sub.Form.FilterOn = True
PaymentsRequery子目录(用于重新查询子表单2并将已发布的付款值推送到付款运行金额)
Forms!PaymentDetails!PaymentDetailsRelease_sub.Form.Requery
Forms!PaymentDetails!txtRelVal.Requery
Forms!PaymentDetails!PaymentRunAmount.Value = Forms!PaymentDetails!txtRelVal.Value
我不完全确定问题是什么,但改变这两个的顺序解决了我的问题:
Call PaymentsFilter
Call PaymentsRequery
也许PaymentsRequery
在PaymentsFilter完成对子窗体1的影响之前导致子窗体2窃取焦点?
如果有人能提供解释,我仍然会感兴趣。