Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 02.06.2019, 10:19   #1
joker2231a
Новичок
 
Регистрация: 29.05.2019
Сообщений: 2
Репутация: 10
По умолчанию Связь между таблицами

Добрый день. Мне необходимо отобразить данные в DBgrid в Delphi 7, используя ADOQuery, SQL и Access.
Таблиц всего десять:
Главная таблица в которой есть поля, данные берутся из других таблиц:
1 производитель ноутбуков берется из таблицы "производитель ноутбуков"
2 модель ноутбука берется из таблицы "модели ноутбуков", которая связана с "производители ноутбуков"
3 производитель процессора берется из таблицы "производители процессоров"
4 тип (поколение) процессора - берется из таблицы "поколение", которая связана с "произ процессоров"
5 модель процессора - из таблицы модели, которая связана с "поколение"
6 производитель монитора - из табл "произ мониторов"
7 модель монитора - из табл модель монитора, которая связана с "произ. мониторов"
8 производитель периф. ус-ва - из табл "производители периф. ус-ва"
9 модель периф ус-ва - из табл модели периф ус-ва, которая связана с "производители"
Вот, имеется картинка связей, в которой сложно разобраться - рисунок 1
Далее, я создаю SQL-запрос - рисунок 2
ВОт он

Код:
SELECT MainTable.*, Monitor.*, Notebook.*, Periph.*, Processor.*, CreatorMonitor.*, CreatorNotebook.*, CreatorPeriph.*, PokolProcessor.*, ModelProcessor.* 
FROM Processor RIGHT JOIN (PokolProcessor RIGHT JOIN (Periph RIGHT JOIN (Notebook RIGHT JOIN (Monitor RIGHT JOIN (ModelProcessor RIGHT JOIN (CreatorPeriph RIGHT JOIN (CreatorNotebook RIGHT JOIN (CreatorMonitor RIGHT JOIN MainTable ON CreatorMonitor.cmonitor_id = MainTable.monitor_model) ON CreatorNotebook.cnotebook_id = MainTable.notebook_model) ON CreatorPeriph.cperiph_id = MainTable.periph_model) ON ModelProcessor.model_id = MainTable.processor_model) ON (Monitor.monitor_id = MainTable.monitor_creator) AND (Monitor.monitor_id = CreatorMonitor.cmonitor_idsv)) ON (Notebook.notebook_id = MainTable.notebook_creator) AND (Notebook.notebook_id = CreatorNotebook.cnotebook_idsv)) ON (Periph.periph_id = MainTable.periph_creator) AND (Periph.periph_id = CreatorPeriph.cperiph_idsv)) ON (PokolProcessor.pokol_id = ModelProcessor.model_idsv) AND (PokolProcessor.pokol_id = MainTable.processor_type)) ON (Processor.processor_id = PokolProcessor.pokol_idsv) AND (Processor.processor_id = MainTable.processor_creator);

Вставляя в ADOQuery в Delphi, после активируя его, вылезает ошибка "не поддерживается выражение объединения"

Вот файл Access, если что


Я Надеюсь очень на вас! Мне до завтра надо сделать это!
Миниатюры
Нажмите на изображение для увеличения
Название: рис1.jpg
Просмотров: 46
Размер:	87.4 Кб
ID:	96825   Нажмите на изображение для увеличения
Название: рис2.jpg
Просмотров: 44
Размер:	105.7 Кб
ID:	96826  
Вложения
Тип файла: rar bds.rar (23.7 Кб, 9 просмотров)
joker2231a вне форума   Ответить с цитированием
Старый 03.06.2019, 10:40   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,855
Репутация: 6688
По умолчанию

Ну, а если в читабельном виде, а не абы-как
Код:
SELECT MainTable.*, Monitor.*, Notebook.*, Periph.*, Processor.*, CreatorMonitor.*, 
       CreatorNotebook.*, CreatorPeriph.*, PokolProcessor.*, ModelProcessor.* 
  FROM ((((((((MainTable
    LEFT JOIN CreatorMonitor ON CreatorMonitor.cmonitor_id = MainTable.monitor_model)
    LEFT JOIN Monitor ON (Monitor.monitor_id = MainTable.monitor_creator) AND (Monitor.monitor_id = CreatorMonitor.cmonitor_idsv))
    LEFT JOIN CreatorNotebook ON CreatorNotebook.cnotebook_id = MainTable.notebook_model)
    LEFT JOIN Notebook ON (Notebook.notebook_id = MainTable.notebook_creator) AND (Notebook.notebook_id = CreatorNotebook.cnotebook_idsv))
    LEFT JOIN CreatorPeriph ON CreatorPeriph.cperiph_id = MainTable.periph_model)
    LEFT JOIN Periph ON (Periph.periph_id = MainTable.periph_creator) AND (Periph.periph_id = CreatorPeriph.cperiph_idsv))
    LEFT JOIN ModelProcessor ON ModelProcessor.model_id = MainTable.processor_model)
    LEFT JOIN PokolProcessor ON (PokolProcessor.pokol_id = ModelProcessor.model_idsv) AND (PokolProcessor.pokol_id = MainTable.processor_type))
    LEFT JOIN Processor ON (Processor.processor_id = PokolProcessor.pokol_idsv) AND (Processor.processor_id = MainTable.processor_creator)
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
связь между таблицами nefa Microsoft Office Access 0 21.03.2016 19:36
Связь между таблицами SeNaT БД в Delphi 14 08.05.2013 17:45
Связь между таблицами byte916 Microsoft Office Access 3 03.08.2011 11:05
SQL - связь между таблицами. Сергей089 Microsoft Office Access 1 05.10.2010 11:49
Связь между таблицами Катрина БД в Delphi 3 17.05.2008 18:24


01:43.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru