---
title: "Взаимодействие MS ACCESS 2003 и Delphi 7"
description: "Getting Started. Это - курсовая работа по Delphi. В ней рассматривается использование базы данных, с..."
author: "KlyuchnikOFF"
published: "2010-12-20T13:14:18+00:00"
modified: "2010-12-20T13:20:24+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/vzaimodeystvie-ms-access-2003-i-delphi-7-98599"
markdown_url: "https://yvision.kz/post/vzaimodeystvie-ms-access-2003-i-delphi-7-98599/markdown"
site_name: "Yvision.kz"
---

# Взаимодействие MS ACCESS 2003 и Delphi 7

> Getting Started. Это - курсовая работа по Delphi. В ней рассматривается использование базы данных, с...

## Getting Started.

Это - курсовая работа по Delphi. В ней рассматривается использование базы данных, созданной в Access, в программах Delphi.

Создадим новый проект:

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/2gfDscx4RkRPql9H48IJVfpRzNMXX4.png)

###### Рисунок 1: Стартовая площадка

Базу данных мы будем использовать ту, что я приготовил для курсовой по базам данных. Итак, нас интересует вкладка, имеющая название ADO (от англ. ActiveX Data Objects — «объекты данных ActiveX»).

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/YSL6dVz5N73pj8tktYxO7vx3UtEous.png)

###### Рисунок 2: Вкладка ADO

Базовый компонент, осуществляющий соединение с базой данных - TADOConnection. Это невизуальный компонент, который мы видим только в режиме конструктора. Да и видеть нам его незачем - он выполняет только функцию соединения с базой данных. Имеет следующие важные свойства (не в алфавитном порядке, а в последовательности настройки):
- **ConnectionString** - строка с параметрами соединения. Двойной щелчек откроет диалоговое окно настройки соединения. Но об этом позже.

- **Login Promt** - спрашивать ли логин и пароль при каждом соединении.

- **Connection Timeout** - сколько времени ждать ответа от базы данных. Пригодится, если ваше приложение взаимодействует с базой данных на удалённом сервере.

- **Connected** - если True, то компонент подключен к базе данных. Изменение параметров присвоит ему значение False, поэтому если нужно донастроить компонент - не забудьте выставить True в этом свойстве

Итак, вернемся к ConnectionString. После двойного клика на поле значений откроется нам вот такое окно:

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/BH2N5ha40eF6OyTGVFUVMtMFg9N0xz.png)

###### Рисунок 3: ConnectionString - ручное введение

Если вы помните параметры наизусть, то можно вводить значение в ConnectionString вручную. Вот только печатать много и велика вероятность ошибки, да и зачем, если есть удобный мастер построения этой строки. Нажимаем кнопку Build:

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/NrvJYRBSB8ezRVYyw4uW2ZWUJ3RuFv.png)

###### Рисунок 4: ConnectionString - мастер построения, шаг 1

Базы данных Microsoft Access 2003 работают под управлением поставщика Microsoft Jet 4.0 OLE DB Provider.

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/2qUU7q7F9Ztj9y9rMVKNCxtJ4Q588l.png)

###### Рисунок 5: ConnectionString - мастер построения, шаг 2

Выбираем местонахождение базы данных. В поля "Пользователь" и "Пароль" вводим логин и пароль от вашей базы данных.Жмём дважды OK. Всё, соединение с базой данных настроено.

##### Важное замечание! Если вы собираетесь переносить ваш проект, то из-за того, что мастер записывает в свойства объектов абсолютный путь к базе данных, проект придется перекомпилировать на каждом новом компьютере с указанием нового пути. Чтобы избавиться от этого, нужно изменить абсолютный путь на относительный в Connection String. Будьте внимательны! Не затроньте других параметров!

Ну и теперь мы можем включить соединение. Для этого в свойство Connected запишем True.

К базе данных мы присоединились. Пора сделать то, ради чего мы к ней соединялись - использовать данные. Для этого существует компонент TADODataSet.

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/wqh4V1c0W4c9xW289PDyV45jkQ0ERM.png)

- Пиктограмма компонента TADODataSet. Находится на вкладке ADO рядом с TADOConnection.

Важные свойства компонента TADODataSet:
- **CommandText** - SQL запрос на выборку, результат которого мы будем отображать

- **Connection** - указатель на соединение с базой данных, TADOConnection

- **Active** - если True, то активен. После изменения свойств не забывайте ставить это свойство в True

Двойной щелчок в поле значения свойства CommandText откроет нам такое окно:

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/6Xk45ySMYHLQrNd8Bd7Wh4UlGfu0qu.png)

###### Рисунок 6: Составляем запрос

Двойной щелчок на имени таблицы добавит таблицу в запрос. Ну а двойной щелчок по имени поля добавит поле в запрос. Кстати, в списке таблиц так же отображаются запросы. Вот только модифицировать ничего нельзя. Запрос в этой строке полностью поддерживает синтаксис SQL. После модификации строки запроса не забудьте выставить Active = true, иначе не увидите результатов запроса.

Настало время посмотреть, что у нас получилось. Переходим на вкладку Data Access, выбираем компонент TDataSource

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/QJ55yeju99fH8W9VQUaeB9APF8jIgd.png)

. Единственное свойство этого компонента, которым мы будем пользоваться - DataSet. Выбираем наш предварительно настроенный DataSet из списка.

##### Важное замечание! У компонента DataSet так же существует свойство DataSource. Не поддаёмся на искушение и оставляем это поле пустым.

Переходим на вкладку Data Controls. На этой вкладке расположены объекты, с помощью которых мы сможем получить доступ к данным. Сейчас нас интересует компонент TDBGrid - обычная двухмерная таблица

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/32FfQ30fYClJo4K1PE1D3YqNAH58E6.png)

.

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/fu4ip03jTLLv23ofRUHFbz3x5DxZQE.png)

###### Рисунок 7: TDBGrid на форме

Важные свойства компонента TADODataSet:
- **DataSource** - указатель на TDataSource

- **Columns** - столбцы таблицы

Выбираем в свойстве DataSource предварительно настроенный компонент. И в таблице DBGrid мы видим результат нашего запроса.

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/bVoH68ExHew6vgA0xD4I4S0qM26YrI.png)

###### Рисунок 8: TDBGrid в действии

Приложение готово к работе.

### Lookup поля

Итак, мы вполне уверенно вытаскиваем данные из таблиц. Но при многочисленных связях - а в базе данных в третьей нормальной форме их будет достаточно много - таблица будет пестрить многочисленными числовыми индексами, малопонятными обычному пользователю. Обратим внимание на рисунок 8 и рисунок 9. На рисунке 8 в поле Тип_памяти мы видим числовые индексы, когда как в Access у нас удобно подставляются данные.

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/bPVvES6cPNHNs1keoJPRfjmgJ38Jrf.png)

###### Рисунок 9: Подстановка в Ms Access

Существует два варианта это сделать в Delphi. Первый вариант - использовать SQL запрос:

**select Интерфейс, Память, Название as Тип_памяти from Видеокарты, Тип_ОЗУ_Видеокарты WHERE Тип_памяти = Тип_ОЗУ_Видеокарты.id**

Не забыли куда писать этот запрос? Конечно в свойство CommandString компонента ADODataSet. Не забываем включить свойство Active после изменения запроса. Итак, нашим взглядам предстает такая картина:

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/2z67Esh1uzcAZTI57RODmgVVsHMQwv.png)

###### Рисунок 10: Результат выполнения запроса

Итак, теперь по порядку. Мы выбираем данные из двух таблиц. Но если просто указать **select Интерфейс, Память, Название as Тип_памяти from Видеокарты, Тип_ОЗУ_Видеокарты**, то для наших трёх записей мы получим девять записей - выберутся все возможные варианты пересечения между таблицами. А так выберутся только те записи, где тип_памяти видеокарты равен id в списке типов памяти видеокарт.

##### Важное замечание! Для таких операций лучше использовать **JOIN**

Запускаем проект. Всё отображается, работает. Но давайте попробуем изменить данные или же добавить.

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/haG7MXfG2SG0tQS3FGZL2NCW79TCs4.png)

###### Рисунок 11: Вот что бывает, когда пытаешься изменить данные

Скорее всего это как-то лечится. Но как - я еще не разобрался. Поэтому мы применим магию Lookup полей для возможности корректного редактирования. Это и есть второй вариант отображения значений вместо индексов. Делается lookup поле в несколько шагов:
- Шаг 1: Добавляем еще один DataSet, настраиваем его на наше соединение, а в commandText прописываем выборку всех записей таблицы со значениями. Запрос будет примерно таким: **select * from Тип_ОЗУ_Видеокарты**. Не забываем выставить свойство Active в True.

- Шаг 2:

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/jO8NpD988i9YsseqgS1Ry4Xabo7RLY.png)

###### Рисунок 12: Нажмём на крестик рядом с DataSet Нажмём на крестик рядом с DataSet - раскроется подобный список. Нас интересует Fields - нажмём правой кнопкой мыши и выберем "Add All Fields". Проделаем это с двумя нашими DataSet'ами.

- Шаг 3:

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/MGNvPG9l8x2ODfjUa5OtWYlo2O7TKG.png)

###### Рисунок 13: Добавление нового поля Правой кнопкой мыши на Fields -> New Field. Появится диалог создания нового отображаемого поля.

##### Важное замечание! Все операции с Fields внутри DataSet'ов не влияют на структуру самой базы данных. Вписываем название. Поле Component заполнится самостоятельно. Так же выбираем тип поля, в моём случае это String. Среди трёх RadioButton выбираем Lookup - это значит, что значение поля мы будем выбирать из другого места. Key Fields - поле, которое содержит значения. Dataset - выбираем результирующий DataSet. Lookup Keys - поле, с которым сравниваем, обычно поле со счетчиком. Result Field - поле, значение которого мы будем показывать.

Результаты:

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/zJ3bR81mSztgp6pFjQGW0V5vXex3h5.png)

###### Рисунок 14: Результат в режиме конструктора

![Взаимодействие MS ACCESS 2003 и Delphi 7](http://storage.yvision.kz/images/user/klyuchnikoff/q0T8096IWkpYTcHj5a1ifwFgyvcVEk.png)

###### Рисунок 15: Результат в скомпилированном приложении

А самое главное, что всё без проблем редактируется.

Итак, в этой небольшой статье я рассмотрел основные принципы взаимодействия базы данных, спроектированной в MS Access, с Delphi. Удачи в написании собственных приложений!

Ключников Александр, 2010.

---

Source: [https://yvision.kz/post/vzaimodeystvie-ms-access-2003-i-delphi-7-98599](https://yvision.kz/post/vzaimodeystvie-ms-access-2003-i-delphi-7-98599)