Ms access MS Access计算字段与组合字段

Ms access MS Access计算字段与组合字段,ms-access,field,ms-access-2013,Ms Access,Field,Ms Access 2013,我已经尝试解决这个计算字段问题大约30分钟了,看起来我的表达式中的单个字段条件是正确的,例如[points]和[contrib],但是组合的([points]+[contrib])字段不符合将字段设置为正确成员类型的要求,因此,当添加这些时,它将返回一些其他成员类型作为基本类型。我可以在添加的字段中使用between运算符吗。。。?我试过了,但有一些构图错误。因此,换句话说,如果您得到45个点,它会将您设置为仅在“点”字段中命名的basic,如果您的contrib为45,您会按预期在calc字段

我已经尝试解决这个计算字段问题大约30分钟了,看起来我的表达式中的单个字段条件是正确的,例如[points]和[contrib],但是组合的([points]+[contrib])字段不符合将字段设置为正确成员类型的要求,因此,当添加这些时,它将返回一些其他成员类型作为基本类型。我可以在添加的字段中使用between运算符吗。。。?我试过了,但有一些构图错误。因此,换句话说,如果您得到45个点,它会将您设置为仅在“点”字段中命名的basic,如果您的contrib为45,您会按预期在calc字段中设置为basic,但如果它是50+50,则它会在应该是“更好”成员标签时设置为basic。否则,这个简单的语句看起来应该是正确的,但是计算机在添加时并没有这样读取它。由于某种原因,它不能识别组合值,并且计算字段没有sum()func。 此处重点:([points]+[Contrib])>=45和([points]+[Contrib])<100),“基本”

IIf(([points]>=45和[points]=45和[Contrib]=45和([points]+[Contrib]<100),“基本”,
IIf(([points]>=100和[points]=100和[Contrib]=100)和([points]+[Contrib]=250和[points]=250和[Contrib]=250)和([points]+[Contrib]=500)或([points]+[Contrib]>=500),“最佳”、“非成员”))

如果要测试的值为>=或,则BETWEEN运算符将返回TRUE。以下是Access 2010表中的数据示例,其中包括名为member\u type的计算字段:

id点Contrib成员类型
-- ------ ------- ----------
1非成员
2501基本
32001更好
43001太好了
56001最佳
如果这是计算字段所需的,那么下面是我用于member_type的表达式:

IIf([points]+[Contrib]>=45和[points]+[Contrib]=100和[points]+[Contrib]=250和[points]+[Contrib]=500,“最佳”、“非成员”))
如果我没有得到完全正确的结果,下面是相同的表达式格式,以便您可以更好地看到需要更改的地方:

IIf([points]+[Contrib]>=45,[points]+[Contrib]=100,[points]+[Contrib]=250,[points]+[Contrib]=500,'Best','Non-member'
))))
注意:如果points或Contrib为空,则member_type将显示“Non member”。如果这不是您想要的行为,则需要更复杂的表达式。由于计算字段表达式不能使用
Nz()
,因此必须将
IIf([points]为Null,0,[points])
替换为
[points]
IIf([Contrib]为Null,0,[Contrib])
替换为
[Contrib]


禁止这些字段为Null(将其必需属性设置为Yes)并将默认值设置为零会更简单。

这很难理解,但是否有特定的错误消息?请注意,最后一个表达式(在“Focus here:”之后)并不等效。中间是包含的,所以包含44和100(50+50)。这应该是可能的,匹配点和连接点位于特定边界之间。请忽略使用连接点的第一部分,这是一个实验。范围应大于等于45到小于100。然而,编译器没有使用两个字段的总和,它一次只读取一个字段,这就是为什么这是如此复杂的原因。我确实看了一下桌子和这些边界在哪里。它一直工作到添加,我不知道为什么。我将进行编辑。在最上面的一行中,
([points]+[Contrib])
中有一个额外的括号。它属于表中,在输入点时会更新。过去的点和contrib没有更新,因为它应该与给定点和contrib的总和一起更新到正确的标签级别。是的,我尝试了,它不会读取代码。。。不知道为什么。这可能是因为语法的混合?那没关系。我刚刚试过这个,效果很好:zz:IIf((([points]+[Contrib])>=45)和(([points]+[Contrib]))您是否尝试评估另一个嵌套的成员以检查它是否可以?它无法评估单个成员和组合成员,因此我添加了它们。尝试查看它是否可以编译。可能在某个地方有一个松散的括号混淆了步骤。我可以做的是尝试删除其他级别的成员,然后一次从一个开始嵌套这些成员再一次…很好的工作,但我们还没有完全做到。如果一个字段中有空值,它将不会添加,因此您需要像我以前做的那样,为该字段添加一个单独的表达式,它一定在某个地方弄乱了它。我想我的解决方案是做您在那里做的事情,但查询将空值填充为0,以使它计算出相反的内容当它增加的时候,什么都没有。
IIf(([points] >=45 And [points]<100) Or ([Contrib] >=45 And [Contrib] <100) Or (([points]+[Contrib]) > = 45 And ([points]+[contrib] < 100),"Basic",
IIf(([points] >=100 And [points] <250) Or ([Contrib] >=100 And [Contrib] <250) Or ((([points]+[Contrib]) >=100) And (([points]+[Contrib])<250)),"Better",
IIf(([points] >=250 And [points]<500) Or ([Contrib] >=250 And [Contrib] <500) Or ((([points]+[Contrib]) >=250) And (([points]+[Contrib])<500)),"Great",
IIf(([points] >=500) Or ([Contrib] >=500) Or (([points]+[Contrib]) >=500),"Best","Non-member"))))