пункт в наборе записей rstImportData ("Flat Size") является = NullПроблема оценки NULL в операторе IIF (Access)
При этом, учитывая следующее утверждение:
IIF(IsNull(rstImportData("Flat Size")), Null, cstr(rstImportData("Flat Size")))
Result: Throws error 94: Invalid use of Null
Если я изменю заявление удаления преобразования типа на ложное сравнение:
IIF(IsNull(rstImportData("Flat Size")), Null, 0)
Result: Null
он возвращает Null, как это должно быть в первый раз. Похоже, что я не могу преобразовать тип в IIF, если переданное значение должно быть нулевым, даже если оно проходит тест IIF, оно все равно пытается оценить его как в истинном, так и в ложном ответе. Единственная причина, по которой я использую IIF, - это потому, что у меня есть 25-строчное сравнение для сравнения данных из Импорта с соответствующей записью в базе данных, чтобы увидеть, нужно ли добавлять до истории.
Любые мысли? То, как данные импортируются, будет иметь нулевые даты и где импорт электронной таблицы будет в строчном формате. Я должен преобразовать обе стороны в другую, чтобы сравнить значения правильно, но если какая-либо сторона имеет значение null, это исключение происходит :(
EDIT Пример того, почему я использую IIF (и принимая во внимание, используя универсальную функцию)
If master("one") <> import("one") Or _
master("two") <> import("two") Or _
master("date") <> import("date") Or _ //import("date") comes from a spreadsheet, it comes in as string, CAN be a null value
master("qty") <> import("qty") Or _ //import("qty") comes from spreadsheet, comes in as a string can CAN be null
master("etc") <> import("etc") Then
....stuff....
End If
Этот код расширяется в течение примерно 20 колонок для сравнения в базе данных. Я бы предпочел, чтобы проверить, как часть заявления. Я могу подумайте о наборе решений, но они включают в себя добавление гораздо большего количества кода. Если это так, то для меня это не так, у.
Варианты я вижу,
- Создание темп вары, чтобы сделать работу до сравнения и использования этих новых ВАР вместо набора записей
- Создание объекта передать запись в к предварительно отформатированные и работать, хотя дополнительная работа обеспечила бы эту функциональность для каждого типа импорта, так как есть разные файлы со схожими полями.
Я здесь для идей, и я открыт для любых интересных произведений, которые могут быть брошены по пути, решить, как это сделать Мы ищем самый многоразовый подход.
Как насчет: cstr (rstImportData ("Flat Size") и "") или просто: rstImportData ("Flat Size") & "" – Fionnuala
IIf() не замыкается в коде, и вы предполагаете, что он делает , В любом случае, я не думаю, что кто-то должен использовать код IIf(). Его цель - предоставить функциональность If/Then/Else в выражениях вне контекста кода. –
Вы уверены, что вам нужно принудить результат к строковому значению? Вы считали функцию Nz()? –