访问是将数字彼此相邻而不是相加

时间:2018-12-06 14:28:26

标签: ms-access textbox sum textfield listfield

如果我按一下按钮,我想添加一些列表字段,这些列表字段用表格中的数字填充。为了调试,我选择了简单的值。

下面的第一个字段应包含所有字段的平均值,第二个字段应包含总和,第三个字段应包含每一列的总和乘以一定百分比然后求和(以下公式和图片)。

默认情况下,如果未给出百分比值,则仅显示总和。

这是问题所在:

一切正常,并按预期工作,给出或不给出百分比:

works fine and as intended

除非我在第2行中输入值或值,否则

enter values or a value into row number 2

然后,通常显示总和的字段(每隔一行都正确)仅将每行的每个数字彼此相邻而不是相加。如果给出百分比,也会发生这种情况。

如果我清空第2行,它将再次正常工作。

我无法解释为什么会这样,有人知道为什么吗?

最后一个字段的公式为:

({CB是第1列,OF是第2列,AS是第3列,[FehlleistungXX]是具有百分比值的字段:)

=0+Nz([DeltaDetailCB1]+[DeltaDetailCB2]+[DeltaDetailCB3]+[DeltaDetailCB4]+[DeltaDetailCB5]+[DeltaDetailCB6]+[DeltaDetailCB7]+[DeltaDetailCB8]+[DeltaDetailCB9]+[DeltaDetailCB10]+[DeltaDetailCB11]+[DeltaDetailCB12]+[DeltaDetailCB13]+[DeltaDetailCB14]+[DeltaDetailCB15]+[DeltaDetailCB16];0)*Nz(1+[FehlleistungCB]*0,01;0)

+Nz([DeltaDetailAS1]+[DeltaDetailAS2]+[DeltaDetailAS3]+[DeltaDetailAS4]+[DeltaDetailAS5]+[DeltaDetailAS6]+[DeltaDetailAS7]+[DeltaDetailAS8]+[DeltaDetailAS9]+[DeltaDetailAS10]+[DeltaDetailAS11]+[DeltaDetailAS12]+[DeltaDetailAS13]+[DeltaDetailAS14]+[DeltaDetailAS15]+[DeltaDetailAS16];0)*Nz(1+[FehlleistungAS]*0,01;0)

+Nz([DeltaDetailOF1]+[DeltaDetailOF2]+[DeltaDetailOF3]+[DeltaDetailOF4]+[DeltaDetailOF5]+[DeltaDetailOF6]+[DeltaDetailOF7]+[DeltaDetailOF8]+[DeltaDetailOF9]+[DeltaDetailOF10]+[DeltaDetailOF11]+[DeltaDetailOF12]+[DeltaDetailOF13]+[DeltaDetailOF14]+[DeltaDetailOF15]+[DeltaDetailOF16];0)*Nz(1+[FehlleistungOF]*0,01;0)

编辑1:我试图删除字段并用其他字段的副本替换它们,但这并不能解决问题。

1 个答案:

答案 0 :(得分:0)

首先,我建议将每个字段都包含在Nz表达式中,而不是将计算出的表达式有选择地包含在Nz表达式中,即:

=
(
    (
        Nz([DeltaDetailCB1],0)+
        Nz([DeltaDetailCB2],0)+
        Nz([DeltaDetailCB3],0)+
        Nz([DeltaDetailCB4],0)+
        Nz([DeltaDetailCB5],0)+
        Nz([DeltaDetailCB6],0)+
        Nz([DeltaDetailCB7],0)+
        Nz([DeltaDetailCB8],0)+
        Nz([DeltaDetailCB9],0)+
        Nz([DeltaDetailCB10],0)+
        Nz([DeltaDetailCB11],0)+
        Nz([DeltaDetailCB12],0)+
        Nz([DeltaDetailCB13],0)+
        Nz([DeltaDetailCB14],0)+
        Nz([DeltaDetailCB15],0)+
        Nz([DeltaDetailCB16],0)
    ) *
    (1+(Nz([FehlleistungCB],0)*0.01))
)
+
(
    (
        Nz([DeltaDetailAS1],0)+
        Nz([DeltaDetailAS2],0)+
        Nz([DeltaDetailAS3],0)+
        Nz([DeltaDetailAS4],0)+
        Nz([DeltaDetailAS5],0)+
        Nz([DeltaDetailAS6],0)+
        Nz([DeltaDetailAS7],0)+
        Nz([DeltaDetailAS8],0)+
        Nz([DeltaDetailAS9],0)+
        Nz([DeltaDetailAS10],0)+
        Nz([DeltaDetailAS11],0)+
        Nz([DeltaDetailAS12],0)+
        Nz([DeltaDetailAS13],0)+
        Nz([DeltaDetailAS14],0)+
        Nz([DeltaDetailAS15],0)+
        Nz([DeltaDetailAS16],0)
    ) *
    (1+(Nz([FehlleistungAS],0)*0.01))
)
+
(
    (
        Nz([DeltaDetailOF1],0)+
        Nz([DeltaDetailOF2],0)+
        Nz([DeltaDetailOF3],0)+
        Nz([DeltaDetailOF4],0)+
        Nz([DeltaDetailOF5],0)+
        Nz([DeltaDetailOF6],0)+
        Nz([DeltaDetailOF7],0)+
        Nz([DeltaDetailOF8],0)+
        Nz([DeltaDetailOF9],0)+
        Nz([DeltaDetailOF10],0)+
        Nz([DeltaDetailOF11],0)+
        Nz([DeltaDetailOF12],0)+
        Nz([DeltaDetailOF13],0)+
        Nz([DeltaDetailOF14],0)+
        Nz([DeltaDetailOF15],0)+
        Nz([DeltaDetailOF16],0)
    ) *
    (1+(Nz([FehlleistungOF],0)*0.01))
)

我怀疑是Nz函数返回的值被加法运算符(+)解释为字符串,然后用来连接每个Nz返回的字符串表达。

如果我的代码产生相同的结果,则可以通过将整个表达式放在CDbl()中来强制强制数据类型。

但是,我必须说,在一个表达式中重复这么多字段是一个危险信号,表明您的数据库设计不良。