子窗体最初不显示过滤结果

问题描述 投票:0回答:1

我有一个包含2个子表单的表单:

  • 主要形式:PaymentDetails
  • 子表单1:UnreleasePayments
  • 子表单2:已发布的付款

enter image description here

想法是用户可以通过更新“付款状态”列来在子表单1和子表单2之间移动付款记录:

enter image description here

这可以使用我创建的命令按钮批量完成,例如,将所有持有的付款设置为“Release”会导致它们全部移动到底部子窗体:

enter image description here

...或者可以通过更改“付款状态”组合框来按记录完成:

enter image description here

问题:更新Pay State组合框更新从子窗体2到子窗体1(即从“Release”更新为“Hold”)时出现问题。其他每个场景似乎都可以。

第一次通过组合框将付款从“发布”设置为“保留”时,记录正确地从子表单2中消失...

enter image description here

...但由于某种原因,记录不会显示在子表单1中,即使为子表单1计算的总值表明记录应该在那里:

enter image description here

如果我将下一条记录从“发布”移动到“保留”,则会显示该记录,但仍然没有显示我移动的第一条记录(也是为子表单计算的总值仍然比显示的值多500英镑):

enter image description here

当我将最终记录从“Release”移动到“Hold”时,所有3条记录现在实际显示在子窗体1中:

enter image description here

主表单绑定到名为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
ms-access access-vba ms-access-2016
1个回答
0
投票

我不完全确定问题是什么,但改变这两个的顺序解决了我的问题:

Call PaymentsFilter
Call PaymentsRequery

也许PaymentsRequery在PaymentsFilter完成对子窗体1的影响之前导致子窗体2窃取焦点?

如果有人能提供解释,我仍然会感兴趣。

© www.soinside.com 2019 - 2024. All rights reserved.