我可以更新查询中的计算字段吗
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 中处理所有这些。请参阅示例。 非常感谢,当我的表格是连续表格时是一样的吗? 不,那不可能以上是关于我可以更新查询中的计算字段吗的主要内容,如果未能解决你的问题,请参考以下文章