子表单最初不显示过滤结果
Posted
技术标签:
【中文标题】子表单最初不显示过滤结果【英文标题】:Subform not displaying filtered results initially 【发布时间】:2019-02-12 10:22:45 【问题描述】:我有一个包含 2 个子表单的表单:
主窗体:PaymentDetails 子表单 1:UnreleasePayments 子表单 2:ReleasedPayments这个想法是,用户可以通过更新支付状态列在子表单 1 和子表单 2 之间移动支付记录:
这可以使用我创建的命令按钮批量完成,例如,将所有持有的付款设置为“释放”会导致它们全部移动到底部子表单:
...或者可以通过更改“支付状态”组合框来按记录完成:
问题:将支付状态组合框更新从子表单 2 更新到子表单 1(即从“发布”到“保留”)时出现问题。其他所有情况似乎都可以。
第一次通过组合框将付款从“释放”设置为“保留”时,记录正确地从子表单 2 中消失...
...但由于某种原因,该记录未显示在子表单 1 中,即使为子表单 1 计算的总值表明应该存在一条记录:
如果我将下一条记录从“发布”移动到“保留”,这条记录会显示,但仍然没有我移动的第一条记录的迹象(为子表单计算的总价值仍然比显示的多 500 英镑) :
当我将最终记录从“发布”移动到“保留”时,所有 3 条记录现在实际上都显示在子表单 1 中:
主窗体绑定到一个名为 PaymentRun 的表。子表单 1 和 2 使用查询来显示其数据,但都使用名为 Payments 的表,该表与 PaymentRun 建立了关系,其中 PaymentRunID 是 PaymentRun 的 PK 和 Payments 的 FK。
当记录的 PayStatus 设置为“Release”时,某些 VBA 会将主窗体中的 PaymentRunID 分配给付款记录的 PaymentRunID(并在 PayStatus 为“Hold”或空白时将其删除)。
子表单 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 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 sub(用于重新查询subform 2并将释放的支付值推送到支付运行金额)
Forms!PaymentDetails!PaymentDetailsRelease_sub.Form.Requery
Forms!PaymentDetails!txtRelVal.Requery
Forms!PaymentDetails!PaymentRunAmount.Value = Forms!PaymentDetails!txtRelVal.Value
【问题讨论】:
【参考方案1】:我不完全确定问题是什么,但是切换这两个的顺序解决了我的问题:
Call PaymentsFilter
Call PaymentsRequery
也许PaymentsRequery
在 PaymentsFilter 完成对子表单 1 的影响之前导致子表单 2 窃取焦点?
如果有人可以提供解释,我仍然会感兴趣。
【讨论】:
以上是关于子表单最初不显示过滤结果的主要内容,如果未能解决你的问题,请参考以下文章