Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 17
1

Извлечение данных из связанных таблиц

12.07.2010, 16:45. Показов 3612. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Опыта у меня не сильно много, поэтому прошу сразу не издеваться))
Дело такое. Нужно вытащить из двух связанных таблиц записи. Ну, например, первая таблица поля (id и текст), вторая таблица тоже (id2, текст2). Таблицы связываются по этим id. Задача как можно проще вытащить из двух таблиц ТЕКСТы и отобразить в двух DBMemo. Можно конечно для каждой таблицы создать свой DataSource, но хотелось бы чтобы DBNavigator этим всем синхронно управлял.
Заранее спасибо за любые предложения!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2010, 16:45
Ответы с готовыми решениями:

Добавление данных в несколько связанных таблиц и просмотр этих данных на одной форме
Здравствуйте. Задача такая. Заполняю Персону, физическое лицо. таблица Персоны(п_код,...

Удаление данных из связанных таблиц
Приветствую! БД - MySql. Подскажите как реализовать проверку удаления данных из таблицы,...

Удаление связанных данных из таблиц
Имеется таблица А которая связана с последующими таблицами В,С...(их порядка 10). Хочу удалить все...

Просмотр данных из двух связанных таблиц
В Access есть две таблицы, связанные между собой. В Delphi создал Edit'ы и прилепил к ним некоторые...

16
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,255
12.07.2010, 17:25 2
Вопрос требует уточнения.
Если это действительно связанные таблицы, то необходимо знать тип связи. Напимер таблицы могуб быть связаны 1:1 (один к одному). То есть каждой записи из первой таблицы соответствует только одна запись из второй. Таблицы могут быть связаны по типу 1:N (одтн ко многим). При этом каждой записи первой таблицы может соответсвовать некоторое множество N (в том числе и пустое) записей второй таблицы. Может иметь место и другой тип связи, но об этом сейчас говорить не будем. Так, вот, надо знать, какой вид связи Вас интересует. Необходимо ли извлекать записи таблицы 1, которым в таблице 2 ничего не соответствует.
0
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 17
12.07.2010, 18:10  [ТС] 3
ну тут дело в том, что база на postgresql и таблицы жестко не связаны, но при добавлении/обновлении/удалении срабатывают триггеры на серверной стороне и обновляют связи. но нас это сейчас мало волнует. нам надо как бы сопоставить два id из разных таблиц и вывести соответствующие поля. Чтоб было понятнее - одна из таблиц это справочник. Ну, т.е. id в первой таблице является как бы ссылкой на ТЕКСТ из второй таблицы. И нам нужно взять вывести текст из 1 таблицы в первый мемо, взять оттуда id, сопоставить с id из второй таблицы и вывести во второй мемо текст из второй таблицы.
Насчет типа связей все сложно. вообще, связи разные (полей ID много, я привел один для простоты), есть все три случая, даже многие-ко-многим. но мне сейчас каркас надо сделать, поэтому можно считать что связи один-к-одному.
На самом деле все просто, может я не совсем понятно выражаюсь, мне кажется делов на минуту. Есть таблица с полем id, но на форму id же не выведешь, нужно вместо него значение, которое хранится в другой таблице подставить...
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,255
12.07.2010, 18:47 4
Попробуй так
SQL
1
2
3
SELECT T1.ID, T1.text, T2.Text2
FROM Tabel1 T1
LEFT JOIN Tabel2 T2 ON T2.ID2 = T1.ID
Здесь Tabel1, Tabel2 - первая и вторая таблицы соответственно. В результирующем наборе получишь поле text из первой таблицы. Если записи первой таблицы соответствует запись во второй, то получишь Text2 из второй. Если нет, то во втором поле будет null
0
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 17
12.07.2010, 20:00  [ТС] 5
Ну свой обработчик написать не проблема, мне интересно стандартными инструментами обойтись нельзя? Просто чтоб дбнавигатор листал записи, а это само подставлялось...
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,255
13.07.2010, 07:23 6
Цитата Сообщение от red88888 Посмотреть сообщение
Ну свой обработчик написать не проблема
Да причем здесь обработчик. Я тебе привел текст SQL. Пропиши его в DataSet и получишь набор с этими полями. А там хоть навигатором, хоть чем листай данные смотри и наслаждайся
0
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 17
13.07.2010, 14:45  [ТС] 7
если я правильно понял, этот запрос надо вписать в свойство DataSet DataSourсe'а? Если так, то ничего не получается - выводит ошибку "Invalid property value"
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,255
13.07.2010, 14:52 8
Начнем сначала. Какие средства доступа к данным ты используешь. Другими словами какие у тебя на форме компоненты, с помощью которых ты просматириваешь данный, находящиеся в БД
0
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 17
13.07.2010, 15:00  [ТС] 9
у меня на форме DataSource, DBNavigator и Table.

Нужно теперь много много DBEdit'ов, чтобы они отображали поля базы
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,255
13.07.2010, 15:12 10
Если это компонента Table из закладки BDE, то она для формирования наборов данных из нескольких связанных таблиц не годится. С ее помощью можно обрабатывать данные, содержащиеся в одной таблице. Тебе нужно использовать TQuery (если я угадал и ты действительно используешь компоненты доступа BDE). TQuery имеет свойство SQL. Там и необходимо указать текст селекта.
Кстати, а СУБД какую используешь?
0
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 17
13.07.2010, 15:13  [ТС] 11
да, компоненты из BDE. субд postgre
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,255
13.07.2010, 15:16 12
Плнятно. PosrGre - это твой выбор или настоятельная необходимость
0
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 17
13.07.2010, 15:22  [ТС] 13
необходимость((
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,255
13.07.2010, 15:29 14
Если необходимость, то советов по поводу выбора СУБД давать не буду.
По поводу компонент доступа к данным. Вопрос на нашем форуме обсуждался много раз. Если ты начинаешь работать с БД прими во внимание следующее. Библиотека BDE разрабатывалась давно и предназначена в основном для БД, работающих в технологии "файл - сервер". Можно, конечно, работать и с СУБД клиент - серверными, но при этом рано или поздно упрешься в ограничения BDE. Поэтому присмотрись к другим средствам доступа к БД.
0
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 17
13.07.2010, 15:32  [ТС] 15
может что посоветуешь?
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,255
13.07.2010, 15:40 16
Тут мне советовать сложно. Я давно и плотно подсел на компоненты FIBPlus, но они работают только с ограниченным набором СУБД (FireBird, Interbase, Yafil)
Присмотрись к компонентам ADO. По моим наблюдениям они пользуются наибольшей популярностью. Я их повехностно посмотрел и как-то не увидел там важного, на мой взгляд функционала явного управления транзакциями. Но это, м.б. от поверхностности.
0
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 17
13.07.2010, 15:55  [ТС] 17
ок, большое спасибо за помощь!
0
13.07.2010, 15:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2010, 15:55
Помогаю со студенческими работами здесь

Вывод данных из связанных таблиц в DBGrid
Добрый день. Только начинаю изучать БД, да и с Делфи знаком поверхностно, поэтому не судите строго,...

Создание связанных таблиц и добавление в них данных (mySQL)
Delphi+mySQL. Вообще никак не могу врубиться. Создал БД и таблицы autorisation и personaje. В...

Вывод данных связанных таблиц в одном DBGrid и без SQL
БД - access Кинул компоненты на DataModule, ADOConnection, ADOTable, DataSource ... Связал...

Вывод в DBGrid данных из связанных таблиц
Добрый день! Есть БД со связанными таблицами. Вывожу ее через DBGrid, но связанные данные не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru