Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DBLookupComboBox [D7, XP]


coral ©   (2005-12-01 17:15:00) 

Как работать с DBLookupComboBox?


Ega23   (2005-12-02 11:01:00) [1]


> Ты не поверишь, но ниче не выходит... при выборе записи
> из combo в гриде просто курсор ставится на запись, но никакого
> запроса и тем более его выполнения не происходит...
>


Подзапрос должен быть связан с набором данных, на которых смотрит твой комбо.


coral   (2005-12-01 19:11:00) [2]

Ты не поверишь, но ниче не выходит... при выборе записи из combo в гриде просто курсор ставится на запись, но никакого запроса и тем более его выполнения не происходит...


Ega23   (2005-12-01 18:47:00) [3]

Вместо первого грида ты можешь как раз TDBLookupCombo использовать.
Пойми, это всего лишь графическое представление набора данных. И переоткрытие подчинённого запроса будет происходить тогда, когда у набора данных передвинется курсор. А от чего он передвинется - в гриде новую запись выбрали, TDataSet.Next сделали или в LookupCombo новую запись выбрали - это дело десятое.


coral   (2005-12-01 18:37:00) [4]

Ок, уговорил! вернемся к твоему примеру! как я понимаю, ты предлагаешь чтобы по выбору поля в одной таблице (гриде), в другой таблице отображались бы сведения по запросу к другой таблице так?


Ega23   (2005-12-01 18:29:00) [5]


> а теперь надо как-то обращаясь к этим записям, делать выборку
> и кидать все в грид... вот только вопрос как?


Вот для того, чтобы не было мучительного "Как?" и разработан компонент TDBLookupCombo.


coral   (2005-12-01 18:28:00) [6]

Ну ты замутил! а если я из Access заполню обычный combo столбцом одной из таблиц, например:
begin
 with adotable1 do
 begin
   open;
   while not EOF do
   begin
     ComboBox1.Items.Add(FieldByName('Òåìà').AsString);
     next;
   end;
 end;
end;

а теперь надо как-то обращаясь к этим записям, делать выборку и кидать все в грид... вот только вопрос как?


Ega23   (2005-12-01 18:11:00) [7]

Почему? Сможешь.
Вот пример.

Сначала БД

Create Table Master
(
 MasterID int
 MasterName varchar
)
Create Table Detail
(
DetainlID int,
MasterID int,
DetailName varchar
)


Предположим, у тебя такая структура данных.
Берёшь Delphi, создаёшь новый проект, делаешь коннект к БД (не знаю, какими компонентами доступа пользуешься).
Кладёшь 2 потомка TDataSet (например, TADOQuery или TQuery - в зависимости от того, какой механизьм доступа к данным) и 2 TDataSource.
В первом DataSet'е в SQL пишешь 'Select * from MasterTable'
Во втором - 'Select * from DetailTable where MasterID=:MasterID'
И для второго DataSet в свойство DataSource прописываешь первый DataSource (который на первый DataSet смотрит).
Кидаешь на форму 2 DBGrid'а, первому присваиваешь dataSource1, второму - dataSource2.
Открываешь оба DataSet'а. Кликаешь по первому гриду. Наслаждаешься.

То же самое справедливо и для TDBLookupCombo.


coral   (2005-12-01 18:03:00) [8]

То есть в зависимости от выбранного в combo поля я никак не смогу отображать данные в гриде?


Ega23   (2005-12-01 18:01:00) [9]

Ты путаешь тёплое с мягким.
Но что е тебе подсказал - это работа на уровне наборов данных. Так называемая Master-Detail связь.


coral   (2005-12-01 17:23:00) [10]

А как потом обратиться к этим полям уже в комбобоксе? У меня в базе есть таблица Учеников и Тестов. В combo я отображаю названия тем тестов. Мне нужно по выбору темы, чтобы в грид отобрадились поля учеников, которые сделали этот тест. как быть?


Ega23   (2005-12-01 17:17:00) [11]

Нужен набор данных. Прописываешь его в ListSource. Определяешь поле KeyField и ListField.


Наверх

Титульная страница Поиск, карта сайта Написать письмо