![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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.