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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2015, 17:01   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Вопрос по связке двух таблиц (ClientDataSet1)

Добрый время суток форумчане.
Я хочу сделать связь между master (таблица «Depositary») и detail (таблица «Company»).

Я сейчас разбираюсь с компонентом «ClientDataSet1», по этой статье http://www.delphiplus.org/programoro...lphi7_166.html, сказано, что
«Свойство MasterSource определяет компонент TDataSource, который связан с главной таблицей»

Но у меня «ClientDataSet1», уже связан с главной таблицей, компонентом «DataSetProvider1», по идее мне сейчас нужно в Свойство MasterSource, указать таблицу detail?
Подскажите, где я запутался?

Спасибо
KBO вне форума Ответить с цитированием
Старый 31.03.2015, 20:25   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
MasterSource И MasterFields, Которые задаются ДЛЯ подчиненной таблицы. Набор данных главной таблицы не требует никаких дополнительных настроек
Нужен еще один DataSet для подчиненной таблицы, который надо настроить на соединение с БД и указать параметры подчинения (MasterSource =DataSource связанный с главным DataSet и его поля для определения параметров MasterFields)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 31.03.2015, 22:55   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

У меня имеются таблицы деталей (aqDepositaty, 3 поля) и таблица фирм-поставщиков (aqCompany, 2 поля) (компонент ADOQuery).
Для отображения всей таблицы деталей в TClientDataSet, я взял компонент DataSetProvider1 и соединил его с aqDepositaty, а в свойстве ProvaderName (указал DataSetProvider1) (с отображением таблицы деталей получилось довольно не плохо).

Но в таблице деталей, есть ссылки на таблицу фирм-поставщиков, которую я тоже хочу туда засунуть.

В свойстве «МаsterSource» я указал таблицу фирм-поставщиков, но когда открыл свойство «MasterFields», то в окне DetailFields обнаружил поля таблицы деталей, а в «MasterFields» - поля таблицы фирм-поставщиков.
Должно же быть наоборот (я имею ввиду с полями)?

Я добавил "Joined Fields": получилось "provider_id"->"id", но после того, как я нажал "ОК", то у меня в результирующем "Grid" отобразилась всего лишь одна строка, хотя связей имели все строки?
почему так?

Последний раз редактировалось KBO; 31.03.2015 в 23:13.
KBO вне форума Ответить с цитированием
Старый 01.04.2015, 09:28   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
отобразилась всего лишь одна строка, хотя связей имели все строки?
должны отображаться строки таблицы Details имеющие связь с ТЕКУЩЕЙ (одной из) строк главной таблицы. (НО НЕ ДАННЫЕ из главной таблицы!!!)

Цитата:
Но в таблице деталей, есть ссылки на таблицу фирм-поставщиков, которую я тоже хочу туда засунуть.
Т.е.вы хотите видеть ВЕСЬ список деталей в котором будет расшифрована (не код(ссылка) а название взятое из другой таблицы.
Для этого не нужны отношения Master ->Detials.
Есть два пути.
1. Использовать Lukup поля (никогда ими не пользовался)
2. Использовать для вывода SQL соединения (join) таблиц
Код:
select details.code, master.name
from details 
left join master on master.code =deatails.code
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 01.04.2015 в 09:30.
evg_m вне форума Ответить с цитированием
Старый 01.04.2015, 12:19   #5
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Спасибо "evg_m",
с таблицей detail, точнее с количеством строк таблицы "Master" происходило именно то, что вы описали.

Извиняюсь за назойливость,
Но мне не очень понятно, в каком месте (компоненте) мне писать "select" c "join", если у меня по сути 2 БД, поэтому 2 "ADOQuery" и 2 "ADOConnection"????
KBO вне форума Ответить с цитированием
Старый 01.04.2015, 12:33   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если одна СУБД может общаться с другой, то в запросе к данным первой СУБД и двух соединений и Query не надо. Если не может, то ни где
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.04.2015, 12:51   #7
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Если одна СУБД может общаться с другой, то в запросе к данным первой СУБД и двух соединений и Query не надо. Если не может, то ни где
А как же быть?
А для запроса с нескольких серверов, как я прочел:
нужно несколько ADOConnection и несколько ADOQuery, а потом чтобы совместить результаты с двух ADOQuery, можно взять какой-нибудь
in-memory dataset.
Я взял "ClientDataSet1" и теперь пытаюсь в нем соединить результаты...

или не так?
KBO вне форума Ответить с цитированием
Старый 01.04.2015, 12:58   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Покажите картинку, которую нужно получить в форме
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.04.2015, 13:17   #9
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Вот пожалуйста ссылка https://www.dropbox.com/s/d7ai31dnd4lib7q/RBD.png?dl=0 , если вы имели это в виду

имеются БД компаний и БД деталей, я хочу получить "сводную таблицу"
KBO вне форума Ответить с цитированием
Старый 01.04.2015, 13:29   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
а потом чтобы совместить результаты с двух ADOQuery, можно взять какой-нибудь
in-memory dataset.
есть Детали и хотим для каждой строки в таблице показать вместо ссылки показать имя компании (Есть в другой БД).

Цитата:
Есть два пути.[B]
1. Использовать Lukup поля (никогда ими не пользовался)/B]
Для таблицы Детали использовать LukUp поле настроенное (связанное) на другой НД (Компании).

Цитата:
имеютсмя БД компаний и БД деталей,
P.S. если есть возможность лучше будет перенести ВСЕ таблицы в ОДНУ базу.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
из двух таблиц одну evdss Microsoft Office Excel 0 25.02.2015 16:58
ОБЪЕДИНЕНИЕ ДВУХ ТАБЛИЦ BarakudaX777 БД в Delphi 11 05.03.2013 09:17
Вопрос про связь двух таблиц Vactive Microsoft Office Access 1 27.11.2010 21:33
Выборка из двух таблиц MSD SQL, базы данных 15 11.11.2010 00:58
Объединение двух таблиц jekis2506 Microsoft Office Excel 5 15.04.2009 08:34