访问:更新不可更新查询中的数据的变通方法?

时间:2014-04-09 17:11:32

标签: sql ms-access

tldr:由于聚合函数,无法从查询中更新记录。您建议了哪些变通方法?

我有一个包含决策标准的表,用户可以为其指定相对权重。我使用聚合函数计算SQL查询中的绝对权重(如此处所述Divide the value of each row by the SUM of this column)。

qryDecisionCriteria
name             relative_weight    absolute_weight (calculated)
price             2                 50 %
quality           1                 25 %
experience        1                 25 %

我想以一种形式呈现查询结果,用户可以更新相对权重,然后看到 absolute_weights。 但是,查询结果不可更新,因为查询涉及聚合函数。

我可以使用哪些替代方法或变通方法,以便用户可以编辑relative_weights并将absolute_weights视为一种视觉反馈?

我在这里阅读了临时表http://www.fmsinc.com/MicrosoftAccess/query/non-updateable/index.html,但我不确定,如何实现这一点。 也许我还可以创建一个额外的"编辑表格"基于简单查询,当用户在qryDecisionCriteria数据中选择记录时自动调用? 或者只是在表单中显示来自两个查询(一个可更新,一个带有计算字段)的数据?

您会推荐哪些选项?为什么?

1 个答案:

答案 0 :(得分:2)

为表单创建Record Source可更新的基本查询。在显示计算的绝对重量的文本框中,将控制源设置为

=DSum("relative_weight","<base table name>")/Forms!<Form Name>!relative_weight

您需要确保使用此

做两件事
  1. 将字段拖到Access中的表单上时,它会使控件的名称与控件源列相同。这真的很烦人,可能会引起很多麻烦。将控件重命名为txtColumnName。这样Forms!<Form Name>!relative_weight保证引用字段而不是文本框。
  2. relative_weight文本框的AfterChange事件中,您应该添加一个事件处理程序,其中运行以下代码

    txtabsolute_weight.Requery
    

    这将确保每当有人改变体重时重新计算公式。否则他们需要点击F5。