• 13287
  • 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
10585

Loading...

Комментарии

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

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

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

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

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

Алматинская детская железная дорога: как настоящий поезд заменили на подделку

Алматинская детская железная дорога: как настоящий поезд заменили на подделку

С приходом новых хозяев не только разграбили железную дорогу, но и даже поменяли названия. Поменяли название парка на «Центральный парк культуры и отдыха Алматы». Началась новая история, для других алматинцев...
zaleskiy
16 марта 2017 / 16:25
  • 5745
  • 10
Не пропущу! Отношение водителей к жизни человека: как уступают дорогу «скорой» в Европе и у нас

Не пропущу! Отношение водителей к жизни человека: как уступают дорогу «скорой» в Европе и у нас

На днях в YouTube появился ролик, запечатлевший совершенно обыденную для европейцев ситуацию. Но для нашего человека – совершенно нетипичную и оттого вызывающую у некоторых из нас слёзы восторга.
openqazaqstan
18 марта 2017 / 20:22
  • 5247
  • 7
Если нет гарантий достойной жизни, то зачем создавать больше несчастных людей?

Если нет гарантий достойной жизни, то зачем создавать больше несчастных людей?

Я постоянно слышу, что дети - это цветы жизни. Но по поведению некоторых родителей складывается впечатление, что дети - это сорняки: роди, а там как-нибудь вырастут.
Amiko
16 марта 2017 / 12:53
Весенний обзор банковских тендерных гарантий

Весенний обзор банковских тендерных гарантий

Как финансист, в тендерных гарантиях я люблю скорость и простоту оформления, поэтому решила сравнить условия некоторых банков по продукту «тендерная гарантия» на основании информации с сайтов банков.
DanaJarlygapova
16 марта 2017 / 16:00
  • 4374
  • 42
16 великолепных пасхалок и отсылок из фильма «Логан»

16 великолепных пасхалок и отсылок из фильма «Логан»

Какими бы не были кинокомиксы, в них всегда будут присутствовать пасхалки и отсылки. Поэтому, MovieUniverse собрал для вас все замеченные пасхалки из «Логана».
Aegon
16 марта 2017 / 14:41
  • 4246
  • 10
Почему в Казахстане пытаются запретить фильм «Красавица и Чудовище»

Почему в Казахстане пытаются запретить фильм «Красавица и Чудовище»

Только я дождался премьеры, как вдруг её отменяют. Откровенно говоря, у меня нереально бомбит от всего этого. Я, как и многие, очень люблю Дисней и его картины, и не против того, что они стали...
MrVladimirLV
17 марта 2017 / 16:03
  • 3916
  • 62
H&M-ское безумие или Что народу по карману?

H&M-ское безумие или Что народу по карману?

На счет качества: я спросил у знакомых и мне сказали, что та или иная вещь носится сезон. В хорошем случае и бережном отношении немногим больше. Кофточки моя слабость наверное...
RustemZhali
18 марта 2017 / 18:32
  • 3648
  • 28
Престарелый старец-киборг Рокфеллер предлагал уничтожить 90% населения Земли

Престарелый старец-киборг Рокфеллер предлагал уничтожить 90% населения Земли

Первую пересадку сердца Рокфеллер пережил в 1976 году на 62-м году жизни. Последнюю пересадку ему сделали в августе 2016 года. Пересадка сердца такому старому пациенту не имеет аналогов...
Timur_Tregulov
21 марта 2017 / 23:10
  • 3351
  • 43
Если ты дура, это не значит, что все вокруг дураки. Будь честной, ищи нормального мужика

Если ты дура, это не значит, что все вокруг дураки. Будь честной, ищи нормального мужика

Когда мужчина встречает женщину, с которой хочет прожить всю жизнь - он на ней женится как можно быстрее и старается завести детей. А не живет с ней восемь лет порожняком по съемным квартирам.
bushneva177
16 марта 2017 / 16:21