Прерывистая ошибка # в текстовом поле с довольно простым IIF

#ms-access #textbox #ms-access-2016 #iif

#ms-доступ #текстовое поле #ms-access-2016 #ииф

Вопрос:

У меня есть форма клиента с элементом управления вкладками, который содержит сведения о конкретных товарах, имеющихся у клиента: арендная плата за землю, электричество и гараж. Они могут содержать все 3, только арендную плату за землю и электричество или просто гараж. Если у них нет элемента, вкладка будет скрыта.

Проблема появляется только на вкладке Garage: я периодически получаю #ERROR в текстовом поле amountdue. Если я закрываю клиента и снова открываю его, иногда он очищается сам (без каких-либо действий). Иногда это не так. Иногда мне нужно снова открыть его несколько раз, прежде чем появится значение.

Соответствующее поле выглядит так: txtActualAmountDue, а источником является следующее:
=iif([tenant],[txtNet],[txtGarageCharge])

  • Арендатор — это логическое значение источника данных формы (которое указывает, должны ли отображаться вкладки Арендная плата за землю / Электричество).
  • txtNet = [txtGarageCharge]-[txtVAT]
  • txtVAT = [txtGarageCharge]*([txtVatPercentage]/(1 [txtVatPercentage]))

Следующие два — это заблокированные текстовые поля, чтобы упростить жизнь

  • txtGarageCharge = DLookup(«[GarageCharge]»,»Переменные», критерии, которые возвращают текущую строку переменных для текущей даты)
  • txtVatPercentage = DLookup(«[GarageVat]»,»Переменные», критерии, которые возвращают текущую строку переменных для текущей даты)

Единственное, что еще мне приходит в голову упомянуть, это то, что если клиент не является арендатором, то txtNet и txtVAT скрыты. Я иногда получаю #Type! в txtNet и txtVat тоже — и, очевидно, я также получаю #Error — но не всегда: иногда они оцениваются нормально, и я все равно получаю #Error . Я прокомментировал строки метода load / current, которые скрывают эти текстовые поля, чтобы увидеть, так ли это, но это не имело никакого значения.

Как я уже сказал, это происходит не каждый раз: просто изредка. Может ли это быть связано с порядком, в котором вещи оцениваются / заполняются в форме? И как только он будет заполнен один раз (значения будут одинаковыми для каждого клиента), тогда все в порядке? И если это так, как мне заставить его оценивать текстовые поля в правильном порядке?

Ответ №1:

Вероятно, это проблема времени, поэтому старайтесь избегать промежуточных вычислений:

 txtNet = DLookup("[GarageCharge]/(1 [GarageVat])","Variables", criteria)
txtVat = DLookup("[GarageCharge]/(1 [GarageVat])*[GarageVat]","Variables", criteria)
 

или, в конечном итоге:

 =IIf([tenant],DLookup("[GarageCharge]/(1 [GarageVat])","Variables", criteria),DLookup("[GarageCharge]","Variables", criteria))
 

Комментарии:

1. Спасибо, Густав. Я попробовал, как указано выше, но покажет только время (и многие открытия / закрытия).