powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Почему запрос возвращает 0 вместо Null?
14 сообщений из 14, страница 1 из 1
Почему запрос возвращает 0 вместо Null?
    #39539878
Настаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет

Скидываю вам БД с одной табличкой и двумя простыми запросами
В первом запросе стоит фильтр <>0
Второй запрос его использует, но всё равно возвращает 0
Я не могу понять, почему. Мне надо, чтобы там было знаение null

В файле всё будет ясно
Заранее спасибо за помощь....
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39539893
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все это делается в одном запросе:
Код: vbnet
1.
общее наличие: IIf(Nz([склад1];0)+Nz([склад2];0)+Nz([склад3];0)<>0;Nz([склад1];0)+Nz([склад2];0)+Nz([склад3];0))

С условием Not Null
Рекомендую для числовых полей значение по умолчанию-0 (потом меньше писать)
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39539899
Настаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Спасибо.
Согласен на счёт нуля по умолчанию, просто в формах я предпочитаю их не видеть (так естетичней)
Я тут ещё поэкспериментировал с использвованием iif
Например: iif(выражение=0,null, выражение)
В любом случае это выражение будет высчитываться дважды. Я таким макаром просто пытался избежать двойных вычислений. Впрочем, у меня их не много )))
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39540007
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настаев,
при быстродействии современных РС вопрос о двукратном вычислении простейшего выражения абсолютно не актуален. А что мешает написать функцию, а еще лучше изменить структуру БД. Таблицы:
1. группы:кодГ,группа
2. товары: кодТ,группа,наименование+поля описывающие товар
3. склады: кодС,группа,товар,номерСклада,прибыло,убыло(товар зависимое от группы-оба,в форме, полеСоСписком)
4. документ: кодД,документ,№,дата
группы 1:М склады М:1 документ
товары 1:М
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39540039
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настаевв формах я предпочитаю их не видеть (так естетичней)
Ну так и пропишите в форме соответствующий формат. Там же есть 3 части, пермая - для обычных данных, вторая (если задано) - для отрицательных чисел, а третья - для нулей. Так что формат
Код: vbnet
1.
#;;""


будет отображать нули как пустые поля, пока туда не попадет фокус ввода.
НастаевНапример: iif(выражение=0,null, выражение)
В любом случае это выражение будет высчитываться дважды
Нет, формула в запросах с одинаковыми аргументами реально выполняется только один раз независимо от количества вызовов.
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39540084
Настаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin, спасибо большое. Вы мне очень помогли, указав нужный формат. Это значительно облегчает жизнь

А по поводу двойных вычислений я только что проверил.
Вот новая БД с результатом. Там видно, что Access выполняет такие выражения дважды. По всей видимости потому, что он не занимается сравнением выражений в пределах условия iif.
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39540085
Настаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuНастаев,
при быстродействии современных РС вопрос о двукратном вычислении простейшего выражения абсолютно не актуален. А что мешает написать функцию, а еще лучше изменить структуру БД. Таблицы:
1. группы:кодГ,группа
2. товары: кодТ,группа,наименование+поля описывающие товар
3. склады: кодС,группа,товар,номерСклада,прибыло,убыло(товар зависимое от группы-оба,в форме, полеСоСписком)
4. документ: кодД,документ,№,дата
группы 1:М склады М:1 документ
товары 1:М

В принципе, я так и построил свою базу за исключением одного: каждый склад у меня в отдельном поле. Это позволяет видеть наличие на каждом из них одновременно.
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39540116
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настаев,
А если изменится (по мало-ли каким причинам)количество складов?
При Вашей структуре это потребует изменения (добавление поля) таблицы,а при предложенной структуре это потребует внесения записи в таблицу-источник поляСоСписком "номерСклада" (в предложенной схеме такая таблица-справочник не упоминалась,но подразумевалась). Наличие товара на каждом складе на конкретную дату извлекается очень простым запросом.
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39540153
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НастаевAccess выполняет такие выражения дважды
Да, вы правы, в пределах одной строки будет выполняться столько раз, сколько вызывали. Не повторяется, если у функции одни и те же аргументы на полседующих строках.
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39540162
Настаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin, понял, спасибо
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39540163
Настаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, согласен с вами на 200%
Просто я изначально решил так сделать, не имея навыков грамотного создания БД. Теперь мне пришлось заранее создать 15 складов про запас, так сказать. А текст запроса я программно переписываю по мере необходимости. В этом есть и плюсы и минусы. Плюсы в том, что наличие на любом складе (или всех вместе взятых) я могу напрямую связывать с любой таблицей по ключевому полю. Может, я когда-то и передумаю....

всё равно спасибо за помощь
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39540213
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настаевпришлось заранее создать 15 складов про запас, так сказать
Намучаетесь, когда дело до отчетов с перемещениями дойдет. Потом с ростом базы и проблемы с производительностью подтянутся. Очень рекомендую переделать, пока немного кода/форм наделали, дальше будет хуже.
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39540229
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НастаевПлюсы в том, что наличие на любом складе (или всех вместе взятых) я могу напрямую связывать с любой таблицей по ключевому полю.
Сомнительное преимущество. Если будет одна таблица "склад" с полем "номер склада", то вы точно так же сможете связывать по полю кода товара с одним или нескольким складам, только все будет намного проще, чем мучаться с разными колонками для каждого склада. Складам сможете дать дополнительные характеристики для отбора, не придется руками делать unpivot, когда понадобится список товара по складам, особенно если какие-то характеристики товара будут зависеть от склада (локация, например). В общем поверьте хотя бы на слово, лучше переделать сейчас.
...
Рейтинг: 0 / 0
Почему запрос возвращает 0 вместо Null?
    #39540781
Настаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin, ок
Я и так уже испытываю проблемы при составлении отчётов
А ещё мне приходится записывать список складов в массив, когда нужно выдать их список или ещё что..
Кароче, я тут наломал дров :)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Почему запрос возвращает 0 вместо Null?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]