我可以更新查询中的计算字段吗

Posted

技术标签:

【中文标题】我可以更新查询中的计算字段吗【英文标题】:Can I update calculated field in the query 【发布时间】:2017-10-17 08:05:15 【问题描述】:

我有两张桌子。在表 1 中,我有 2 列,如下所示,Doc No 是 (pk)

Doc No                 Title            
--------               -----------
Doc-0001               test-0001
Doc-0002               test-0002

在表 2 中,我还有两列 Doc No (pk)、Transmittal (pk)

 Doc No         Transmittal
 --------------------------
 Doc-0001       TT-0001
 Doc-0001       TT-0002
 Doc-0002       TT-1000

现在我想创建一个基于表 1 的具有 3 个字段的表单,如下所示,如果我在 table2 中的每个 Doc No 都有相关记录,它会显示在表单中,并在表单中勾选复选框,当未勾选复选框时它删除了相关记录表2。

我已经考虑过以下步骤,但我有一些疑问:

    我必须编写一个基于 table1 的查询,它有一个计算列,如果在表 2 中找到相关记录,则返回 (0) 或 (-1)。

    Doc No              title           checkbox
    

    取消选中复选框时,我必须为删除表2中相关记录的表单的复选框编写更新前事件。

我的问题是关于查询中的计算列。我可以更新吗?

我的意思是我可以在表格中取消勾选吗?或者只是它是一个只读字段,我无法勾选或取消勾选,因此事件过程对此不起作用?

请问有什么解决办法?

【问题讨论】:

ms-access 不是 SQL Server。 【参考方案1】:

包含计算字段的查询不可更新。

请参阅Johnny Bones 的this questions answer,了解查询何时可更新和不可更新的概述。

如果要在表单中使用计算字段,则不应在基础表中进行计算,而应在要在其上具有计算字段的控件的控件源中进行。

但是,这仍然使计算字段成为只读字段(不过,与在查询中使用计算字段时相比,表单的其余部分不会是只读的)。要解决这个问题,您需要在 VBA 中进行所需的计算,并在 VBA 中更改字段时编写所需的行为。

使用 VBA 方法的示例:(计算字段存储 2 个字段的总和,更改它会更改第一个字段)

Public Sub Form_Current()
      MyUnboundTextbox.Value = Field1.Value + Field2.Value
End Sub

Private Sub MyUnboundTextbox_AfterUpdate()
      Field1.Value = MyUnboundTextbox.Value - Field2.Value
End Sub

【讨论】:

谢谢,你的意思是,我必须在我的表单上放置一个未绑定的复选框,然后使用表单的当前事件定义 chebox 的控制源。然后它将是可更新的?如果可能,请提供简短代码或解释。 不,如果您正在使用计算并希望它可更新,则需要在 VBA 中处理所有这些。请参阅示例。 非常感谢,当我的表格是连续表格时是一样的吗? 不,那不可能

以上是关于我可以更新查询中的计算字段吗的主要内容,如果未能解决你的问题,请参考以下文章

您可以对子表单中的计算字段求和吗?

我可以在不直接更新模型的主干表单中拥有表单控件吗?

在 Access 中的查询中使用 DSum 函数中的计算字段

MySQL 查询以计算电子邮件地址字段中的唯一域

mysql 可以group by 两个字段吗

是否可以在脚本字段中访问查询词?