|
#1
|
||||
|
||||
Фильтр для DBGrig
Здравствуйте уважаемые!! Вопрос у меня пустяковый и вполне вероятно что на него уже отвечали на форуме, но все же я его задам.
Дела обстоят следующим образом: База данных на Access; На форме расположен DBGgid, который связан с таблицей "Студенты" с полями id, id_grup и fio; Еще на форме присутствует DBLookupComboBox, который в свою очередь связан с таблицей "Группы" с полями id и nam; Так вот, как сделать чтобы при выборе группы в таблице отображались студенты только этой группы?? Перепробовал несколько вариантов, но ничего не получилось, либо ума не хватает, либо руки не из того места растут. Заранее спасибо!! Последний раз редактировалось PATRIOT.34, 02.11.2014 в 21:20. |
#2
|
||||
|
||||
Вот нашел такую же тему, но результат нулевой http://www.delphisources.ru/forum/sh...ad.php?t=12407
|
#3
|
|||
|
|||
я бы делал через Master-Detail, При этом с Master'ом связан твой ComboBox (вот не уверен, что в этом случае Lookup нужен, а проверять лень ), а с Detail'ом - грид.
Но есть более простой вариант. Получаешь список групп и заполняешь обычный ComboBox, при этом заполняешь через AddObject, где вторым параметром кладешь id группы. Далее в DataSet (или DataSource, опять же не помню точно) делаешь обработчик события OnFilterRecord, где проверяешь соотв. id группы выбранной группе или нет. |
#4
|
||||
|
||||
Я бы сделал еще проще, я бы просто базу перечитывал бы при изменении состояний компонентов. (ASC, DESC по нужному полю менял бы).
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
||||
|
||||
Я делаю так:
Кидаю на форму DBGrid, DBLookupComboBox, 2ADOQuery и 2DataSource; Связываю их DBLookupComboBox1>>DataSource1>>ADOQuery1 DBGrid1>>DataSource2>>ADOQuery2; ADOQuery1 connection=DM.ADOConnection1 и аналогично у ADOQuery2, В datasourse ничего не выбираю; У ADOQuery1 прописываю Код:
SELECT fio FROM TStud WHERE id_gr=:id У ADOQuery2 прописываю Код:
select * from TGrupp ГДЕ КОСЯК?? Помогите пожалуйста Последний раз редактировалось PATRIOT.34, 03.11.2014 в 13:52. |
#6
|
||||
|
||||
Херней какой-то занимаетесь с визуальными компонентами.
У вас ConnectionString у ADOConnection правильно сформирована? — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
||||
|
||||
Да правильно, несколько раз проверял
|
#8
|
||||
|
||||
M.A.D.M.A.N. опишите пожалуйста свой способ поподробнее, так сказать для чайников
|
#9
|
||||
|
||||
Все, сделал)) Может конечно это и не оптимальный вариант, но главное работает. Напишу детали, вдруг кому пригодится.
На форму кинул DBGrid, DBLookupComboBox, 2DataSource и 2ADOTable; Связал их DBLookupComboBox1>>DataSource2>>ADOTable2 DBGrid1>>DataSource1>>ADOTable2; Прописал connectionstring у обоих ADOTable и указал у них соответствующие tablename. У ADOTable1 это таблица "Студенты", а ADOTable2 это таблица "Группы"; У DBLookupComboBox указал keifield(по этому значению будет фильтрация в таблице, в моем случае это id) и listfield(это будет отображаться в списке DBLookupComboBox, у меня это nam), у него же по клику прописал следующий код: Код:
procedure TForm3.DBLookupComboBox1Click(Sender: TObject); begin ADOTable1.filter:='id_gr=' + ADOTable2.fields.fields[0].AsString; ADOTable1.filtered:=true; end; Может где-то написал тупость, т.к. плохо знаю терминологию, так что если что извиняйте)) СПАСИБО ВСЕМ КТО ПЫТАЛСЯ МНЕ ПОМОЧЬ!!! Последний раз редактировалось PATRIOT.34, 03.11.2014 в 19:22. |