Forms 如果父记录已经存在,如何让Access数据库自动附加子记录

Forms 如果父记录已经存在,如何让Access数据库自动附加子记录,forms,ms-access,vba,Forms,Ms Access,Vba,我有一个access数据库,用于跟踪进厂原材料的质量。通常,我收到的原材料是织物。我为此构建的表单有三层: 1-装运级别信息(采购订单、装运总卷、供应商、日期) 2-卷级信息(面料细节、尺寸、质量分数) 3-缺陷级别信息(在卷上发现的缺陷、尺寸、严重程度) 一批货可能有很多卷,一卷可能有很多缺陷,因此我的表格有三层。请参见下图以供参考 我想完成的是,每次检查员输入PO#,如果数据库中已经存在装运,它将提取总卷、供应商和接收日期,并允许添加更多子记录。如果PO不在数据库中,它将允许新条目 我尝试

我有一个access数据库,用于跟踪进厂原材料的质量。通常,我收到的原材料是织物。我为此构建的表单有三层:

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

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

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


我尝试了一些事情,但我不太确定从哪里开始。提前感谢您的帮助

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

关键是表单的roll和defect部分需要是子表单,以便在您更改PO#和RollID时进行过滤。因此,如果你必须重建你的表单,那么首先:制作一个缺陷和转鼓表单,看起来像你表单的缺陷和转鼓部分。然后将新的缺陷表格拖到新的转鼓表格上,将弹出一个向导,将缺陷子表格添加到转鼓表格中。然后,将现在有缺陷子表单的转鼓表单拖到看起来像“装运”部分的装运表单上,重复上述操作

  • 默认情况下,access将使用记录选择器安装每个新表单和子表单。这些记录选择器允许用户循环浏览记录并添加新记录。与他们一起玩或在线查看以了解唱片选择器是如何工作的。以下是一些好提示:
  • 我认为,如果您隐藏记录选择器,然后添加与此视频中相同的按钮,则表单更易于使用:

  • 要通过键入PO筛选表单,请在表单中添加未绑定的文本框。然后修改未绑定文本框的OnChange事件,如下所示:
  • Private Sub txtPOSearch_Change()
    作为字符串的Dim strFilter
    如果Me.txtPOSearch.Text为“”,则
    '假设在txtPOSearch中键入34,则strFilter将等于:“PO#like”34*'
    strFilter=“PO#like”&Chr(34)&Me.txtPOSearch.Text&Chr(42)&Chr(34)
    Me.Filter=strFilter
    Me.FilterOn=正确
    其他的
    Me.Filter=“”
    Me.FilterOn=False
    如果结束
    Me.txtPOSearch.SetFocus
    Me.txtPOSearch.SelStart=Len(Me.txtPOSearch.Text)
    端接头
    
    资料来源:

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

  • DCOUNT(“RollID”、“Roles”、“ShipmentID=“&[ShipmentID]”)

    所以您需要搜索现有PO,如果找到,则转到该记录,如果找不到,则转到新记录行?这是一个常见主题,可以通过多种方式处理。您应该编辑问题以显示尝试的代码。一种方法使用绑定组合框的NotInList事件。另一种方法使用未绑定组合框选择要搜索的PO。建议不要使用空格或标点/特殊字符(仅下划线例外)在命名约定中。然后,如果要为新PO自动批量创建子记录,通常需要在将新PO记录提交到表后在VBA中执行INSERT INTO SELECT sql操作。刚刚意识到您指定了“已存在”-概念基本上与现有或新PO相同,只是在新记录的情况下,必须提交父记录首先,批量创建依赖记录将使用INSERT INTO SELECT并将所选值连接到SQL字符串。这是正确的。滚动表单部分的第二部分需要是一个子表单,然后结构将是该子表单的一个子表单。因此,我们嵌套了3个深度。这些子记录不会自动添加,但只有在用户启动时才会添加ts输入数据(因此,如果在这些子表单中没有输入,那么就可以了)。因此access将自动维护这些关系,但不需要自动添加这些子记录,access也不需要添加它们-用户需要。感谢您的建议!这是我一直在寻找的答案。唯一棘手的是,我不希望滚动和缺陷表单过滤到我的主表单上。我只是想要购买或删除要调用的数据级别。PO永远不会被复制,因此我认为它可以安全地用作唯一标识符,但使用自动编号可能更容易。我明天晚上在工作时会考虑这个问题,因为我可以访问访问权限。我不确定你指的是什么。因此,如果你仍然有问题,请设置一个新问题。
    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