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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2019, 17:59   #1
drozdov9191
Пользователь
 
Регистрация: 13.12.2018
Сообщений: 19
Восклицание ADOQuery.Связь между 3-мя таблицами.

Добрый день.Очень сильно нужна помощь.
Есть 3 таблицы.Все они связанные между собой(на скриншоте бд).

В delphi на форму добавил 3 DBGrid.
Прописал:
ADOQuery1 в SQL - Select * from LichData
ADOQuery2 в SQL - Select * from Modul
ADOQuery2 в SQL - Select * from Prikaz

Теперь все данные с таблиц видны в своих DBGrid.
Но как теперь мне связать все эти 3 таблицы друг с другом?
Prikaz(номер приказа) с LichData(номер),LichData(код) с Modul(студент).

Пытался связать как было написано в других похожих темах-не получается.

Огромное спасибо заранее!
Изображения
Тип файла: jpg 123.jpg (36.5 Кб, 133 просмотров)
drozdov9191 вне форума Ответить с цитированием
Старый 20.04.2019, 19:24   #2
drozdov9191
Пользователь
 
Регистрация: 13.12.2018
Сообщений: 19
По умолчанию

Добавил новый ADOQuery и прописал в SQL:
Код:
SELECT * 
FROM prikaz p, lichdata l, modul m
WHERE p.[Номер приказа]=l.[Номер]
    AND p.[Код]=m.[Студент]
Но выдаёт ошибку.
Изображения
Тип файла: jpg 123.jpg (83.9 Кб, 148 просмотров)
drozdov9191 вне форума Ответить с цитированием
Старый 20.04.2019, 21:06   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от drozdov9191 Посмотреть сообщение
Код:
AND p.[Код]=m.[Студент]
ну, в таблице Prikaz действительно нет поля "Код"
попробуйт заменить на
Код:
AND l.[Код]=m.[Студент]
Это формально. Так должно заработать.
а вообще, очень странная структура, мне лично структура и связи между таблицами непонятно.
Зачем нужна таблица Приказ, например?
да и с таблицей Модуль тоже не всё понятно и очевидно
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.04.2019, 10:58   #4
drozdov9191
Пользователь
 
Регистрация: 13.12.2018
Сообщений: 19
По умолчанию

Самое интересное то,что когда работаю с ADOTable,программа отлично работает,всё как надо.Когда переделываю на ADOQuery ничего не работает и связи нет.Структуру работы бд,я выше же приложил.
Создавая приказ у него будут несколько студентов,у одного студента будут несколько модулей.
Переключая приказы,отображается свой список студентов,у которого свои оценки в модуле.
drozdov9191 вне форума Ответить с цитированием
Старый 21.04.2019, 11:05   #5
drozdov9191
Пользователь
 
Регистрация: 13.12.2018
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну, в таблице Prikaz действительно нет поля "Код"
попробуйт заменить на
Код:
AND l.[Код]=m.[Студент]
Это формально. Так должно заработать.
а вообще, очень странная структура, мне лично структура и связи между таблицами непонятно.
Зачем нужна таблица Приказ, например?
да и с таблицей Модуль тоже не всё понятно и очевидно
Вот как делаю:
1. Приказ(ADOQuery3, в SQL пишу - Select * from Prikaz),его подключаю к DBgrid3.
2. Список студентов(ADOQuery1, в SQL пишу - Select * from LichData).,его подключаю к DBgrid1.
3. Модуль(ADOQuery2, в SQL пишу код -
Код:
SELECT * 
FROM prikaz p, lichdata l, modul m
WHERE p.[Номер приказа]=l.[Номер]
    AND l.[Код]=m.[Студент]
,его подключаю к DBgrid2.
В итоге ничего не выходит....может я что-то не то делаю?
Изображения
Тип файла: jpg Безымянный.jpg (31.4 Кб, 135 просмотров)
drozdov9191 вне форума Ответить с цитированием
Старый 21.04.2019, 18:30   #6
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Попробуйте задавать значения не по имени колонок которые в кириллице в таблице, а по именам Fields, я проверил работает.

Примерно так у вас должны быть правда названия другие
SELECT * FROM prikaz p, lichdata l, modul m WHERE p.[NumPrikaz]=l.[ID] AND l.[Code]=m.[Student]

Последний раз редактировалось Aliens_wolfs; 21.04.2019 в 22:39.
Aliens_wolfs вне форума Ответить с цитированием
Старый 22.04.2019, 10:29   #7
drozdov9191
Пользователь
 
Регистрация: 13.12.2018
Сообщений: 19
По умолчанию

Этот код я вписываю в AdoQuery2(SQL модуля)?Или куда?

Последний раз редактировалось drozdov9191; 22.04.2019 в 10:34.
drozdov9191 вне форума Ответить с цитированием
Старый 22.04.2019, 10:50   #8
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

В тот что в DGrid выводит данные
Aliens_wolfs вне форума Ответить с цитированием
Старый 22.04.2019, 11:06   #9
drozdov9191
Пользователь
 
Регистрация: 13.12.2018
Сообщений: 19
По умолчанию

Обьясните пожалуйста.Вот у меня на скриншоте:
1.ADOQuery1- отвечает за prikaz - в sql прописал: Select * from Prikaz это DBGrid3
2.ADOQuery2- отвечает за lichdata - в sql прописал: Select * from LichData это DBGrid1
3.ADOQuery3- отвечает за modul - в sql прописал: Select * from Modul это DBGrid2

Код
Код:
SELECT * FROM prikaz p, lichdata l, modul m WHERE p.[id]=l.[idprikaza] AND l.[idstudenta]=m.[idst]
я прописываю в SQL всех Adoquery или только в какой-то определенный?Просто если я прописываю данный код во все Adoquery ничего не происходит.

Могу скинуть программу,что бы вы посмотрели.Просто я правда уже просто запутался....
Изображения
Тип файла: jpg Безымянный.jpg (107.0 Кб, 115 просмотров)

Последний раз редактировалось drozdov9191; 22.04.2019 в 11:31.
drozdov9191 вне форума Ответить с цитированием
Старый 22.04.2019, 11:39   #10
drozdov9191
Пользователь
 
Регистрация: 13.12.2018
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Попробуйте задавать значения не по имени колонок которые в кириллице в таблице, а по именам Fields, я проверил работает.

Примерно так у вас должны быть правда названия другие
SELECT * FROM prikaz p, lichdata l, modul m WHERE p.[NumPrikaz]=l.[ID] AND l.[Code]=m.[Student]
В БД Access у меня все правильно работает и если я делаю программу через ADOTable то всё работает правильно,как и надо.Но когда делаю все через ADOQuery,ничего просто не выходит....
Если у вас получилось,можете скинуть программу пожалуйста?Дабы я посмотреть,пожалуйста.
drozdov9191 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
связь между таблицами nefa Microsoft Office Access 0 21.03.2016 18: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