【问题标题】:Access is writing numbers next to each other instead of adding them upAccess 将数字彼此相邻写入,而不是相加
【发布时间】:2018-12-06 14:28:26
【问题描述】:

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

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

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

问题来了:

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

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

【问题讨论】:

    标签: ms-access textbox sum textfield listfield


    【解决方案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 函数返回的值被解释为带有加法运算符(+) 的字符串,然后用于连接每个Nz 表达式返回的字符串。

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

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

    【讨论】:

    • 谢谢,我试试!您在图片上看到字段的表单有插槽,可以一次显示数据库中的 16 个对象。每个对象有 3 个不同的小时值。这些时间被加载到列表字段中,您看到的代码用于将值相加。这是一个复杂的方法,但我需要能够比较和添加这么多对象。这就是为什么表格看起来有点臃肿。有什么建议可以做得更好吗?编辑:我试过了,但是一旦将值填充到第二行的字段中,它仍然会被窃听
    • 现在可以工作了,在第 2 行明确地执行 Double 解决了我的问题。我仍然不明白如何将 42 个字段中的 3 个字段解释为字符串,因为写入值的方法完全相同,只是处理不同的字段。
    猜你喜欢
    • 2021-08-04
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2017-07-13
    • 1970-01-01
    相关资源
    最近更新 更多