如果已经存在父级,如何使Access数据库自动追加子级记录

时间:2019-01-25 21:26:18

标签: vba forms ms-access access-vba

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

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

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

enter image description here

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

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

1 个答案:

答案 0 :(得分:1)

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

重点是表单的滚动和缺陷部分必须是子表单,以便在更改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”,“ Roles”,“ ShipmentID =”&[ShipmentID])