Формат аргументов функции IIf

Energetik
Дата: 10.02.2016 11:29:37
Access 2007.
Применяю в запросе функцию IIf для выбора коэффициентов. Коэффициенты должны быть числового формата для последующих вычислений.
Вот один пример:
Норма времени: IIf([Реестр]![Диаметр трубопроводов]="";"";IIf([Реестр]![Диаметр трубопроводов]<109;"3.7";IIf([Реестр]![Диаметр трубопроводов]<220;"4.7";IIf([Реестр]![Диаметр трубопроводов]<326;"5.8";IIf([Реестр]![Диаметр трубопроводов]<427;"7.0";IIf([Реестр]![Диаметр трубопроводов]<631;"8.4";IIf([Реестр]![Диаметр трубопроводов]<821;"10.1";IIf([Реестр]![Диаметр трубопроводов]<1021;"11.2";IIf([Реестр]![Диаметр трубопроводов]<1221;"12.5";"13.6")))))))))

Вот второй пример:
Коэффициент: IIf([Реестр]![Протяженность, м (по каналу)]<250;1;0,75)

В первом случае результат оказывается строковой величиной, во втором числовой. Как сделать в первом выражении результат числовым уже 2-й день голову ломаю.
Akina
Дата: 10.02.2016 11:32:49
Лишние кавычки поубирай. Ты САМ указываешь, что это СТРОКА.
Energetik
Дата: 10.02.2016 11:38:59
Я их не ставлю. Они появляются сами после выполнения запроса.
__Michelle
Дата: 10.02.2016 11:49:23
Два вопроса просто из любопытства:
1. Почему
IIf([Реестр]![Диаметр трубопроводов]="";"";
а не
IIf([Реестр]![Диаметр трубопроводов] Is Null;Null;
2. Почему восклицательные знаки, а не точки?
MrShin
Дата: 10.02.2016 11:51:55
Поставить запятую вместо точки в числах, убрав кавычки? Если конструктор сам ставит кавычки, значит он не распознает данные как число
Energetik
Дата: 10.02.2016 12:07:28
1. Потому что константа пустой ячейки это "", а Null это значение. Хотя эта проверка корректно не работает честно говоря.
2. Потому что [Реестр] является семейством для объекта полей.

Нашёл причину, все банально))
Разделитель дробной части у меня должен быть ",", а не ".".
Predeclared
Дата: 10.02.2016 12:09:31
Energetik
... константа пустой ячейки это "", а Null это значение. ...

Тянет на перл месяца.
:)
__Michelle
Дата: 10.02.2016 12:21:08
Energetik
1. Потому что константа пустой ячейки это "", а Null это значение. Хотя эта проверка корректно не работает честно говоря.
Ячейки? Гм...
Как раз таки "" (строка нулевой длины) - это значение.
А Null - это отсутствие значения.
Energetik
2. Потому что [Реестр] является семейством для объекта полей.
Проще говоря - таблица?
Понять, что такое "является семейством для объекта полей" никак не могу...
Кто чье семейство? Кто чей объект?
MrShin
Дата: 10.02.2016 12:36:57
Надежнее всего на пустоту в текстовых полях проверять как
Nz([field],"")="" 

Так и Null и "" будет отловлен.
__Michelle
Дата: 10.02.2016 12:44:46
MrShin
Надежнее всего на пустоту в текстовых полях проверять как
Nz([field],"")="" 

Так и Null и "" будет отловлен.
Если можно обойтись без вызова функции VBA из SQL, то лучше обойтись.
Вот это работает заметно быстрее:
FF Is Null OR FF = ""