Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2009, 17:15   #11
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Введите в главную IdTable.
Тогда SQL-запросом будете выбирать во вторую DBGrid данные хоть из сотни таблиц...

Последний раз редактировалось mihali4; 08.11.2009 в 17:28.
mihali4 вне форума Ответить с цитированием
Старый 08.11.2009, 17:33   #12
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Можно как-то так сделать:
1. На каждую дочернюю таблицу набросать по Table (или что там используется у вас) и DataSource. Настроить у них с главной таблицей связь мастер-деталь (Master-Detail). У DBGrid'a, например, на двойной клик (OnDblClick) повесить просто смену источника данных для подчиненного грида:
Код:
DbGridDetail.DataSource := DataSourceXXX;
2. Создать для подчиненного грида одну Query/ADOQuery/... и DataSource. При выделении строки в главной таблице, собрать соответствующий SQL-запрос и выполнить его.
Вместо двойного клика вероятно будет целесообразнее использовать какое-то другое событие. Может какое-нибудь OnAfterScroll у главного Table/ADOTable/... или еще какое.
А можно и БД перепроектировать, чтобы такого не требовалось
pu4koff вне форума Ответить с цитированием
Старый 08.11.2009, 17:50   #13
Elena_Saygina
Пользователь
 
Аватар для Elena_Saygina
 
Регистрация: 26.09.2009
Сообщений: 21
По умолчанию

Связь мастер-деталь это как? подскажите, пожалуйста.
Elena_Saygina вне форума Ответить с цитированием
Старый 08.11.2009, 18:06   #14
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от Elena_Saygina Посмотреть сообщение
Связь мастер-деталь это как? подскажите, пожалуйста.
Допустим, у нас есть MasterTable - главная таблица, dsMaster - DataSource "привязанный" к MasterTable и DetailTable - дочерняя таблица.
у DetailTable свойство MasterSource выставляем в dsMaster. Так же есть там свойство MasterFields, выделяем его и жмякаем на кропку с многоточием. В окошке там "связываем" поля главной таблицы и дочерней.
Всё. Мастер-деталь готова.
Если используется не Table с указанием имени таблицы, а Query с необходимостью написания SQL-запроса, то там в свойство DataSource выставляем dsMaster, а в запросе используем параметры с именами полей главной таблицы:
Код:
select *
from detail
where (detail_field = :master_field)
master_field - связующее поле главной таблицы, а detail_field - соответствующее поле в дочерней таблице (обычно это поле в БД является внешним ключом на главную таблицу)
ЗЫ. Это для 7-й версии делфей. В более новых может что-то быть несколько иначе.
ЗЫ2. Если непонятно написал, то можно погуглить/пояндексить что-то вроде "Delphi. master-detail", ибо статеек на эту тему должно быть достаточное количество. Так же во многих в книжках по делфям эта тема рассмотрена.
pu4koff вне форума Ответить с цитированием
Старый 08.11.2009, 18:08   #15
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
На каждую дочернюю таблицу набросать по Table (или что там используется у вас) и DataSource
Да вы что - озверели???
Тут достаточно двух DataSource и двух ADOTable...
Просто для подчиненной таблицы делаем:
Код:
procedure TForm1.ADOTable1AfterScroll(DataSet: TDataSet);
begin
ADOTable2.Close;
ADOTable2.TableName:=тут имя нужной таблицы
я предложил поле IDTable, чтобы однозначно ее определить из главной таблицы...
ADOTable2.Filter:=ADOTable1.FieldByName('N группы').AsString;
ADOTable2.Open;
end;
Ведь автору нужно в данный момент выбирать данные только из одной таблицы?
Если не из одной - см. пост 11.

Последний раз редактировалось mihali4; 08.11.2009 в 18:10.
mihali4 вне форума Ответить с цитированием
Старый 08.11.2009, 18:18   #16
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Да вы что - озверели???
Тут достаточно двух DataSource и двух ADOTable...
Просто для подчиненной таблицы делаем:
...
Там небольшая проблема с заголовками колонок будет. Придётся их еще переименовывать вручную при скроллинге, а так можно будет в режиме дизайнера всё "обозвать" как нужно
Цитата:
Сообщение от mihali4 Посмотреть сообщение
Ведь автору нужно в данный момент выбирать данные только из одной таблицы?
Если не из одной - см. пост 11.
Если честно, то я не понял, что за IdTable такой. Имеется в виду в главную таблицу такое поле добавить и от его значения потом "плясать" или что?
pu4koff вне форума Ответить с цитированием
Старый 08.11.2009, 18:23   #17
Elena_Saygina
Пользователь
 
Аватар для Elena_Saygina
 
Регистрация: 26.09.2009
Сообщений: 21
По умолчанию

Со связями разобралась, спасибо.
Сейчас с запросом буду разбираться.
Elena_Saygina вне форума Ответить с цитированием
Старый 08.11.2009, 18:27   #18
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Если честно, то я не понял, что за IdTable такой. Имеется в виду в главную таблицу такое поле добавить и от его значения потом "плясать" или что?
Это поле определяет, из какой таблицы брать доп. данные.
Честно говоря, автор так толком и до конца не уточнила, какие там у нее подчиненные таблицы и почему все их нельзя слить в одну.
Неразумная, на мой взгляд, структура базы...
mihali4 вне форума Ответить с цитированием
Старый 08.11.2009, 18:40   #19
Elena_Saygina
Пользователь
 
Аватар для Elena_Saygina
 
Регистрация: 26.09.2009
Сообщений: 21
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Это поле определяет, из какой таблицы брать доп. данные.
Честно говоря, автор так толком и до конца не уточнила, какие там у нее подчиненные таблицы и почему все их нельзя слить в одну.
Неразумная, на мой взгляд, структура базы...
Главная таблица - Группа экспертов. В ней 2 группы. Вот и для каждой группы создана таблица с составом каждой из них (ну там ФИО, адрес, должность).
А структуру базы определил дипломный руководитель)))
Elena_Saygina вне форума Ответить с цитированием
Старый 08.11.2009, 18:45   #20
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от Elena_Saygina Посмотреть сообщение
Главная таблица - Группа экспертов. В ней 2 группы. Вот и для каждой группы создана таблица с составом каждой из них (ну там ФИО, адрес, должность).
А структуру базы определил дипломный руководитель)))
Интересно... а если третья группа появится, то еще одну табличку в базе создавать?
Обычно создают две таблички типа:
Группа_экспертов 1 o------- * Эксперт
ЗЫ. это я так связь один ко многим нарисовал, если что
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какое программирование в наше время более востребовано и более рентабельно? iukash Свободное общение 18 29.10.2009 13:02
соединение двух столбцов, имеющих схожие данные из разных таблиц kate158 SQL, базы данных 3 11.09.2009 10:08
Run-time загрузка таблиц MS SQL Server в DBGrid Delphi 7 Ketra БД в Delphi 3 21.08.2009 16:31
несколько таблиц в одном DBGrid DaemonSAT БД в Delphi 3 06.07.2008 13:27
поля из разных связных таблиц в одном dbgrid Geddar Помощь студентам 2 15.05.2008 16:57