Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2015, 00:29   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Вариант подбора нужных данных (проектирование БД)

Доброе время суток форумчане,

Есть таблица1 сотрудников, с полями «ФИО»…, «ученое звание», «ученая степень», «должность».
При формировании значений у таблицы2, я ориентируюсь по «ФИО» таблицы1 и вставляю в нее информацию с помощью DBLookupComboBoxEh по ФИО, далее автоматом расставляются остальные значения.
Таблицу1, можно также пополнять с помощью вставки в таблицу2 нового сотрудника.

У меня в таблице2, на параметрах: «ученое звание», «ученая степень», «должность», стоят DBComboBox’ы (т.е. я хочу их списки наполнять из таблицы1).

Вопросы:
1. Т.е. это будут DBComboBox’ы? Потому что, DBLookupComboBoxEh наверняка – не подойдут?
2. Каким методом наполнять DBComboBox’ы (если это все же они)?:
- пробегаться по DataSet, выуживая уникальные данные
- или всетаки отдельным запросом? (вынуть три поля сразу уникальных)?

Как лучше сделать? Как будет быстрее работать?

Заранее Спасибо.

Последний раз редактировалось KBO; 13.12.2015 в 00:53.
KBO вне форума Ответить с цитированием
Старый 13.12.2015, 14:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Потому что, DBLookupComboBoxEh наверняка – не подойдут?
Почему? ИМХО именно для таких случаев этот компонент и разрабатывался.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.12.2015, 16:20   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

DBLookupComboBoxEh - подошел бы, если бы я делал запрос с distinct, по «ученое звание», «ученая степень», «должность»,
А так я рискую получить в списке по несклько десятков одинаковых названий
KBO вне форума Ответить с цитированием
Старый 13.12.2015, 16:42   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что мешает сделать отдельный набор? Ты хочешь запросом с объединениями таблиц отделаться? Тогда можешь попробовать такой вариант:
Код:
uz:=TStringList.Create; ///ученое звание
uz.Sorted:=true; uz.Duplicates:=dupIgnore;
while ...
 uz.Add(...Field...('ученое звание').AsString);
end;
...
ComboBox.Items.Assign(uz);
uz.free;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.12.2015, 17:50   #5
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Не я просто хочу шуструю работу приложения.
У меня уже есть два заполнения DBCombox с разных таблиц (при начале редактирования записи)
типа:
Код:
select distinct * from (select distinct(KEEP_ORGANIZATION) from GOV_ETALON
where KEEP_ORGANIZATION is not null union all select distinct(STORED_ETALON) from REGISTER_ETALON
where STORED_ETALON is not null ) T, (select min(YEAR_ETALON) as MIN_YEAR, max(YEAR_ETALON) as MAX_YEAR
from GOV_ETALON)A

Последний раз редактировалось KBO; 13.12.2015 в 17:54.
KBO вне форума Ответить с цитированием
Старый 13.12.2015, 18:14   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Шустрость работы врядли будет зависеть от компонентов. Скорее от того, как проиндексирована база, и как будут использоваться запросы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.12.2015, 18:42   #7
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

А не подскажешь ещеодну такую штуку с DBLookupComBox:

Есть эта же таблица1 с тремя полями

Код:
«id» «last_name» «firm»
 1     Федотов   фирма №3
 2     Федотов   фирма №4
с которой берет данные DBLookupComBox.
В параметрах «ListField» и «KeyField» (DBLookupComBox), установлено поле «last_name». При перемещении по списку DBLookupComBox, в DBGrid таблица1 видно, что курсор перемещается по записям (1 и 2).
Как сделать чтоб пользователь при выборе фамилии например
с "id" = 1, курсор мог позиционироваться на выбранную запись, с id = 1,
или
с "id" = 2, курсор мог позиционироваться на выбранную запись, с id = 2. А не только на запись, с id = 1?
У меня же, DBLookupComBox используется как справочник, т.е. только чтоб в поле вставить нужное строковое значение
KBO вне форума Ответить с цитированием
Старый 13.12.2015, 19:43   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Извини, не понял...
У тебя DBLookupComBox и так перемешает, чего еще нужно перемещать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.12.2015, 19:44   #9
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Да нет, это я не совсем правильно выразился.

В списке DbLookUpComboBox, эти две фамилии выделены синим цветом (т.к. они по его мнению одинаковые).
Когда я перемещаюсь по ним мышкой, в DBGrid (подключенная к таблице с фамилиями) тоже премещается курсор - все как нужно.
Но только я нажимаю мышкой на вторую строку (в списке DbLookUpComboBox) (фамилия с id=2 "Федотов" "Фирма №4"), у меня выскакивает запись с "Фирма №3".
и
Код:
procedure TFMain.DbLookUpComboBoxKeyValueChanged(Sender: TObject);
begin
  showmessage(ibdsPeople.FieldByName('ID').AsString);
end;
выдает "1", вмессто "2"
Можно конечно, каким-нибудь образом получать индекс выделенной строки в списке DbLookUpComboBox, и затем позиционироваться на номере этой строки в DataSet.

Но я пока не знаю как получить номер выделенной строки DbLookUpComboBoxEh?

Последний раз редактировалось KBO; 13.12.2015 в 20:00.
KBO вне форума Ответить с цитированием
Старый 13.12.2015, 20:22   #10
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Как подсказали,
Нужно указывать в
Код:
KeyField := 'last_name; ID';
не одно поле, а несколько...
А ListFields оставить как есть, иначе, значение поля firm лезет в список.
Все пока замечательно работает

Последний раз редактировалось KBO; 13.12.2015 в 20:30.
KBO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проектирование базы данных в Postgres: выбор типа данных между TEXT и VARCHAR Blondy Общие вопросы по программированию, компьютерный форум 6 06.03.2014 02:09
Проектирование базы данных KastorTroy Общие вопросы по программированию, компьютерный форум 0 11.06.2013 15:15
ВЫБОР НУЖНЫХ ДАННЫХ Slavik Microsoft Office Excel 4 13.04.2009 21:37
Проектирование базы данных Xeon332 Помощь студентам 5 23.12.2008 19:40
Сетевой вариант базы данных. A.Tulin БД в Delphi 7 18.06.2007 00:46