我可以在查询

时间:2017-10-17 08:05:15

标签: ms-access

我有两张桌子。在表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个字段的表单,如下所示,如果我在表2中有每个Doc No的相关记录,它在表单中显示,并在表单中勾选复选框,并且在未勾选复选框时它删除了相关记录table2。

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

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

    Doc No              title           checkbox
    
  2. 我必须为表格的复选框写一个更新前事件,以便在取消勾选复选框时删除表2中的相关记录。

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

    我的意思是我可以在形式中取消它吗?或者只是它是一个只读字段,我不能勾选或取消它,所以事件过程不起作用?

    请问有什么解决方案?

1 个答案:

答案 0 :(得分:0)

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

this questions answer旁边的Johnny Bones,了解查询是否可更新的概述。

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

但是,仍然会使计算字段为只读(但是,与在查询中使用计算字段时相比,表单的其余部分不会显示)。要解决此问题,您需要在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