来自excel世界,如何创建条件语句以根据另一个字段的值填充一个字段,这在excel中看起来像:
=if(A1="A","Yes","No")
谢谢
编辑:
好的,我已经完成了以下工作:
=IIF([FundingStream]="A", "N/A", "Student Finance")
但我有错误: 无效的SQL语法 - 不能在列级CHECK约束中使用多个列
我在N / A或学生财务应出现的字段属性的验证规则中输入此表达式。
编辑2:
答案 0 :(得分:3)
虽然它们可以用于某些相同的目的,但关系数据库系统需要不同的范例。与电子表格相比,基于另一个设置一个列值的简单想法实际上相当复杂。如果您尝试按字面意思转换电子表格,则只会面临持续的挫败感。
验证规则中的以下语句是不是赋值,而是一个布尔比较操作:它返回true或false。它约束可以保存到数据库的值,但不会更改列值。
[Field1] = Iif([FundingStream]="A", "N/A", "Student Finance")
作为进一步的注释,一些语言有两个不同的符号用于赋值和比较,例如:=
用于赋值,==
用于相等比较。但是许多语言(如VBA)根据上下文解释单个=
。如果你理解了这种差异,那么上下文通常会变得明显,在特定情况下等号意味着什么。
根据另一个字段更改一个字段的值需要其他技术。任何代码或宏驱动环境(如Access)的灵活性提供了各种方法,这些都不能在此概述。然而,最令人浮现的两个问题是:
可能最直接的方法是在AfterUpdate事件中:
Private Sub FundingStream_AfterUpdate()
If Me.FundingStream = "A" Then
Me.LoanCRN = "N/A"
Else
Me.LoanCRN = "Student Finance"
End If
End Sub
这假设您的表单至少有两个控件:FundingStream和LoanCRN。这将做你想要的......最初。但是,现在您需要考虑用户是否也可以直接更新LoanCRN。如果他们永远不应该直接更新LoanCRN,你可以1)设置控件属性Locked = True
,或2)隐藏表单上的控件,以便用户甚至看不到它,或者3)消除实际控制和只是直接引用记录源列属性,如Me![LoanCRN]
。任何这些技术的更多细节都超出了这个问题。
但这不是全部!您需要考虑适当的默认值。如果用户从未真正更改过FundingStream控件会发生什么?那么你的代码永远不会运行,所以LoanCRN可能没有正确设置。最后,您可能需要在表单的其他位置使用其他代码,例如:在Form_AfterUpdate(),Form_Current等
中这种方法的好处在于,您可以灵活地使用数据输入表单来精确调整数据的流动方式。困难在于避免表单上的缺失和冲突行为。这种技术最终需要适当使用表和列约束(即验证规则和索引)以及熟悉表单和控制事件。
这也适用于特定形式。如果您有其他表单或VBA代码更改FundingStream值,您还需要在所有这些位置添加相同的代码,以确保LoanCRN值始终有效。
在表上定义Before Change宏以更新值。使用If
和SetField
宏操作根据FundingStream设置LoanCRM。
从幼稚的角度来看,这实际上是最直接,最简单的方法。无论是在表单上还是在VBA代码中更新数据宏,都会在每次保存记录时自动调用 。
这也有许多限制,并且不允许添加许多动态条件的灵活性,尤其是数据输入时出现的条件。 如果宏逻辑不健壮,可能会导致不必要的错误,从而无法保存整个数据集。