首页 > 解决方案 > 如果父项已经存在,如何让 Access 数据库自动附加子记录

问题描述

我有一个访问数据库,我用它来跟踪传入原材料的质量。通常,我收到的原材料是织物。我为此构建的表单具有三层:

1- 装运级别信息(采购订单编号、装运总卷、供应商、日期)
2- 卷级别信息(织物细节、尺寸、质量分数)
3- 缺陷级别信息(在卷上发现的缺陷、尺寸、严重性)

一个货物可以有很多卷,一卷可以有很多缺陷,因此我的表格有三层。请参阅下图以供参考。

在此处输入图像描述

我想要完成的是,每次检查员输入 PO# 时,如果货物已经存在于数据库中,它将提取总卷数、供应商和收货日期,并允许添加更多子记录。如果 PO# 尚未在数据库中,它将允许一个新条目。

我已经尝试了一些东西,但我不太确定从哪里开始。预先感谢您的帮助!

标签: formsms-accessvba

解决方案


几个问题,几个部分:确保满足这些假设。Shipments 表有一个自动编号的主键列,标记为 ShipmentID(没有提供足够的信息来确保我们可以使用 PO# 作为主键)。同样,Roll 表有 RollID,但也添加了相应的 ShipmentID 作为外键,以形成适当的一对多关系。同样,给 Defects 表一个 DefectID 主键,并添加相应的 RollID 作为外键。如果您需要重做表格,请单击相应的表格并使用表格向导。它还有助于将一对多关系添加到数据库工具下的关系图中。

关键是表单的滚动和缺陷部分需要是子表单,以便在您更改 PO# 和 RollID 时进行过滤。因此,如果您必须重建您的表单,那么首先:制作一个看起来像您表单的缺陷和滚动部分的缺陷和滚动表单。然后将新的缺陷表格拖到新的轧辊表格上,将弹出一个向导,将缺陷子表格添加到您的轧辊表格中。然后重复通过将现在具有缺陷子表单的卷表单拖动到看起来像您的货运部分的货运表单上。

  1. 默认情况下,访问将使用记录选择器安装每个新表单和子表单。这些记录选择器允许用户循环浏览记录和添加新记录。与他们一起玩或在线查看以了解记录选择器的工作原理。这里有一些很好的提示:

https://www.youtube.com/watch?v=90eOatOmHZA

我认为如果您隐藏记录选择器然后添加等效按钮(如本视频中所示),它会使表单更易于使用:

https://www.youtube.com/watch?v=gL1taUzLQGE

  1. 要通过键入 PO# 来过滤表单,请在表单中添加一个未绑定文本框。然后修改未绑定文本框的 OnChange 事件像这样:
Private Sub txtPOSearch_Change()
Dim strFilter As String
If Me.txtPOSearch.Text <> "" Then
‘ assuming 34 is typed in txtPOSearch then strFilter will equal: “PO# like “34*”
 strFilter = "PO# like " & Chr(34) & Me.txtPOSearch.Text & Chr(42) & Chr(34)
         Me.Filter = strFilter
        Me.FilterOn = True
    Else
       Me.Filter = ""
        Me.FilterOn = False
    End If
    Me.txtPOSearch.SetFocus
    Me.txtPOSearch.SelStart = Len(Me.txtPOSearch.Text)
End Sub

资源:

https://answers.microsoft.com/en-us/office/forum/office_2007-access/filter-a-form-with-unbound-text-box-in-microsoft/aa6ebf52-c51a-4d28-8933-9618fdb6fee2

  1. 假设供应商和收货日期在发货表中,它们将自动工作,但如果总角色包含在发货表中,则将其删除,因为它是多余的。而是将总角色文本框设置为如下表达式:

DCOUNT("RollID","角色","ShipmentID = " & [ShipmentID])


推荐阅读