【问题标题】:How to Filter On Load with Microsoft Access Navigation Forms如何使用 Microsoft Access 导航表单过滤加载
【发布时间】:2015-10-05 13:38:06
【问题描述】:

我有一个带有 3 个选项卡的导航表单。房屋、客户、装饰。

在导航表单上,我有一个未绑定的字段 LOTNUMSELECT。

在每个选项卡的子表单上,它都有一个名为 LOT_NUMBER 的字段。

由于导航表单似乎无法实现主/子关系,因此我正在寻找子表单以在加载时进行过滤。

用户在 LOTNUMSELECT 中输入很多#,然后点击一个选项卡。 When the tab becomes current, the specific lot # (record) is showing.

我一直在从“控制面板”表单中执行此操作,并使用以下代码打开另一个表单。

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "Decor"

If IsNull(LotNumberSelect.Value) = True Then

MsgBox "Please enter a lot number first."

Else
stLinkCriteria = "[Lot_Number]=" & "'" & Me![LotNumberSelect] & "'"
DoCmd.OpenForm stDocName, , , stLinkCriteria
End If

我只是不知道如何编辑它以使用导航表单和子表单。

【问题讨论】:

    标签: forms vba ms-access navigation subforms


    【解决方案1】:

    导航控件有两个部分。导航菜单和一个导航子窗体。每个导航按钮(又名选项卡)都会将目标表单加载到导航子表单控件中。一次只能将一个表单加载到导航子表单中。 由于导航子表单会打开您的目标表单,因此您可以使用标准的“form_open”方法来设置您的过滤器或相应地设置您的记录集。 您所要做的就是单击表单打开事件,然后在该事件中,您只需通过

    即可访问父控件
     dim lotno as long
    Lotno = nz(me.Parent!controlname.value,0)
    If lotno <> 0 the 
    ' do your filter or recordset operation
    End if
    

    您也可以使用 form_load 事件。由于您要在加载后执行过滤器,因此最好在 form_open 上进行设置。这将提高你的表现。

    【讨论】:

    • 我得到了您的答复,并在其中添加了一些文字。我的主要问题是使用选项卡式控件的性能是否会更好。似乎许多子窗体都链接到主窗体上的控件,并且更改此控件需要影响子窗体的所有记录源。如果使用导航控件而不是选项卡控件,则在不更改 LOTNUMSELECT 控件的情况下从上一个选项卡切换选项卡和返回到前一个选项卡将导致更多查询。
    • 在主表单中更改批号将需要在导航子表单上重新查询。由于您的表单将始终在加载时进行查询,因此您无需添加额外的代码。但这当然取决于你想走哪条路。
    • @HarveyFrench 抱歉看不到您的编辑,已被版主拒绝
    • 该死的。我以为他们会的,他们太敏感了。我只是在它周围添加了一个 IF 语句来测试我。parent 什么都不是,因此该表单仍然可以独立于主表单使用。我还提到了主窗体控件需要有一个更新后事件,该事件将运行过滤子窗体的代码。此外,只需重申选项卡控件是否会更好,因为它会在每个选项卡中加载保留数据(如果您愿意)并允许主表单控件过滤数据。
    • 附言。与其使用重新查询,不同的过滤器可能会更快。
    【解决方案2】:

    第二部分

    做了一些实验,我有了更多的想法。

    我不认为导航控件适合您的情况。导航控件似乎没有事件和属性,可让您将其链接到具有导航控件的主窗体上的控件(我认为这是您正在尝试做的事情)。

    我认为您会发现使用“选项卡控件”更容易,在这种情况下更易于使用。

    我认为导航控件确实设计为一个菜单,允许您访问其中的其他表单和报告。

    以下是有关使用标签控件的视频链接: video 1 Video 2

    以下是一些有关使用导航控件的视频链接: video 1 video 2 video 3

    以下是我对导航控件所做的一些注释:

    导航控件有一个“导航子表单”,它没有任何主/子数据链接字段。但是,这个子窗体不是普通的子窗体。

    使用导航控件,您必须将导航按钮(在导航菜单中)的“导航目标名称”属性设置为您希望在单击按钮时出现在导航子窗体中的表单。

    此外,该按钮还有一个属性“Navigation Where 子句”,我相信该属性可用于设置在加载表单时过滤显示的行。当在主窗体上使用控件时,似乎没有允许您更改此过滤器的事件。 .

    【讨论】:

    • 你完全失去了我。我的 VB 技能达不到你的标准。
    • 请看我回答的第二部分
    • 我以前使用过选项卡控件,但问题是它会在表单打开后立即加载所有数据。由于我们在路上使用这个数据库(通过 MYODBC 连接到 mysql),一次加载所有数据是没有好处的。这就是为什么我认为导航表单是最好的,因为它在切换标签时“卸载”数据。
    • 观看我链接的视频。他展示了如何只为单击的选项卡加载表单。另外,请注意,一旦为选项卡加载了数据,您最好保留它,即使单击了另一个选项卡。如果用户再次单击第一个选项卡,这可以节省再次获取数据的时间。您可以使用 VBA(以及健身房中的肌肉 ;-) 建立智能。
    • 这个就是你需要的:youtube.com/…
    猜你喜欢
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多