繁体   English   中英

MS ACCESS:表格和子表格完全链接? 还是表格和未绑定的连续子表格?

[英]MS ACCESS: Form and subform to fully link? or Form and unbound continous subform?

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

截屏

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

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

我有多个问题要达到使此表单工作的目标:

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

您是否有任何提示或想法可以使这项工作在访问中发挥作用?

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

谢谢!

编辑1:

基本上,在创建 PO 时,工作流程是首先添加一般信息,例如,谁在创建 PO、什么日期、它与什么项目相关等; 这些 go 到“主 PO”表。 然后,您想实际将项目添加到此 PO,因此您有多行(例如,您需要 1x 包螺丝,然后需要 2x 包螺母等)。 完成 PO 后,您最终可以使用“保存/更新 PO”按钮将其保存,这会将所有内容保存在专用表中。

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

设置标志或公共变量是我研究过的,但我不确定在向子表单中添加项目时如何停止主表单的输入。

弄脏父文件也是我想过的; 但这意味着我们在创建 PO 时将有 2 个“通用数据”实例,因为您将首先将项目添加到主 PO 字段中,然后移动到 PO 内容子表单,该子表单将自动将主 PO 数据保存在 ID 下#. 然后,当实际向子表单添加项目时,它会重新整理父表单,为相同的数据创建另一个 ID#;

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

我不确定需要多少 VBA。 父表(父窗体)的保存在 Access 中是自动的。 在您将焦点更改为子表单的那一刻,父表单记录被保存(它真的很好,它以这种方式工作)。

至于子表格中的更改/修改,您需要更新父母表格的订单号吗?

好吧,除非您对那一行进行了更改,否则子表单中的更改前事件不会触发。 所以你可以go:

me.Parent.form!PONum = "some new number".

但是,不清楚您是否只想对子表单中的多个更改进行一次更改,或者您想对一个给定的 go 中的“许多”更改执行此操作?

我敢打赌,即使您更改了几个子表单行,这个新的 PO 更新也只会发生一次。 所以,这可能是一个挑战。 在这种情况下,我可能会在子表单(公共变量 - 代码模块的开始)中设置一个表单级别标志。因此,一旦任何更改事件触发,它可以设置这个标志,表明一个或多个记录已被更改。因此,此时,我们需要一个“时间点”,在这个时间点,我们更新父表单,因为其中一个或几行已经更改。注意,父表单可以查看,get/grab/test/查看子表单中的“标志”是否显示更改。那么,问题是用户在完成后如何“行动”?因为他们可能会决定在该子表单中需要进行更多更改 - 并做一些更多的编辑。但是,如前所述,这仅意味着我们的子表单更改标志仍将显示为真。

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

在这种情况下,我实际上要做的是确保用于编辑的子记录会导致主记录变脏。 这样,无论用户如何离开当前的主记录,更改前的事件都会触发,此时您可以检查子表单是否有更改(使用该标志)。 因此,您可以在某个时间点更新新的采购订单号,并将记录复制到更改历史记录中。 (应该只有几行 VBA - 2-3 插入也许?

编辑:好的,一个紧迫的问题当然是如何完成整个事情,但没有必要保存它。 好吧,通过绑定 forms,我们可以节省大量代码。 但是我们如何处理一些可能没有完成、没有必要完成、可能需要更多编辑的事情,然后我们就完成了?

好吧,毫无疑问,最终用户并不关心关系数据库理论,当他们看到一个表单时,他们只会想到“保存”。 但是当我们引入相关数据(例如子表单)时,访问不是这样工作的。 但是,我们没有能力将主表单(表)和子表单(表)包装在一个事务概念中。 您可以在其他系统中执行此操作,但话又说回来,它们使用的是断开连接的记录集,并且不像我们在 Access 中那样编写用于编辑的代码可以节省大量成本。

例如,我有一个募捐系统。 问题在于,在数据输入期间,您必须输入所有捐款。 就像经典的快速书屏幕一样,您会输入 100 美元,但随后必须将该金额分成多个帐户。 而且我不允许保存数据,除非拆分金额与主要记录捐赠金额相匹配。 但是,既然我们没有“保存”,那就是表单+子表单的结果?

好吧,我介绍了他们过去的所作所为。 - (批处理),所以。 我允许用户为一个事件输入许多 dontaitons。 他们可以拆分每个金额的帐户,他们可以编辑,可以添加,可以改变主意 - go 离开,go 用于咖啡。 回来再编辑一些。 但是我添加了一个 POST 工作按钮,所以,当他们输入数据后,1 捐赠,也许 20,当他们点击发布完成工作时。 我然后检查拆分金额是否与捐赠金额匹配,如果不匹配。 然后我不允许他们发帖,但是。 该帖子不是发布数据的大型计算机运行。 它只是主要后期运行中的一个字段。 因此,除非金额匹配,否则您不能发布,并且一旦发布。 然后我不允许他们编辑或更改该数据:屏幕如下所示:

在此处输入图像描述

那么,在上面? 那就是事件(日期、时间、附加信息)。 它还具有批处理运行和psoting 状态。 左边是人+捐款金额,右边是给定金额的拆分。 (如果拆分出的金额与捐赠金额相匹配,则总框变为绿色。但我仍然允许他们继续工作——即使金额不匹配。但直到设置了张贴标志?然后我不包括那个报告和系统中的数据。因此,发布不会移动记录或任何东西 - 但我只更改所有记录所属的一批标志。我在提取该数据的查询器中包含该已发布标志 - 如果没有发布标志,那么直到发布批处理运行时,该 rocord 才被认为是有效的,并且一旦发布。那么他们就无法编辑该数据。

在您的情况下,您可以有一个编辑按钮。 在他们点击编辑之前,您不允许对表单 + 子表单进行任何编辑。 一旦他们这样做,你翻转允许编辑=真,然后他们可以自由编辑主+子表单。 但只有他们有按钮“完成”编辑(这可能是与编辑相同的按钮 - 你隐藏一个显示另一个)。 这样,您就有了一个工作周期,他们在其中开始编辑,并且必须完成编辑。 完成后。 您甚至可以在他们离开或关闭表单时提示是否发布。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM