Sql MS ACCESS:要完全链接的窗体和子窗体?还是窗体和未绑定的连续子窗体?

Sql MS ACCESS:要完全链接的窗体和子窗体?还是窗体和未绑定的连续子窗体?,sql,forms,ms-access,unbound,continuous-forms,Sql,Forms,Ms Access,Unbound,Continuous Forms,我正在尝试设计一个名为“Master PO”的采购订单表单,它包含一个名为POContent的连续子表单。为此,我使用了两个名为tblMasterPO和tblPOsContent的表。以下是它的屏幕截图: 关键点在于主订单表单是一个拆分视图,顶部是数据表视图,底部是文本和组合框的组合。“采购订单内容”子表单是主采购订单表单下部的连续表单 在我的公司,我们试图记录我们对采购订单所做的每一次更改,以便将来进行分析,因此需要一个PO修订号。我们的想法是,每当我们对主订单或订单内容进行更改时,当用户使

我正在尝试设计一个名为“Master PO”的采购订单表单,它包含一个名为POContent的连续子表单。为此,我使用了两个名为tblMasterPO和tblPOsContent的表。以下是它的屏幕截图:

关键点在于主订单表单是一个拆分视图,顶部是数据表视图,底部是文本和组合框的组合。“采购订单内容”子表单是主采购订单表单下部的连续表单

在我的公司,我们试图记录我们对采购订单所做的每一次更改,以便将来进行分析,因此需要一个PO修订号。我们的想法是,每当我们对主订单或订单内容进行更改时,当用户使用(大量)VBA代码单击“保存/更新订单”按钮时,我将使用更新的数据创建一个新记录。表单/子表单组合实际上并不是调用它的最佳方式,因为它实际上应该是2个完全链接的表(如果PO内容发生更改,则主PO也将使用新ID更新)

我有多个问题要实现此表单的工作目标:

  • 确保我可以自由切换到表单和子表单字段的最佳方式/实践是什么?例如,同时弄脏两张桌子?或者有一个未绑定的连续子窗体?还是临时桌子
  • 如果我使用未绑定的连续子表单,如何让用户在向采购订单添加新项目时添加行?例如,我希望用户单击数据表表单查看采购订单,然后在未绑定的子表单中填充采购订单内容项。但是,当用户单击“新建PO”按钮时,他在任何主PO和PO内容字段中都没有数据,因此用户可以在表单和子表单中添加项目,最后通过单击“保存/更新PO”按钮保存所有内容
您有什么建议或想法可以让访问工作顺利进行吗?

我知道会有很多VBA,但我期待它;我只是想从经验丰富的access程序员那里找到解决方案

谢谢大家!

编辑1:

基本上,在创建采购订单时,工作流首先添加一般信息,例如,谁创建采购订单、日期、与之相关的项目等;这些将被放入“主PO”表中。然后,您希望实际将项目添加到此PO中,因此您有多行(例如,您需要1组螺钉,然后是2组螺母等)。完成采购订单后,您最终可以使用“保存/更新采购订单”按钮保存采购订单,该按钮将保存专用表中的所有内容

如果我开始向子窗体添加项目,父窗体确实会自动更新,但这正是我在子窗体中添加部件时试图“暂停”的内容。“最简单的”可能是有一个表将两者结合起来,但如果我必须为每个“采购订单内容”行保存相同的一般信息,数据库将增长得非常快(意味着每次我向采购订单添加一个项目时,我都会保存供应商、用户名、订购日期;对于我订购的每一件商品,对于每一次修订,对于每一次采购订单,我的表格中都会有大约100+列

设置标志或公共变量是我研究的内容,但我不确定在向子窗体添加项目时如何停止主窗体的条目

弄脏父文件也是我考虑过的事情;但这意味着在创建采购订单时,我们将有两个“常规数据”实例,因为您将首先将项目添加到主采购订单字段,然后移动到采购订单内容子表单,该表单将自动将主采购订单数据保存在ID#下。然后,当实际向子窗体中添加项时,它会将它们重新提交父窗体,为相同的数据创建另一个ID


我们可以同时合并两个条目吗?某种类型的2表完整链接,因为其中一个不存在而没有另一个?

我不确定需要多少VBA。 在Access中,父表(父窗体)的保存是自动的。当您将焦点更改为子窗体时,父窗体记录就会被保存(这样做真的很好)

对于子表单中的更改/修改,您需要更新父表单PO号吗

嗯,子窗体中的“更改前”事件不会激发,除非您对该行进行了更改。所以你可以去:

me.Parent.form!PONum = "some new number".
但是,不清楚您是希望子表单中的多个更改只进行一次更改,还是希望在一次给定的go中进行“多个”更改

我打赌这个新的PO更新只会发生一次,即使您更改了几个子表单行。因此,这可能是一个挑战。在这种情况下,我可能会在子表单(Public var-代码模块的开始)中设置一个表单级标志。因此,一旦触发任何before change事件,它可以设置一个或多个记录已更改的标志。因此,此时,我们需要一个“点”由于一行或多行已更改,我们更新父窗体的时间。请注意,父窗体可以查看、获取/获取/测试/查看子窗体中的“标志”是否显示更改。因此,问题是用户如何“采取行动”什么时候完成?因为他们可能会决定在子表单中需要更多的更改,并进行更多的编辑。但是,如上所述,这仅仅意味着我们的子表单更改标志仍将显示为true

因此,关键问题就变成了在什么时间点以及我们如何决定它们被完成?一旦我们确定了这一点(可能关闭表单???),那么我们就有了一个时间点,在这个时间点我们知道子表单行(1行或多行)已经更改。因此,当我们离开记录时,我们需要在主窗体中检查此已更改的标志,或者说关闭窗体

在这种情况下,我要做的是确保用于编辑的sub会导致主记录变脏