как связать таблицы БД в Lazarus?

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

как связать таблицы БД в Lazarus?

Сообщение AlekTv » 18.04.2010 20:10:09

у меня есть две таблицы в БД на PostgreSQL
Таблица 1:
uchenik (Ученики)
Поля:
Название поля (Тип поля)
ID_uchenik (serial)
FIO_uchenik (varchar)
Adres_uchenik (varchar)
и т.д.

Таблица 2:
rod (Родители учеников)
Поля:
Название поля (Тип поля)
uchenik_ID (integer)
FIO_rod (varchar)
Adres_rod (varchar)
и т.д.

Создаю всё в EMS SQL Manager for PostgreSQL.
Поле ID_uchenik в uchenik ставлю как первичный ключ.
Далее создаю с помощью конструктора связь один ко многим. в таблице rod во вкладке"Внешние ключи" создался rod_fk на поле uchenik_ID

Теперь собственно о Lazarus. Установил я туда Zeos.Кидаю на форму ZConnection1, два ZTable для каждой из таблиц, ну и т.д. ставлю на форму два DBGrid , в первом у меня выводятся все ученики, а во втором мне надо чтоб отображались для конкретного ученика только его родители(то есть для кокретного выделенного в DBGrid1 ученика на DBGrid2 отображались только его родители).
Как мне это правильно сделать? расскажите, пожалуйста.
Аватара пользователя
AlekTv
новенький
 
Сообщения: 16
Зарегистрирован: 15.04.2010 17:08:35
Откуда: Тверь и Кабардино-Балкария. когда как...

Re: как связать таблицы БД в Lazarus?

Сообщение FeodoR » 18.04.2010 20:48:17

С точностью до свойств и процедур в Лазаре не скажу, ибо с ZeOS не работал, но логика такая:
Для того ZTable, который выводит сведения по ученику, установить фильтр на вывод вида (опять же примерно)
Код: Выделить всё
WHERE Uchenik.ID=ZTable1.FieldByName('ID_uchenik').AsString

А для DBGrid c учениками написать процедурку для свойства OnChange, чтобы она обновляла вывод для DBGrid с родителями. И всё должно заработать. ИМХО.
Аватара пользователя
FeodoR
новенький
 
Сообщения: 59
Зарегистрирован: 16.04.2010 12:11:34
Откуда: MSK, ЮАО

Re: как связать таблицы БД в Lazarus?

Сообщение Mr.Smart » 18.04.2010 20:54:20

FeodoR
Человек просит с использованием TTable, а не с применением SQL запросов в TQuery.
AlekTv
Смысл заморачиваться со всякими TTable, если вы используете полноценный SQL сервер?
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: как связать таблицы БД в Lazarus?

Сообщение FeodoR » 18.04.2010 20:56:51

Дык в TTable разве нет фильтра?

Всё равно же надо фильтрануть по ИД ученика таблицу с родителями. Ну будет фильтр без Where... :)
Аватара пользователя
FeodoR
новенький
 
Сообщения: 59
Зарегистрирован: 16.04.2010 12:11:34
Откуда: MSK, ЮАО

Re: как связать таблицы БД в Lazarus?

Сообщение AlekTv » 18.04.2010 21:04:28

да мне то впринципе всё равно, буду ZQuery использовать вместо ZTable, правда вот SQL совсем не знаю, думал как с Access в Delphi прокатит, где компоненты настраиваешь должным образом и радуешься(ничего прописывать не надо)
Аватара пользователя
AlekTv
новенький
 
Сообщения: 16
Зарегистрирован: 15.04.2010 17:08:35
Откуда: Тверь и Кабардино-Балкария. когда как...

Re: как связать таблицы БД в Lazarus?

Сообщение FeodoR » 18.04.2010 21:11:18

Прописать всё равно надо. Потому как Primary key->Foreign key отношения относятся только к моменту ввода данных, но никак ни к отображению. В tTable должно быть свойство Filter. Согласно этому фильтру будут выбираться записи из таблицы. Отличия tTable и tQuery будут (с точки зрения фильтра) только в синтаксисе.

Добавлено спустя 29 минут 44 секунды:
Дело в том, что Access избавляет от таких операций. А на самом деле получается, что два DBGrid'a, точнее два tTable, так как DBGrid это отображение, знать друг про друга не знают. И для того, чтобы их друг с другом связать и надо задать условие связки. В данном случае через фильтр.

Выражаясь по-колхозному это выглядит так:
Выбрав поле в первой таблице, она (первая) пинает вторую со словами "Отобрази-ка мне свои поля по моему выбранному в соответствии с ключом у меня. Ключ вот.". Вторая таблица говорит "Ахха" и в её результатах появляется то, что отображает DBGrid. Примерно так.
Аватара пользователя
FeodoR
новенький
 
Сообщения: 59
Зарегистрирован: 16.04.2010 12:11:34
Откуда: MSK, ЮАО

Re: как связать таблицы БД в Lazarus?

Сообщение v-t-l » 19.04.2010 10:47:16

У подчиненной ZTable2 выставить свойства MasterSource=DataSource1 (который к ZTable1 привязан), MasterFields=ID_uchenik, LinkedFields=uchenik_ID.

Добавлено спустя 3 минуты 37 секунд:
ZTable2 - это у которой TableName='rod'
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: как связать таблицы БД в Lazarus?

Сообщение AlekTv » 21.04.2010 20:30:02

сделал так как написал v-t-l и всё отобразилось.
странно раньше тоже так пытался сделать, но не получалось, видимо я тогда DataSource2 не активировал или ещё где нибудь ошибку допускал
Аватара пользователя
AlekTv
новенький
 
Сообщения: 16
Зарегистрирован: 15.04.2010 17:08:35
Откуда: Тверь и Кабардино-Балкария. когда как...


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru