我有一个包含2个子表单的表单:
想法是,用户可以通过更新“付款状态”列在子表单1和子表单2之间移动付款记录:
这可以使用我创建的命令按钮来批量完成,例如,将所有保留的付款都设置为“发行”会导致所有付款都移至底部子窗体:
...或者可以通过更改“付款状态”组合框为每个记录完成此操作:
问题:将“付款状态”组合框从子窗体2更新到子窗体1(即从“发布”到“保留”)时出现问题。其他所有情况似乎都可以。
第一次通过组合框将付款从“发布”设置为“保留”时,记录将从子窗体2正确消失...
...但是由于某种原因,记录并未显示在子窗体1中,即使为子窗体1计算的总值表明应该存在一条记录:
如果我将下一个记录从“发布”移动到“保留”,则显示该记录,但仍然没有我移动的第一条记录的迹象(同样,为子窗体计算的总价值仍比显示的多500英镑) :
当我将最终记录从“发布”移动到“保留”时,所有3条记录现在实际上都显示在子窗体1中:
主窗体绑定到一个名为PaymentRun的表。子窗体1和2使用查询来显示其数据,但是两者都使用名为Payments的表,该表与PaymentRun建立了关系,其中PaymentRunID是PaymentRun的PK和Payments的FK。
当记录的PayStatus设置为“发布”时,某些VBA会将主窗体中的PaymentRunID分配给付款记录的PaymentRunID(并在PayStatus为“保留”或空白时将其删除)。
子窗体2(ReleasedPayments)被设置为主窗体的子窗体,因此每次付款记录获得主窗体的PaymentRunID时,它将在子窗体2中显示该记录。
子窗体1(UnreleasedPayments)未链接到主窗体,而是基于传递给其.Filter
属性的字符串显示记录。
以下是代码从子窗体2(ReleasedPayments)中的PayStatus组合框的change事件运行的顺序:
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子(用于过滤子表单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
答案 0 :(得分:0)
我不太确定问题是什么,但是切换这两个命令的顺序解决了我的问题:
Call PaymentsFilter
Call PaymentsRequery
也许PaymentsRequery
导致Subform 2窃取了焦点,然后PaymentsFilter完成对Subform 1的影响?
如果有人可以提供解释,我仍然会感兴趣。