Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Web > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 03.12.2016, 21:43   #1
efefw
 
Регистрация: 30.11.2016
Сообщений: 5
Репутация: 10
По умолчанию Фильтрация lookup поля или есть другие варианты?

Объясню на примере который сделал для форума, и прикрепил ниже.
Пришлось вернуться к lookup полю, так как sql запрос тут не работает(или я что то не так делаю).
На главной форме DBGrid, который отображает данные из SQL запроса. Дело в том, что при поступлении пациента диагноз ему ставится не сразу, и нужно отобразить всех пациентов, и у которых он есть, и у которых нету. SQl запрос не отображает пациентов, у которых диагноз не стоит, так как нет ни 1 записи из таблицы "Диагноз".
Вот sql запрос:
Код:

SELECT pacient.surname, diagnoz.nazv, history.otdelenie
FROM pacient INNER JOIN (diagnoz INNER JOIN history ON diagnoz.id = history.id_diagnoz) ON pacient.id = history.id_pacient;

В итоге пришлось отображать данные из таблицы "История", и создавать lookup поля. Но в отличие от запроса, фильтр по lookup полям не работает, пишет ошибку: "В коллекции не удается найти элемент, соответствующий требуемому имени или порядковому номеру." С обычным полем "Отделение" фильтр работает.
Не могу продвинуться из-за этой проблемы уже второй день. Прошу помощи, кто знает как решается проблема.
Вот База и Приложение
Вложения
Тип файла: rar arch.rar (541.9 Кб, 1 просмотров)
efefw вне форума   Ответить с цитированием
Старый 03.12.2016, 23:48   #2
GreenWizard
мальчик-помогай =)
Участник клуба
 
Регистрация: 16.09.2010
Сообщений: 515
Репутация: 172

icq: 680147363
По умолчанию

Гугл предлагает приблизительно такое:
Код:

SELECT pacient.surname, IFNULL(diagnoz.nazv, "Нет диагноза") as nazv, history.otdelenie
FROM pacient INNER JOIN (diagnoz INNER JOIN history ON diagnoz.id = history.id_diagnoz) ON pacient.id = history.id_pacient;

у IFNULL есть варианты, поэтому если БД не поймёт эту ф-ию, то гугли\пробуй ISNULL, COALESCE

Сообщи работает ли
__________________
Группа ВК - https://vk.com/gw_inc
ICQ - 680147363 (не часто бываю, увы)
Почта - forwork.anton@gmail.com
GreenWizard вне форума   Ответить с цитированием
Старый 04.12.2016, 00:01   #3
efefw
 
Регистрация: 30.11.2016
Сообщений: 5
Репутация: 10
По умолчанию

Спасибо, буду пробывать. Завтра днем отпишусь о результате.
efefw вне форума   Ответить с цитированием
Старый 04.12.2016, 00:40   #4
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк, Украина
Сообщений: 16,192
Репутация: 5783
По умолчанию

LEFT JOIN нужно использовать
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Старый 04.12.2016, 01:42   #5
efefw
 
Регистрация: 30.11.2016
Сообщений: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
LEFT JOIN нужно использовать
Хорошо, попробую
efefw вне форума   Ответить с цитированием
Старый 04.12.2016, 16:29   #6
efefw
 
Регистрация: 30.11.2016
Сообщений: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от GreenWizard Посмотреть сообщение
у IFNULL есть варианты, поэтому если БД не поймёт эту ф-ию, то гугли\пробуй ISNULL, COALESCE

Сообщи работает ли
Acces не определяет функцию, поискал, но не смог найти ничего рабочего.

Вариант с left join хороший, попробую его. Правда значения null хотелось бы заменить на пустое поле, или свой комментарий.
efefw вне форума   Ответить с цитированием
Старый 04.12.2016, 20:16   #7
GreenWizard
мальчик-помогай =)
Участник клуба
 
Регистрация: 16.09.2010
Сообщений: 515
Репутация: 172

icq: 680147363
По умолчанию

в Access-e самом это может быть функция nz
left join - да, не заметил что был inner, НО и он оставит null где диагноза нет, поэтому понадобится это учитывать либо на уровне запроса, либо "выше"
почитай эту тему, может поможет... но это если говорить чисто об sql, не касаясь ни структуры БД (может там вовсе проще ввести "болезнь №0" и на неё ссылаться, например, чтоб с null не возиться), ни где оно используется (Делфя там, шарп)
__________________
Группа ВК - https://vk.com/gw_inc
ICQ - 680147363 (не часто бываю, увы)
Почта - forwork.anton@gmail.com
GreenWizard вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Synchronize, Критические секции, другие варианты, что лучше для синхронизации потоков? bilibian Общие вопросы Delphi 15 04.03.2014 10:57
получить данные поля исходя из lookup-поля malayka Помощь студентам 0 21.04.2010 21:19
как получить значение поля грид на основе значения другого lookUp поля malayka БД в Delphi 0 21.04.2010 19:06
Полный перебор или есть другие варианты? androidvsu Помощь студентам 8 12.03.2009 15:07
Форматирование текста внутри поля. как? или другие варианты... smoky Microsoft Office Access 2 26.12.2008 20:09




12:55.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru