Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.05.2010, 17:30
MiXa777 MiXa777 вне форума
Прохожий
 
Регистрация: 10.11.2009
Сообщения: 15
Репутация: 10
По умолчанию DBLookupComboBox

Такая проблема: у бд есть из аксеса- там все таблици все связи есть. В Delphi я добавляю аксесовскую базу с помощью ADOConnection, создаю две таблицы там всё в свойствах настраиваю также добавляю DataSource. Потом кидаю на форму DBLookupComboBox и для отображения его содержимого беру данные из одной таблицы(группа), ещё кидаю на форму DBGrid отбражаю в нём данные из другой таблицы(студент). Как мне сделать что бы при выборе в DBLookupComboBox (группы) отображались в DBGrid только данные (т.е. студенты) из этой группы, а не все. Побывал использовать master-detail, сразу при запуске программы возникает ошибка и не работает. А если не связывать их то они по отдельности работают нормально. Подскажите как настроить master-detail или что я делаю не так?
Изображения
Тип файла: png Безымянный.png (7.9 Кбайт, 27 просмотров)
Ответить с цитированием
  #2  
Старый 26.05.2010, 23:40
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию

Цитата:
Сообщение от MiXa777
Такая проблема: у бд есть из аксеса- там все таблици все связи есть. В Delphi я добавляю аксесовскую базу с помощью ADOConnection, создаю две таблицы там всё в свойствах настраиваю также добавляю DataSource. Потом кидаю на форму DBLookupComboBox и для отображения его содержимого беру данные из одной таблицы(группа), ещё кидаю на форму DBGrid отбражаю в нём данные из другой таблицы(студент). Как мне сделать что бы при выборе в DBLookupComboBox (группы) отображались в DBGrid только данные (т.е. студенты) из этой группы, а не все. Побывал использовать master-detail, сразу при запуске программы возникает ошибка и не работает. А если не связывать их то они по отдельности работают нормально. Подскажите как настроить master-detail или что я делаю не так?
Тебе будет проще я считаю настроить фильтр по коду группы, по нажатию на комбобокс, просмотри форум тем по фильтрации куча.
Ответить с цитированием
  #3  
Старый 27.05.2010, 09:39
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Цитата:
Сообщение от MiXa777
Подскажите как настроить master-detail или что я делаю не так?
Подскажи как ты это делал, скажу что не так.
Ответить с цитированием
  #4  
Старый 27.05.2010, 10:12
Аватар для W1ndow
W1ndow W1ndow вне форума
Новичок
 
Регистрация: 15.09.2009
Адрес: Березники
Сообщения: 61
Репутация: 16
По умолчанию

Самый оптимальный вариант это делать запрос с параметром, пускай параметром будет код группы, название или ещё какая-то индификация.
Добавь на форму компоненты: ADOTable, ADOQuery, 2xDataSource, DBLookupComboBox, DBGrid.
Соедени их:
ADOTable1 <- DataSource1 <- DBLookupComboBox1
ADOQuery1 <- DataSource2 <- DBGrid1
В компонент ADOQuery1 в свойство SQL напиши следующий запрос
Код:

SELECT фамилия, имя, отчество
FROM студент
WHERE id_группа=:group
А теперь для события AfterScroll у комопнента ADOTable1 напиши следующий код:
Код:

ADOQyery1.Close;
ADOQyery1.ParamByName('group').Value:=ADOTable1.FieldByName('id_группа').Value;
ADOQyery1.Open;
И теперь когда ты будешь выбирать группу в DBLookupComboBox1 то в гриде будет отображаться список учащихся.
Ответить с цитированием
  #5  
Старый 27.05.2010, 11:07
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Цитата:
Сообщение от W1ndow
Самый оптимальный вариант...
Да уж, самый что ни на есть оптимальный. Какой же тогда по вашему мнению не оптимальный?
Ответить с цитированием
  #6  
Старый 27.05.2010, 15:01
Аватар для W1ndow
W1ndow W1ndow вне форума
Новичок
 
Регистрация: 15.09.2009
Адрес: Березники
Сообщения: 61
Репутация: 16
По умолчанию

Цитата:
Сообщение от TOJluK
Да уж, самый что ни на есть оптимальный. Какой же тогда по вашему мнению не оптимальный?

Ну вот какой предлагает windaws через фильтрацию и ComboBox. То есть сначала надо заполнить ComboBox в цикле а потом по нажатию фильтр менять. У меня это гораздо проще решается.
Ответить с цитированием
  #7  
Старый 27.05.2010, 15:26
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Ясно.
Query1+DataSource1
Код:
SELECT фамилия, имя, отчество
FROM студент
WHERE id_группа=:id_группа
Query2+DataSource2
Код:
select * from группа
В Query1 св- во DataSource1=DataSource2

Все.
Ответить с цитированием
  #8  
Старый 27.05.2010, 19:14
MiXa777 MiXa777 вне форума
Прохожий
 
Регистрация: 10.11.2009
Сообщения: 15
Репутация: 10
Вопрос

W1ndow твой первый способ не работает и где ты в тексте программы пишешь для события AfterScroll там параметры указываются не так
код:
ADOQuery1.Parameters.ParamValues['group'].Value:=ADOTable1.FieldByName('id_группа').Value;
Побывал делать по твоему, но не получилось т.к. прога не находит параметр group, хотя если он прописан в св-ве SQL он должен сам автоматом появится. но не пашет и ругается на это прога!!!!

Последний раз редактировалось MiXa777, 27.05.2010 в 20:55. Причина: Нерешён вопрос!
Ответить с цитированием
  #9  
Старый 27.05.2010, 21:07
MiXa777 MiXa777 вне форума
Прохожий
 
Регистрация: 10.11.2009
Сообщения: 15
Репутация: 10
Вопрос

Пробывал сделать как описал TOJluK , но проблема, когда я пробую в Query1 присвоить в св-ве DataSource DataSource1=DataSource2, то прога ругается и визвращает св-ву DataSource преведущее значение т.е. DataSource1
Ответить с цитированием
  #10  
Старый 27.05.2010, 21:18
MiXa777 MiXa777 вне форума
Прохожий
 
Регистрация: 10.11.2009
Сообщения: 15
Репутация: 10
Радость

Прикрепляю файл, глянте плз. Гляньте, буду очень презнателен!
http://narod.ru/disk/21223741000/%D0%91%D0%94.rar.html
кидаю ссылку т.к. для форума объект слишком большой
Ответить с цитированием
  #11  
Старый 27.05.2010, 23:03
Аватар для W1ndow
W1ndow W1ndow вне форума
Новичок
 
Регистрация: 15.09.2009
Адрес: Березники
Сообщения: 61
Репутация: 16
По умолчанию

Сделай как я написал и 100% заработает так как тебе надо, только там с DBLookupComboBox ошибка небольшая
Укажи ему свойства:
ListSource - DataSource1
ListFields - группа
KeyFields - id_группа

Последний раз редактировалось W1ndow, 27.05.2010 в 23:24.
Ответить с цитированием
  #12  
Старый 28.05.2010, 09:07
MiXa777 MiXa777 вне форума
Прохожий
 
Регистрация: 10.11.2009
Сообщения: 15
Репутация: 10
Вопрос

Делаю всё, как ты описал. Прога начинает ругаться, что нейзвестный параметр group. А когда я ADOQuery1 добовляю в св-ве параметр group, прога начинает ругаться и пишет ошибку 'Could not convert variant of type(Null) into type (String)' или выводит ошибку Missing Connection or ConnectionString.
как настроить параметр?

Последний раз редактировалось MiXa777, 28.05.2010 в 09:09.
Ответить с цитированием
  #13  
Старый 28.05.2010, 14:12
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

То что, ты прикрепил далеко от того, что я написал. Убирай все кроме ADOConnection. Кинь 2 TQuery и 2 TDataSource к ним. Далее все как написал выше.

Еще точнее напишу:
DataSource1->DataSet=Query1
DataSource2->DataSet=Query2

Qurey1->DataSource=DataSource1

Последний раз редактировалось TOJluK, 28.05.2010 в 14:16.
Ответить с цитированием
  #14  
Старый 28.05.2010, 14:59
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию

Цитата:
Сообщение от W1ndow
Ну вот какой предлагает windaws через фильтрацию и ComboBox. То есть сначала надо заполнить ComboBox в цикле а потом по нажатию фильтр менять. У меня это гораздо проще решается.
Я имел ввиду dblookupcombobox, в цикле заполнять ничего не нужно
фильтр будет выглядить так:
Студент.filter:='код_группы= ' + группа.fitelds.fields[0].asInteger;
Студент.filtered:=true;
на dblookupcombobox1click ставишь и все, таблица студент будет фильтроваться по коду группы.
Ответить с цитированием
  #15  
Старый 28.05.2010, 18:42
MiXa777 MiXa777 вне форума
Прохожий
 
Регистрация: 10.11.2009
Сообщения: 15
Репутация: 10
По умолчанию

всё сделал спс большое за помощь
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:35.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter