在实际更新数据之前将 Microsoft Access 子表单作为沙箱

Microsoft Access subform as a sandbox before actual updating of the data

我有一个带有 2 个子表单的 Access 2013 数据库:第一个提供当前数据,第二个我试图设置为沙箱 space 供用户在闲暇时进行更改和更新.当他们准备好提交这些更改和更新时,他们可以点击提交,他们的结果将更新当前数据及其背后的 table 信息。

自从我搞砸了 Access 以来已经有一段时间了,所以我不记得是否可以这样做所以我想问一下。

如果没有相当混乱的方法,这是无法完成的。 Access 中的表单始终编辑一行。

在这些情况下,我所做的是允许用户随心所欲地“编辑”。

但是,假设我们正在进行“经典”支票或输入捐款金额。所以你有一笔捐款(比如 50 美元),但你必须将这笔款项分配到各个捐款账户。

根据以上内容,您不想保存数据,直到分配给账户的金额与捐赠金额相匹配。

因为我们不能将表单+子表单包含为“单个”更新,所以我所做的是向父表单(主表单中的一条记录)添加一个 posting 标志.

然后用户可以 edit/add,出去喝杯咖啡,然后回来编辑更多内容。您甚至可以在第二天回来继续编辑。

一旦用户满意,表单上就会有一个 post 按钮。

如果用户点击 post,并且余额不匹配,则您不设置 postOK 标志 = true。

因此,以上内容不会为用户提供退出或取消对“整个事物”的编辑的方法,但它确实允许您确定输入的数据已经“平衡”并且验证。如果没有出现“平衡”,那么您可以跳过该记录,或者引入一个过程,在该过程中数据不会被 post 编辑或标记为完成,直到数据达到平衡。

这是在 Access 中向多个帐户分配“经典”资金的屏幕截图。左边可以看到捐款金额,右边是这笔金额的账户分配。

然而,在屏幕底部,用户正在处理的“工作任务”也有一个 post 按钮。当他们点击 post 按钮时,如果金额没有平衡,那么 posting 还没有完成。事实上,我让用户输入 "many" 捐款,然后他们可以一次性 "post" 以方便和加快工作速度。 "post" 实际上并不是 post,而是检查余额。所以用户 "think" 他们正在 posting,但它实际上只设置一个值(标志 POSTOK)。

所以对于 运行 一个报告,在 post 按钮被点击之前它不能是 运行。

如前所述,此方法不会为您提供退出数据输入的“退出”选项,也不允许您“撤消”数据输入,但它确实允许您验证 posting 是“好的”和“有效的”。在许多情况下,这种方法就足够了。

但是,如果您正在为表单 + 子表单编辑寻找某种“撤消”,那么 Access 非常不适合该类型的业务模型和编辑。

我建议您为沙盒设置一个本地临时文件 table。

然后当你说 'When they are ready to submit those changes and updates they can hit submit and their results will update the current data and table info behind it.' ...... 而发生的是 Sandbox Temp table 记录附加或 inserts/updates 实际 table.

如果这是一个拆分的多用户应用程序并且 Sandbox temp table 是本地的 - 那么数据确实是临时的并且更新必须发生在用户的会话中。但整体设计非常简单。

在最终回到这个领域之后,我意识到我正在通过 Excel 中的方式来看待 Access 开发;两种不同的生态系统。我摘下了我的 Excel 表格开发镜头,我想到了一些我认为可能会帮助其他人进行类似斗争的事情:

  1. Access 和 Excel 是不同的 VBA 开发生态系统。您不一定在 Excel 中编写代码并期望它在 Access 中完美运行。
  2. 子表单只是一个表单...和所有表单一样,它的控件、代码和行为不会在功能上发生变化,但在基于表单类型(数据表、连续等)的表示中会发生变化。
  3. 独立对待每个表单和事件代码。如果您在父级上的子表单需要在用户添加、更新、删除、验证等时启动事件,则该代码应属于构成子表单的表单……而不是父级。
  4. 父表单应该只控制子表单的过滤和结果,以及它自己的用户操作集。
  5. Screen 方法很棒,我认为它可以挽救我跟踪更改的生命。很棒 link 这里:https://www.datawright.com.au/access_resources/tracking_data_changes_in_access.htm