|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Подскажите варианты формирование списка двух DBComboBox с двух таблиц
Всем доброе время суток,
Есть две таблицы «GOV_ETALON» и «REGISTER_ETALON», в этих таблицах есть данные о данные о сотрудниках. При добавлении новых записей в таблицы, эти данные могут повторяться. Данные о сотрудниках, истинны для обеих таблиц. Чтобы не набирать их по новому, как посоветовали, вместо DBComboBox использовать DBLookupComboBox и дополнительный DataSet для формирования автоматического формирования списка "Фамилии+Имени+Отчества". Итак, есть таблица «GOV_ETALON» в ней поля: Код:
«фамилия» «имя» «ученая степень» «ученое звание» «должность» Код:
«фамилия» «имя» «отчество» «телефон» «e-mail» или само проектирование не так? - Или как-нибудь через "view" - попробовать? - Или это нужно создавать новую таблицу сотрудников, где хранить эти данные, и с которой наполнять DBLookupComboBox? (конечно не хотелось бы) Заранее спасибо Последний раз редактировалось Konstantin-78, 29.11.2015 в 20:39. |
#2
|
|||
|
|||
1. Совсем не понятно, что делать то надо (т.е. что хочется получить на ыыходе).
2. Действительно, БД надо переделывать (судя по представленной информации). Как я понимаю, вторая таблица содержит список сотрудников, а первая - список тех же сотрудников с указанием "научных" "аттрибутов". Если я все правильно понял, то: - вторую таблицу оставляем как есть - делаем 3 справочника: -- ученые степени -- ученые звания -- должности Далее варианты: а) у нас у каждого сотрудника есть либо степень, либо звание, либо должность, либо любая комбинация всего этого. Тогда первую таблицу удаляем, а во второй делаем ссылки на справочники. б) у нас только у некоторых сотрудников есть степень/звание/должность. тогда имеет смысл держать их отдельно, но таблица будет иметь вид: Код:
create table GOV_ETALON ( id integer primary key, emploee_id integer references REGISTER_ETALON.id, rank_id integer references RANKS.id, status_id integer references STATUSES.id, position_id integer references POSITIONS.id ); Ну и на закуску, можно сделать пару view, для того, что бы не заморачиваться в запросах с клиента. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Konstantin-78 (30.11.2015)
|
#3
|
|||
|
|||
Цитата:
Конечно, если инф-я будет с разный таблиц, то не все поля будут заполняться. Последний раз редактировалось Konstantin-78, 30.11.2015 в 11:56. |
#4
|
|||
|
|||
а если попробывать, что-то типа этого:
Код:
select g.KEEP_LAST_NAME, g.KEEP_NAME, g.KEEP_DEGREE, g.KEEP_RANK, g.KEEP_POSITION, r.KEEP_TELEPHONE, r.KEEP_E_MAIL from GOV_ETALON g left join REGISTER_ETALON r on (g.KEEP_LAST_NAME=r.KEEP_LAST_NAME and g.KEEP_NAME=r.KEEP_NAME) если что в GOV_ETALON еще можно "Отчество" добавить. И тогда еще в условии третий параметр появится... но тогда правда, с REGISTER_ETALON - люди не добавятся Но последний вариант, с дополнительной таблице мне все думаю понравится, где можно хранить всю инф. о сотруднике. Я думал обойтись без классификатора сотрудников, но думаю не удастся. Буду в доп. таблицу добавять сотрудников, сразу при добавлении их в GOV_ETALON и REGISTER_ETALON, основываясь на разных ФИО, ну конечно и в классификаторе, навсякий случай кнопку "добавить" сделаю. Цитата:
Последний раз редактировалось Konstantin-78, 30.11.2015 в 12:06. |
#5
|
|||
|
|||
Тут вопрос в том, хочешь ты быстро получить результат или хочешь сделать по нормальному. Если сделать по нормальному, то надо все переделывать. Если быстро результат, то UNION [ALL] спасет отца русской демократии:
Код:
select first_name, middle_name, last_name, phone, email, NULL as rank, NULL as degree, NULL as position from REGISTER_ETALON union all select first_name, NULL as middle_name, last_name, NULL as phone, NULL as email, rank, degree, position from GOV_ETALON PS. Цитата:
Последний раз редактировалось lmikle, 30.11.2015 в 20:13. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Konstantin-78 (30.11.2015)
|
#6
|
|||
|
|||
Ваш запрос замечательный и делает все что мне нужно, но не совсем, посмотрев на его результат. Я понял, что нужно делать как Вы сказали "по нормальному".
- В 1-ой таблице у меня хранится информация по первой категории деталей отличной от 2-ой каткгории (разные параметры, одни и те же сотрудники) Во 2-ой таблице у меня хранится информация по второй категории деталей отличной от 1-ой каткгории (разные параметры, одни и те же сотрудники) Из Ваших предложений, я понял: - Просто нужно создать таблицу-справочник сотрудников, в которой будет хранится полная инф-я о сотрудниках (званния, тел., e-mail и т.д.). На двух формах, на параметрах "Фамилия" поставить DBEdit, под ним поставить DBLookUpComboBox. Пользователь при добавлении новой детали, открывает DBLookUpComboBox, в списке которого хранится ФИО. Если такая ФИО есть в справочнике, то при ее выборе, я запросом, достаю из справочника дополнительные значения параметров (тел., e-mail и т.д.), и вставляю их в соответствующие окошки на форме. Если такой ФИО нет, то он просто заполняет все параметры сотрудника (ФИО, звания и т.д.). При сохранении в записи (детали), программа проверяет, если сотрудник с таким ФИО в справочнике. Если есть программа его не добавляет в справочник, если нет, то идет пополнение справочника новым сотрудником. Конечно в самом справочнике сделать, возможным добавление, редактирование, удаление записи от руки. Последний раз редактировалось Konstantin-78, 30.11.2015 в 22:30. |
#7
|
|||
|
|||
Ну, в общем, в правильном направлении идет мысль.
Только проверь, есть ли смысл разбивать эту информацию на несколько таблиц. Т.е. если у тебя всегда будет отношение один-к-одному, то смысла в разбивании нет, просто в разных формах показывать разный набор полей. |
#8
|
|||
|
|||
Цитата:
Подскажите пожалуйста еще такой вопросик: у меня получится запихнуть связку из трех полей ("фамилия", "имя", "отчество") в список DBLookUpComboBox? Или мне делать в справочнике дополнительное поле, в котором, будут хранится эти 3 значения (ФИО)? И DBLookUpComboBox перенаправлять на него. Последний раз редактировалось Konstantin-78, 01.12.2015 в 01:38. |
#9
|
|||
|
|||
Код:
select first_name || ' ' || middle_name || ' ' || last_name as FIO from ... |
#10
|
|||
|
|||
Цитата:
|
#11
|
|||
|
|||
Ага, просто на уровне запроса формируется поле для отображения.
|