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 子窗体不显示记录且不导航的主要内容,如果未能解决你的问题,请参考以下文章
在子窗体中输入数据时,MS Access 会自动在主窗体中填写 id