【问题标题】:MS Access: Update the parent record when a child record is savedMS Access:保存子记录时更新父记录
【发布时间】:2013-01-28 01:27:03
【问题描述】:

我创建了 2 个表;资产和资产运动。我还创建了主资产表单和资产移动表单。 AssetMovements 表单本质上是 Assets 表单的副本,但它具有 AssetMovements 表作为它的记录源。我在 AssetMovements 表(AssetTag 字段)中创建了一个查找,因此用户可以从组合框中选择一个资产标签,该资产的详细信息将自动填充到表单上的其余字段中。表单上唯一可编辑的字段是指员工的“位置”和“分配给”字段。 现在,一切正常,但问题是,如果我使用 AssetMovements 表单创建新记录并保存它,则位于“资产”表中的原始记录中的“位置”字段将不会更新。同样如此用于原始记录中的“AssignedTo”字段。

有没有一种方法可以在 Assets 表中的主资产记录上创建新的 AssetMovement 时更新该记录?

【问题讨论】:

  • 您必须将 LocationAssignedTo 存储在 Assets 表中吗?似乎您可以根据需要从与该 AssetTag 匹配的最新 AssetMovement 记录中检索它们。
  • 你是让ACCESS创建一个空白记录然后填写信息吗?
  • 你好@HansUp,如果我不将它们存储在 Assets 表中,这意味着对于新资产,我首先必须创建主 Asset i> 记录,然后创建一个 AssetMovement 记录,只是为了给资产一个位置。似乎这会使事情复杂化.. Kassabba,不,没有空白记录。

标签: ms-access sql-update ms-access-2010


【解决方案1】:

听起来你想要做的是跟踪资产的历史(它属于哪里和谁)。执行此操作的自然方法是更新资产,并在 AssetMovements 表中记录更改。

在许多数据库中,您可以使用触发器来完成此操作。无论您是通过 UI 还是直接 SQL 查询更新资产,它都不会失败。但是,MS Access 本身没有触发器。因此,您将仅限于在 UI 中执行此操作。

您可以在 UI 中通过将更新后事件添加到表单并将更改的记录复制到 AssetMovements 来执行此操作。不是反过来。否则,对于新资产,您将首先创建一个 AssetMovement,然后再创建该资产。

我也使用了 HansUp 的建议 - 即将位置/分配放入 AssetMovements,并在表单/报告中显示最新值。我对此不满意的是,它使表单更加复杂,如果您有大量更新发生,最终可能会导致性能下降。

再一次,如果您的数据库变得足够大以至于性能受到明显影响,那么您可能应该将数据迁移到另一种数据库。

【讨论】:

  • 感谢您的回复 CodeSlave。我正在尝试跟踪资产的历史。我认为将更改的记录复制到 AssetMovements 表中是个好主意。但是,如何在 Location 和 AssignedTo 字段上设置 After update 事件,以便在更新任何字段时,将记录的副本保存到 AssetMovements 表中?
  • 您可以在更新后事件的 Location/AssignedTo 字段上单独设置它,但这会在您每次更改其中任何一个时创建一条记录,但在您将记录提交到数据库之前。相反,我会在 Form 的 AfterUpdate 事件期间直接(通过 ADO 或 DAO)将新记录添加到 AssetMovement 表中。右键单击表单中标尺旁边/上方的框,选择属性,然后转到“事件”选项卡。这将是列表中的前几个事件之一。单击省略号并选择代码生成器。从那里,它是 VBA 代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 2023-03-08
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多