Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24

Отображение полей в DBGrid с несколькими связанными таблицами

10.02.2013, 19:49. Показов 3966. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте)
Мой вопрос таков: я создала в Access базу данных, в которой есть 2 таблицы, связанные один-к-одному, далее в Билдере мне нужно отобразить обе таблицы на двух DBGrid, используя ADOQuery. Подскажите, пожалуйста, как лучше всего можно это сделать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.02.2013, 19:49
Ответы с готовыми решениями:

Как работать с несколькими связанными между собой таблицами?
Доброго время суток, форумчяни! Я вот пытаюсь разобраться как можно работать с несколькими таблицами которые между собой связаны (база...

Yii. Работа с несколькими таблицами и отображение их в CGridView
В сети есть решения данной задачи. Есть хорошие и есть плохие. Например, метод 1: Фрагмент класса модели: class Sample extends...

Отображение полей в DBGrid
Есть 2 Таблицы Сотрудники и Образование.В таблице сотрудники есть поле Код_Образования мне нужно чтобы чтобы вместо кода_Образования...

8
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
10.02.2013, 20:38
Lovan, здравствуйте!
А можно для начала поинтересоваться насчет связи "один-к-одному"? Что она представляет?

А по теме: для упрощения рекомендовал бы Вам использовать компонент ADOTable, в котором для связей есть соответствующие свойства: MasterSource и MasterFields.
0
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
10.02.2013, 21:04  [ТС]
Спасибо за ответ. Есть две таблицы, первая содержит: Код, ФИО, личные данные. Вторая содержит: Код, Учёная степень, Учёное звание. Связываются по коду. Это не реальная задача, а пример. Мой вопрос в том, как с помощью SQL запросов заполнить 2 DBGrid так, чтобы в одном содержалась 1-ая таблица, а во втором - 2-ая. И ещё один вопрос: как можно добавлять новые записи, если есть вот такие 2 связанные таблицы?

Добавлено через 18 минут
Расскажите, пожалуйста, как можно связать таблицы через Master Source.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
10.02.2013, 22:01
Lovan,
Цитата Сообщение от Lovan Посмотреть сообщение
Есть две таблицы, первая содержит: Код, ФИО, личные данные. Вторая содержит: Код, Учёная степень, Учёное звание. Связываются по коду. Это не реальная задача, а пример.
Очень неудачный пример для связи "1 к 1", надо сказать Положим, Иванов у нас доктор и профессор. А так случилось, что и Петров является доктором и профессором. Но, увы, этот Код (1, доктор, профессор) уже занят на Иванове =/

Ну да ладно. Предлагаю следующую условную структуру приведенного Вами выше примера.

Работники
Код Фамилия КодСтепеньЗвание
1 Иванов 1
2 Петров 1
3 Сидоров 2

СтепеньЗвание
Код УченаяСтепень УченоеЗвание
1 доктор профессор
2 кандидат доцент

Поле СтепеньЗвание.Код соединено с полем Работники.КодСтепеньЗвание как "1 ко многим".

Итак, что мы хотим? При выборе конкретного работника узнавать какие у него УЗ и УС?
Если так, то тогда проделаем следующее.

Кидаем на форму:
- ADOConnection;
- ADOTable (2 шт.);
- DataSource (2 шт.);
- DBGrid (2 шт.).

Надеюсь как связать все это между собой вопросов не возникнет.

В ADOTable1 в свойстве TableName указываем "Работники".
В ADOTable2 в свойстве TableName указываем "СтепеньЗвание". Там же в свойстве MasterSource указываем "DataSource1". После этого заходим в свойство MaserFields и создаем следующую связь:
- из раздела Detail Fields выбираем "Код", жмем Add;
- из раздела Master Fields выбираем "КодСтепеньЗвание", жмем Add.

Устанавливаем свойство Active у ADOTable1 и ADOTable2 в true.

Запускаем проект.

P.S. Писал по памяти, т.к. Builder'а под рукой нету. Возможно, где-нибудь попутал. Но вроде бы так.
0
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
11.02.2013, 01:32  [ТС]
Спасибо большое)
На правильность не проверяла, но суть поняла. У меня тоже был такой вариант: использовать несколько ADOTable, но думала, может, есть вариант получше. Ведь если у меня база, состоящая, к примеру, с 10 таблиц, то это будет очень непрактично использовать 10 ADOTable. Это займёт много лишней памяти, да и в самом коде тогда будет много повторений, в смысле одинаковых функций для каждого ADOTable. Возможно, есть другое, более оптимальное решение.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.02.2013, 02:28
Lovan,
Цитата Сообщение от Lovan Посмотреть сообщение
Ведь если у меня база, состоящая, к примеру, с 10 таблиц
Т.е. хотите сказать, что Вы отдельно каждую таблицу из этих 10 будете на одной форме отображать?.. Это, конечно, тяжелый случай (во всех смыслах)...

Насчет альтернативы могу предложить действительно использовать класс TADOQuery, работая непосредственно с запросами и обрабатывая события DBGrid/DataSource/ADOQuery по клику на ячейку в DBGrid'е, изменению указателя в ADOQuery и т.п..

А вот насчет оптимизации, то тут я, пожалуй, не подскажу. Грубо говоря, в любом случае DBGrid'у для представления какой-либо информации необходим активный набор данных (в нашем случае TCustomADODataSet).

Можно посмотреть в сторону статичного компонента - StringGrid. Но, боюсь, это займет значительно больше времени, но, в принципе, сократит количество НД, которого Вы так боитесь :-)
0
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
11.02.2013, 02:45  [ТС]
Ну, в задаче, которую мне предстоит решить, мне действительно нужно будет отобразить много таблиц на 1 форме, но это легко можно сделать с помощью PageControl. А StringGrid здесь абсолютно не поможет, тем более, вы правильно заметили - он статичен.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.02.2013, 03:19
Lovan,
Цитата Сообщение от Lovan Посмотреть сообщение
в задаче, которую мне предстоит решить, мне действительно нужно будет отобразить много таблиц на 1 форме
И все они (таблицы) между собой в один момент времени связаны?


Цитата Сообщение от Lovan Посмотреть сообщение
StringGrid здесь абсолютно не поможет
Цитата Сообщение от Lovan Посмотреть сообщение
- он статичен
Никто не запрещает его оживить :-)

И разумеется, не всегда кол-во DBGrid'ов = кол-ву НД. В общем, все зависит от конкретной задачи.
0
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 24
11.02.2013, 19:44  [ТС]
Да, все таблицы связаны одновременно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.02.2013, 19:44
Помогаю со студенческими работами здесь

Отображение связанных полей в DBGrid
Здравствуйте, уважаемые специалисты. У меня к вам вопрос. Необходимо через ADOQuery в DBGrid вывести таблицу "Tovar",...

Отображение полей типа BLOB в DBGrid
У меня в базе есть поле с типом BLOB, подскажите как его отобразить в DBGrid. Мне подсказали, что можно как-то через Memo выводить, вот...

Работа со связанными таблицами
Hi All! Есть две таблицы. Первая: КОД_БОЛЬНОГО ФИО_БОЛЬНОГО

Работа со связанными таблицами
Есть у меня три таблицы (показаны на рисунке), как мне вывести CustomerName из таблицы customer по CustomerID из таблицы order? Спасибо...

Работа со связанными таблицами
Этот вопрос я задал и в разделе VB, извините за дублирование, но это тесно связано с SQL/ База в SQL. Клиент на VB. в...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru