MS Access 子窗体不显示记录且不导航

Posted

技术标签:

【中文标题】MS Access 子窗体不显示记录且不导航【英文标题】:MS Access subform not displaying records and not navigating 【发布时间】:2017-05-15 10:00:16 【问题描述】:

我在 SLD 表和 ORDER 表之间建立了一对一的关系。 SLD 表是主表,ORDER 表是子表。主窗体的表比子窗体的表有更多的记录。设置了主链接和子链接。我已经反编译并完成了压缩和修复。我怀疑我的应用程序出现故障。在那种情况下,这不是第一次(我之前已经修复过)。这次似乎没有任何效果。我也导入了一个新的数据库。

在表单加载时,表单和字段都可以正常工作。我使用 ['NEXT'] 按钮继续下一条记录,并到达子表单记录的末尾,因此有空白字段。我尝试导航到以前的记录(也使用按钮),但子表单不移动/导航。子表单没有任何反应。

它似乎变得更糟了,因为它首先在导航,但它没有遵守代码,当文本框被填充时禁用复选框,反之亦然。

【问题讨论】:

究竟是什么故障?子窗体是否显示没有数据?它是否显示数据但显示空白记录?尝试在没有任何链接的情况下获取父表单上的子表单。一旦你让它工作,然后添加链接来分隔数据。 子表单只显示数据,直到它变为空白(我必须添加新记录)。当我尝试导航回该数据时,它根本不导航 - 它保持空白。 我看到您使用的是自定义下一步按钮,请尝试使用子表单底部的默认记录导航工具,这会导致出现同样的问题吗?如果不是,那么您的问题在于您的下一个按钮 是的,“默认记录导航工具”工作正常。我担心用户在使用它们时的体验,所以我将它们设置为“否”。它们是否会影响用户体验? 这段代码似乎干扰了我的子表单导航: If (IsNull(Forms!Order!OrderSubform.Form!txtDate_Of_Order.Value)) Then Forms!Order!OrderSubform.Form!txtDate_Of_Order.Enabled = False Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled.Enabled = True Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled.Value = True Else Forms!Order!OrderSubform.Form!txtDate_Of_Order.Enabled = True Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled。 Enabled = False Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled.Value = False End If 【参考方案1】:

从它的声音来看,问题在于您的“下一步”按钮,而不是子表单问题。正如您在 cmets 中所述,默认导航允许表单按预期工作。

您的上一个按钮 OnClick 事件中是否存在此逻辑?另外为了安全起见,我会在下面的代码中添加 OR 语句,以确保其捕获空值或空白

If (IsNull(Forms!Order!OrderSubform.Form!txtDate_Of_Order.Value‌​)) OR Forms!Order!OrderSubform.Form!txtDate_Of_Order.Value‌​ <> "" Then 
    Forms!Order!OrderSubform.Form!txtDate_Of_Order.Enabled = False 
    Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled.Enabled = True 
    Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled.Value = True 
Else 
    Forms!Order!OrderSubform.Form!txtDate_Of_Order.Enabled = True 
    Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled.Enabled = False 
    Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled.Value = False 
End If

【讨论】:

【参考方案2】:

我发现 If 语句属于 Form_Current 事件。在这段代码之后我不再遇到问题了:

Private Sub Form_Current()

If (IsNull(Forms!Order!OrderSubform.Form!txtOrder_Number.Value) Or _
    Forms!Order!OrderSubform.Form!txtOrder_Number.Value = "") Then
        Forms!Order!OrderSubform.Form!txtDate_Of_Order.Enabled = True
        Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled.Enabled = True
ElseIf (IsNull(Forms!Order!OrderSubform.Form!txtDate_Of_Order.Value) Or _
    Forms!Order!OrderSubform.Form!txtDate_Of_Order.Value = "") Then
        Forms!Order!OrderSubform.Form!txtDate_Of_Order.Enabled = False
        Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled.Enabled = True
        Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled.Value = True
Else
    Forms!Order!OrderSubform.Form!txtDate_Of_Order.Enabled = True
    Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled.Enabled = False
    Forms!Order!OrderSubform.Form!chkbxOrder_Cancelled.Value = False
End If

End Sub

【讨论】:

以上是关于MS Access 子窗体不显示记录且不导航的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Access 的子窗体上不显示选定的记录?

检查 Access 2010 导航子窗体是不是打开

循环访问 MS Access 子窗体并获取列可见性

在子窗体中输入数据时,MS Access 会自动在主窗体中填写 id

MS Access VBA - 在数据表子窗体中显示动态构建的 SQL 结果

如何在 Ms 访问子窗体中显示记录集数据