|
#1
|
|||
|
|||
DBLookupComboBox
Такая проблема: у бд есть из аксеса- там все таблици все связи есть. В Delphi я добавляю аксесовскую базу с помощью ADOConnection, создаю две таблицы там всё в свойствах настраиваю также добавляю DataSource. Потом кидаю на форму DBLookupComboBox и для отображения его содержимого беру данные из одной таблицы(группа), ещё кидаю на форму DBGrid отбражаю в нём данные из другой таблицы(студент). Как мне сделать что бы при выборе в DBLookupComboBox (группы) отображались в DBGrid только данные (т.е. студенты) из этой группы, а не все. Побывал использовать master-detail, сразу при запуске программы возникает ошибка и не работает. А если не связывать их то они по отдельности работают нормально. Подскажите как настроить master-detail или что я делаю не так?
|
#2
|
|||
|
|||
Цитата:
|
#3
|
||||
|
||||
Цитата:
|
#4
|
||||
|
||||
Самый оптимальный вариант это делать запрос с параметром, пускай параметром будет код группы, название или ещё какая-то индификация.
Добавь на форму компоненты: ADOTable, ADOQuery, 2xDataSource, DBLookupComboBox, DBGrid. Соедени их: ADOTable1 <- DataSource1 <- DBLookupComboBox1 ADOQuery1 <- DataSource2 <- DBGrid1 В компонент ADOQuery1 в свойство SQL напиши следующий запрос Код:
SELECT фамилия, имя, отчество FROM студент WHERE id_группа=:group Код:
ADOQyery1.Close; ADOQyery1.ParamByName('group').Value:=ADOTable1.FieldByName('id_группа').Value; ADOQyery1.Open; |
#5
|
||||
|
||||
Цитата:
|
#6
|
||||
|
||||
Цитата:
Ну вот какой предлагает windaws через фильтрацию и ComboBox. То есть сначала надо заполнить ComboBox в цикле а потом по нажатию фильтр менять. У меня это гораздо проще решается. |
#7
|
||||
|
||||
Ясно.
Query1+DataSource1 Код:
SELECT фамилия, имя, отчество FROM студент WHERE id_группа=:id_группа Код:
select * from группа Все. |
#8
|
|||
|
|||
W1ndow твой первый способ не работает и где ты в тексте программы пишешь для события AfterScroll там параметры указываются не так
код: ADOQuery1.Parameters.ParamValues['group'].Value:=ADOTable1.FieldByName('id_группа').Value; Побывал делать по твоему, но не получилось т.к. прога не находит параметр group, хотя если он прописан в св-ве SQL он должен сам автоматом появится. но не пашет и ругается на это прога!!!! Последний раз редактировалось MiXa777, 27.05.2010 в 20:55. Причина: Нерешён вопрос! |
#9
|
|||
|
|||
Пробывал сделать как описал TOJluK , но проблема, когда я пробую в Query1 присвоить в св-ве DataSource DataSource1=DataSource2, то прога ругается и визвращает св-ву DataSource преведущее значение т.е. DataSource1
|
#10
|
|||
|
|||
Прикрепляю файл, глянте плз. Гляньте, буду очень презнателен!
http://narod.ru/disk/21223741000/%D0%91%D0%94.rar.html кидаю ссылку т.к. для форума объект слишком большой |
#11
|
||||
|
||||
Сделай как я написал и 100% заработает так как тебе надо, только там с DBLookupComboBox ошибка небольшая
Укажи ему свойства: ListSource - DataSource1 ListFields - группа KeyFields - id_группа Последний раз редактировалось W1ndow, 27.05.2010 в 23:24. |
#12
|
|||
|
|||
Делаю всё, как ты описал. Прога начинает ругаться, что нейзвестный параметр group. А когда я ADOQuery1 добовляю в св-ве параметр group, прога начинает ругаться и пишет ошибку 'Could not convert variant of type(Null) into type (String)' или выводит ошибку Missing Connection or ConnectionString.
как настроить параметр? Последний раз редактировалось MiXa777, 28.05.2010 в 09:09. |
#13
|
||||
|
||||
То что, ты прикрепил далеко от того, что я написал. Убирай все кроме ADOConnection. Кинь 2 TQuery и 2 TDataSource к ним. Далее все как написал выше.
Еще точнее напишу: DataSource1->DataSet=Query1 DataSource2->DataSet=Query2 Qurey1->DataSource=DataSource1 Последний раз редактировалось TOJluK, 28.05.2010 в 14:16. |
#14
|
|||
|
|||
Цитата:
фильтр будет выглядить так: Студент.filter:='код_группы= ' + группа.fitelds.fields[0].asInteger; Студент.filtered:=true; на dblookupcombobox1click ставишь и все, таблица студент будет фильтроваться по коду группы. |
#15
|
|||
|
|||
всё сделал спс большое за помощь
|