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

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

10.02.2013, 19:49. Показов 3985. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru