Работа с ADO в Delphi. Часть 9. Связанные таблицы

4 минуты на чтение

На этот раз хотел бы поговорить о связанных таблицах в БД MS Access. Статья, возможно не новая, но кто часто работает с БД, тому, возможно, будет полезная. В ней расскажу, как я связываю таблицы между собой. По крайней мере, я пользуюсь двумя способами, об одном я расскажу в теоретическом плане, с практикой проблем тут не должно возникнуть, а второй способ, немного рассмотрим и практики.

Для начала, нам необходимо создать базу данных и как минимум две таблицы, которые мы и будем связывать между собой.

В моей БД две таблицы с именами — Таблица1 и Таблица2. Я создам таблицу с фамилиями, а вторая таблица будет с названиями автомобилей. То есть, у каждого владельца, может быть несколько автомобилей (всем бы так). Вот так мы и свяжем наши таблицы. Отношение связи, тут получается, один ко многим. Насколько я помню, бывают следующие типы отношений:

  • один ко многим
  • многие ко многим
  • один к одному

Это так, что сейчас вспомнилось. Ну а теперь, посмотрим на структуры наших таблиц.

Таблица1. Структура.


Таблица2. Структура.


Теперь, нам необходимо связать эти две таблицы в MS Access. Поле id Таблицы2 предназначено для хранения идентификаторов записей из Таблицы1. По ним будет распознаваться, какая запись из Таблицы2 принадлежит записи из Таблицы1.

Для того, чтобы связать наши таблицы, необходимо перейти в Схему данных, добавить наши таблицы и связать следующие поля ,отношением — один ко многим:


Если в БД MS Access добавлять теперь записи, то для каждой фамилии можно добавлять сколько угодно автомобилей, а если выбрать определенную запись, то покажется список автомобилей для данного человека.

В нашем проекте будет что-то похожее, давайте же приступим к нему. На форме у меня следующие компоненты:

  • TADOConnection
  • TADOTable — 2 шт
  • TDBGrid — 2 шт
  • TDataSource — 2 шт
  • TEdit
  • TButton

По поводу подключения к БД, смотрим статью. Ну, а дальше самое интересное. Нам необходимо связать наши компоненты. Выделяем компоненты TADOTable и в каждом, в свойстве Connection, указываем компонент TADOConnection. Дальше выделяем DBGrid1 и связываем его с DataSource1, в свойстве DataSource. Компонент DataSource1, в свойстве DataSet, указываем AdoTable1. Все готово, одна таблица связана, это будет наша главная таблица, а точнее с имена и фамилиями автовладельцев.

Дальше нашу главную таблицу необходимо активировать. Выделяем AdoTable1, в свойстве TableName выбираем Таблица1 и свойство Active устанавливаем в True.

Обязательно, свойство Connected компонента TADOConnection, должно быть установлено в True

Все, теперь главная таблица полностью готова. Теперь приступим к подчиненной.

Выделяем компонент DBGrid2 и в свойстве DataSource связываем его с компонентом DataSource2, а компонент DataSource2, в свойстве DataSet, связываем с компонентом AdoTable2.

Все, теперь выделяем компонент AdoTable2 и в свойстве TableName выбираем Таблица2, в свойстве MasterSource выбираем DataSource1 (в данном случае необходимо выбрать тут TDataSource главной таблицы, то есть главную таблицу).

Дальше, в свойстве MasterFields, компонента AdoTable2 (подчиненной таблицы), мы указываем связующие поля, следующим образом:


Все, когда у нас все настроено, также активируем данную таблицу, свойство Active устанавливаем в True.

Все, если у Вас есть какие-то данные в Ваших таблицах, то можете запустить проект и выделить запись из главной таблицы, и Вы увидите, что автоматически в DBGrid2 для данной записи из главной таблицы выводятся записи из подчиненной таблицы. Это очень удобно. Добавлять записи необходимо также, выделяем запись из главной таблицы и только после этого, необходимо добавлять запись в подчиненную таблицу.

procedure TForm1.Button1Click(Sender: TObject);
begin
   ADOTable2.Insert;
   ADOTable2.FieldByName('auto').AsString:=Edit1.Text;
   ADOTable2.Post;
end;

Что касается еще одно метода, связывания таблиц, то тут также все просто. Необходимо все самому отслеживать: для какой записи из основной таблицы добавляется запись подчиненной таблицы, что добавляется и самому записывать идентификатор основной таблицы в подчиненную, а затем уже, по выделенной записи (получать ее идентификатор), делать выборку записей из подчиненной таблицы.

Исходник, можно скачать тут

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Всем здравствуйте, в этой статье я хотел бы снова обратить внимание на Базы данных, а в частности работа с Базами данных по технологии ADO. Когда пользователь создает приложение на Delphi, работающего с СУБД, к которой присоединяется по технологии ADO, то к фа...
ListView в Delphi - это компонент пользовательского интерфейса, который представляет собой список элементов, расположенных в виде таблицы. Каждый элемент списка представляет собой строку таблицы, а столбцы таблицы содержат данные для каждого элемента. ListView...
Приветствую читателей блога. Сегодняшняя статья будет посвящена работе с DBF-файлами, без использования ADO, BDE и компонентов доступа к данным. Я уже рассказывал про работу с DBF-файлами, это описано в этой статье. Многим не нравится работа с ADO, BDE, так ка...