【问题标题】:Access 2013 - launch ‘new record’ form with foreign key pre-populatedAccess 2013 - 启动“新记录”表单,预填充外键
【发布时间】:2013-10-18 09:52:45
【问题描述】:

我的 Microsoft Access 2013 数据库包含三个主表:主供应商表、产品表和产品的从表(如果产品是矩阵(多种变体,如颜色)而不是单个独立产品)。

我已经使用本教程使用 Access 2013 创建了一个相当不错的界面:https://www.youtube.com/watch?v=4ei0PFrDUa0 创建从供应商填充的下拉列表,以限制显示的产品来自该供应商。我还能够在嵌入式产品数据表 (https://www.youtube.com/watch?v=GopSdt4QNck) 中创建一个链接,以便为任何一个产品启动一个表单来编辑该产品(一个链接而不是一个按钮,因为数据表不能包含按钮)。

我现在的困难是我想在嵌入式产品表单下方放置一个按钮,该按钮不仅可以启动用于添加新产品的空白表单,还可以使用供应商的 ID 预先填充产品的外键从下拉菜单中。

所以请记住,我现在有三个表单,我想添加第四个。一种表格是包含下拉菜单的整体“供应商”表格。该下拉菜单会修改其中的嵌入表单(“产品展示”),以仅显示从下拉菜单中选择的供应商的产品。嵌入表单的行仅显示关于产品的两个最重要的信息(我们在内部使用的代码及其名称)和一个链接。此链接与该产品相关联,并启动一个“产品编辑”表单,该表单使用该特定产品预填充表单以进行编辑(并包含该表中的所有详细信息)。

这就是三种形式。我现在想在第一个表单(带有下拉菜单的表单)中添加一个按钮,该按钮启动类似于“产品编辑”表单的“产品创建”表单,但只有基本字段和外键 (供应商 ID)预填充到单击按钮之前在下拉列表中选择的最后一个供应商。这意味着每次使用下拉菜单时按钮都必须动态更改。

问题是,我不知道如何在 Access 2013 中执行此操作。使用带有向导的标准按钮确实允许我生成一个新的“产品创建”表单,但无法预先填充仅使用向导本身的外键。另外,我不知道每次使用下拉菜单时如何让按钮自动修改。

【问题讨论】:

    标签: ms-access ms-access-2013


    【解决方案1】:

    让我看看我能不能解释清楚。

    假设你有两个表格,附有表格:

    • 父表单
    • 子表单

    每个附加表定义为:

    家长:

    ParentID (AutoNumber)
    ParentName Text
    

    孩子:

    ChildID (AutoNumber)
    ParentID Long Integer
    ParentName Text
    

    每个表单都显示了它的所有字段。父窗体有一个添加子窗体的按钮。

    父表单上的 VBA 代码是:

    Private Sub AddButton_Click()
      DoCmd.OpenForm FormName:="Children", view:=acNormal, OpenArgs:=Me.ParentID
    End Sub
    

    子窗体上的 VBA 代码是:

    Private Sub Form_Dirty(Cancel As Integer)
      Me.ParentID = Me.OpenArgs
    End Sub
    

    那么这是如何工作的呢?我们通过 OpenArgs 参数将 ParentID 传递给 Child 表单。 (http://msdn.microsoft.com/en-us/library/office/ff836583.aspx)

    在修改任何记录之前,会触发 Dirty 事件(当用户在新记录中键入第一个字符时)。我们定义了 Dirty 事件来设置 ParentID。

    理论上,您可以填充多个外键或值。您需要将它们打包成一个分隔字符串,然后在孩子的 onDirty 事件中解包。

    希望对您有所帮助。

    【讨论】:

    • 我选择你的答案是正确的,因为逻辑是合理的。我找到了另一种执行此操作的方法,它同样方便且不会打开新窗口。
    • 我把第二个表单撕下来,放到一个标签界面,把第二个表单放到标签界面(重新创建主子设置),把纯录入表单放到第二个标签里面设置相同的主字段和子字段。我唯一需要做的就是将 Data Entry 属性更改为 Yes,这样表单本身就不会出现预先存在的内容——只有一个用于输入数据的空白表单。这样,即使我在该选项卡上,从下拉菜单中切换供应商总是会给我一个空白的输入表单,但具有不同的外键(对于适当的供应商)。
    • 我假设“启动“产品创建”表单”是指在其自己的窗口中创建一个新表单 - 这就是我概述该方法的原因。很高兴你明白了。
    • 实际上,我最初希望在自己的窗口中创建产品创建表单,但发现复制产品显示表单的加载功能(通过将其添加到与产品显示表单相同的供应商表单)最终变得更简单。它最终可能不会像单独的窗口那样高效,但现在它可以工作。我已经标记了您的答案,以便具有相同目标的其他人受益。在这个项目的未来,我可能仍然需要类似的东西,所以谢谢。
    猜你喜欢
    • 2018-08-06
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多