Access 是将数字并排书写,而不是将它们相加

Access is writing numbers next to each other instead of adding them up

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

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

默认情况下,如果没有给出百分比值,它应该只显示总和。

这是问题所在:

无论是否给出百分比,一切都按预期正常工作:

除非我在第 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: 我尝试删除字段并用其他字段的副本替换它们,但没有解决问题。

首先,我建议将每个字段包含在 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 函数返回的值被解释为带有加法运算符 (+) 的字符串,然后用于连接每个 [=11] 返回的字符串=] 表达式.

如果我的代码产生相同的结果,您可以通过将整个表达式包含在 CDbl().

中来强制数据类型转换

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