Access пишет числа рядом друг с другом, а не складывает их - PullRequest
0 голосов
/ 06 декабря 2018

Я хочу добавить некоторые поля списка, которые заполнены числами из таблицы, если я нажму кнопку.Для отладки я выбрал простые значения.

Первое поле ниже должно содержать среднее значение всех полей, второе должно содержать сумму, а третье должно содержать сумму каждого столбца, умноженную на определенный процент и затем суммированную (формула и рисунки)ниже).

По умолчанию, если процентные значения не указаны, должна отображаться только сумма.

Вот проблема:

Все работает нормально и как задумано, с или безв процентах:

works fine and as intended

За исключением случаев, когда я ввожу значения или значение в номер строки 2:

enter values or a value into row number 2.

Затем в поле, которое обычно показывает сумму (правильную для каждой второй строки), просто ставится каждый номер каждой строки рядом друг с другом вместо их суммирования.Это также происходит, если указан процент.

Если я очищаю строку 2, она снова работает правильно.

Я не могу объяснить, почему это происходит, у кого-нибудь есть представление, почему?

Формула для последнего поля:

(CB - это столбец 1, * 1028)* - это столбец 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 голосов
/ 06 декабря 2018

Во-первых, я бы предложил заключить каждое из полей в выражение 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().

Однако я должен сказать, что повторение этого большого количества полей в одном выражении - это красный флаг, что у вас плохо спроектированная база данных.

...