• 13876
  • 16
  • 3
Нравится блог?
Подписывайтесь!

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

Getting Started.

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

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

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

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

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

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

  • ConnectionString - строка с параметрами соединения. Двойной щелчек откроет диалоговое окно настройки соединения. Но об этом позже.
  • Login Promt - спрашивать ли логин и пароль при каждом соединении.
  • Connection Timeout - сколько времени ждать ответа от базы данных. Пригодится, если ваше приложение взаимодействует с базой данных на удалённом сервере.
  • Connected - если True, то компонент подключен к базе данных. Изменение параметров присвоит ему значение False, поэтому если нужно донастроить компонент - не забудьте выставить True в этом свойстве

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

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

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

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

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

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

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

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

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

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

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

Важные свойства компонента TADODataSet:

  • CommandText - SQL запрос на выборку, результат которого мы будем отображать
  • Connection - указатель на соединение с базой данных, TADOConnection
  • Active - если True, то активен. После изменения свойств не забывайте ставить это свойство в True

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

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

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

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

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

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

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

Важные свойства компонента TADODataSet:

  • DataSource - указатель на TDataSource
  • Columns - столбцы таблицы

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

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

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

Lookup поля

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

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

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

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

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

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

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

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

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

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

Скорее всего это как-то лечится. Но как - я еще не разобрался. Поэтому мы применим магию Lookup полей для возможности корректного редактирования. Это и есть второй вариант отображения значений вместо индексов. Делается lookup поле в несколько шагов:

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

    Рисунок 12: Нажмём на крестик рядом с DataSet

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

  • Шаг 3:

    Рисунок 13: Добавление нового поля

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

    Важное замечание! Все операции с Fields внутри DataSet'ов не влияют на структуру самой базы данных.

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

Результаты:

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

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

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

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

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

KlyuchnikOFF
21 декабря 2010, 1:14
10901

Загрузка...
Loading...

Комментарии

на adoquery не пробовал?
Нет, не пробовал. Гляну вечером.
Посмотрел. ADOQuery = ADOConnection + ADODataset в одном флаконе. И билдера SQL запросов там нет, а он удобен хотя бы тем, что таблицы с полями перед глазами.
не знаю, мне с ним работать легче
управляемость лучше, как механическая КПП
Возможно это обусловлено тем, что у нас с вами разные вкусы. Возможно тем, что я не писал серьезных приложений на Delphi и Access. :)
хыы, молодость вспомнил!

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

До каких пор чиновники будут игнорировать защиту детей?

До каких пор чиновники будут игнорировать защиту детей?

До каких пор Уполномоченный по правам ребенка, как институт во всем мире стоящий на страже жизни и прав детей, в нашей стране будет выполнять представительские функции?
AliyaSadyrbaeva
вчера / 18:27
  • 8808
  • 6
Зачем эмигрировать в Россию? Лично я никогда не понимал этой странной мечты

Зачем эмигрировать в Россию? Лично я никогда не понимал этой странной мечты

Некоторые мои знакомые, мечтают уехать в Россию и побыстрее получить гражданство. Кому мы там сдались? Есть замечательная поговорка: "Где родился - там и пригодился".
Washington
вчера / 12:15
Что происходит в казахстанской правоохранительной системе под видом борьбы с коррупцией

Что происходит в казахстанской правоохранительной системе под видом борьбы с коррупцией

За день до своей гибели прямо около памятника жертвам политических репрессий 1937-го Жампозов сказал жене, что он – жертва точно таких же репрессий.
openqazaqstan
24 июля 2017 / 10:18
  • 3218
  • 12
Мужчины Люксембурга и Казахстана: «У нас они уже в 35 добиваются статуса»

Мужчины Люксембурга и Казахстана: «У нас они уже в 35 добиваются статуса»

Что касается парней, так это вообще отдельная тема. Они для меня загадка. Уже год пытаюсь понять ход их мыслей. Для нас, казахов, немного сложно понять, почему человек в 35-36 лет, до сих пор не нашел смысла жизни.
AASh
24 июля 2017 / 15:19
  • 2130
  • 19
Если вам отвечают на казахском языке – ситуация с точки зрения законодательства

Если вам отвечают на казахском языке – ситуация с точки зрения законодательства

Я своим постом не собираюсь критиковать кого-либо, что люди знают или не знают казахский или русский язык. Я выражаю своё мнение с точки зрения законодательства о языках.
Advokot
вчера / 13:50
  • 2352
  • 28
Наша новая рубрика «Топ-5»: самые красивые актрисы Казахстана

Наша новая рубрика «Топ-5»: самые красивые актрисы Казахстана

Решили сделать топ-5 красивых актрис Казахстана. Очень долго спорили о первых трех местах и даже чуть не подрались. Было очень тяжело выбирать.
asdbqwe
20 июля 2017 / 14:24
  • 2034
  • 41
Легендарный вокалист «Linkin Park» унёс за собой молодость десятков тысяч людей

Легендарный вокалист «Linkin Park» унёс за собой молодость десятков тысяч людей

Самое грустное, что, как и всегда в таких случаях, скоро на Честера начнут изливаться потоки грязи - что он был наркоманом, или что-то подобное (как в случае со многими знаменитостями).
demonica
21 июля 2017 / 15:13
  • 1955
  • 51
Алматы глазами астанчанки: «У вас жара за 30! Вы не то, что южные – вы Африка!»

Алматы глазами астанчанки: «У вас жара за 30! Вы не то, что южные – вы Африка!»

Все дороги ведут в Алматы. Хотелось бы поспорить, учитывая, как я насмешливо провожала друзей или коллег, которые покидали родную Астанушечку и переезжали «на юг».
SogdiK
21 июля 2017 / 18:25
  • 1787
  • 34
Лечиться нельзя умереть. Страшно, когда запятая поставлена якобы «законом бога»

Лечиться нельзя умереть. Страшно, когда запятая поставлена якобы «законом бога»

Стало известно о смерти четырехлетней Виктории Сусаевой. Отец девочки намерен подать на бывшую супругу в суд, так как уверен, что в смерти дочери виноваты ее религиозные воззрения.
lyalusha
21 июля 2017 / 14:35
  • 1487
  • 16