子表单最初不显示过滤结果

时间:2019-02-12 10:22:45

标签: ms-access access-vba ms-access-2016

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

  • 主要形式:付款细节
  • 子表单1: UnreleasePayments
  • 子表单2:已付款

enter image description here

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

enter image description here

这可以使用我创建的命令按钮来批量完成,例如,将所有保留的付款都设置为“发行”会导致所有付款都移至底部子窗体:

enter image description here

...或者可以通过更改“付款状态”组合框为每个记录完成此操作:

enter image description here

问题:将“付款状态”组合框从子窗体2更新到子窗体1(即从“发布”到“保留”)时出现问题。其他所有情况似乎都可以。

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

enter image description here

...但是由于某种原因,记录并未显示在子窗体1中,即使为子窗体1计算的总值表明应该存在一条记录:

enter image description here

如果我将下一个记录从“发布”移动到“保留”,则显示该记录,但仍然没有我移动的第一条记录的迹象(同样,为子窗体计算的总价值仍比显示的多500英镑) :

enter image description here

当我将最终记录从“发布”移动到“保留”时,所有3条记录现在实际上都显示在子窗体1中:

enter image description here

主窗体绑定到一个名为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

1 个答案:

答案 0 :(得分:0)

我不太确定问题是什么,但是切换这两个命令的顺序解决了我的问题:

Call PaymentsFilter
Call PaymentsRequery

也许PaymentsRequery导致Subform 2窃取了焦点,然后PaymentsFilter完成对Subform 1的影响?

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

相关问题