MS Access将计算字段插入表字段

时间:2017-03-08 18:41:14

标签: sql sql-server vba ms-access

我试图让一个表单控件执行以下操作作为控件来源,将其添加到关联表中的字段。

=[Company] & " " & IIf([Cable]="Fiber","FO Cable","CC Cable") & " " & [CableStartPoint] & "-" & [CableEndPoint]

当输入关联字段时,上面在表单控件中显示以下内容 - >公司FO Cable Start-End

我尝试过使用After Update中的表达式和其他On ...属性。这给我留下了一个空白值。

我的下一步是使用VBA,我尝试使用VBA这个问题(Access form calculated fields),但我的VBA技能似乎减少了一些,我不知道如何继续满足我的需求...... :(

我的主要目标是不必为此手动输入信息,以防止拼写错误并输入已存储在数据库中的冗余信息,例如公司,起点和终点。

如果可以使用SQL完成,我也对该解决方案感兴趣。这是我认为我需要的SQL,虽然我不确定更新记录的位置(After,Before或只是使用Code构建器)。

UPDATE tblCableDetails
SET CompletedLabel=Form!CableDetails!Label.Value
WHERE CableDetailsID=Form!CableDetailsID.Value

我想将这些存储在数据库中而不是在需要时运行表达式的原因是,我想在另一个表中使用此值作为查找另一个表单来跟踪有关电缆的细节。

谢谢大家的时间!

2 个答案:

答案 0 :(得分:1)

如果所有字段都在同一个表中,则Access表具有可在表的设计视图中访问的计算数据类型,这将很容易处理。这将是你最简单的路线;只需在计算字段中使用您的表达式,如下图所示。请注意,计算字段在未来有其他潜在的限制,但我不会过分担心。您计算的字段的名称将为CompletedLabel,Access将根据表达式中的其他字段当前值维护其值。

enter image description here

如果字段不在同一个表中并且表单已绑定且Access正在处理保存(意味着表单具有RecordSource属性,并且您在用户更改值时让Access处理保存记录,则它们会导航对于新记录,他们关闭表单等),您可以添加一个VBA BeforeUpdate事件,在事件自动保存字段之前标记列。只需将CompletedLabel字段添加到表单(可以隐藏),然后创建Before更新事件:

Private Sub Form_BeforeUpdate(Cancel As Integer)
   Me!CompletedLabel = [Company] & " " & IIf([Cable]="Fiber","FO Cable","CC Cable")    & " " & [CableStartPoint] & "-" & [CableEndPoint]
End Sub

在某些情况下,您甚至不需要表单上的CompletedLabel文本框,但它必须位于表单所基于的记录源(查询或表)中。它也必须是可编辑的,可能已经是这种情况。

您可以按照建议使用SQL,也许在After Update事件中。

UPDATE 
tblCableDetails
SET 
CompletedLabel=[Company] & " " & IIf([Cable]="Fiber","FO Cable","CC Cable") & " " & [CableStartPoint] & "-" & [CableEndPoint]
WHERE 
CableDetailsID=Form!CableDetailsID.Value

或者在表单打开或关闭时使用外部查询,例如:

UPDATE 
     tblCableDetails
SET 
     CompletedLabel=[Company] & " " & IIf([Cable]="Fiber","FO Cable","CC Cable")    & " " & [CableStartPoint] & "-" & [CableEndPoint]
WHERE 
     CompletedLabel = null Or Nz(CompletedLabel,"") = ""

您还可以创建包含表达式的查询,并在需要查看计算值的位置使用它。

很多可能性。祝你好运,Tag !!

答案 1 :(得分:0)

这不是通过执行计算的事件属性中的表达式来完成的。

需要宏或VBA代码来保存计算数据,我更喜欢VBA。

此表单是否绑定到要将数据保存到的表中?如果是这样,适当的方法就是:

我!fieldname = Me.textboxname

正如您所发现的那样,真正的技巧是找出将此代码放入的正确事件。在首选事件属性中选择[事件过程],然后单击省略号(...)转到VBA过程并键入所需的代码。