• 13274
  • 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
10526

Loading...

Комментарии

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

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

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

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

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

Архивные фотографии Алма-Аты из семейного альбома. Ностальгический пост

Архивные фотографии Алма-Аты из семейного альбома. Ностальгический пост

Насобирал разных фотографий про наш город, из семейного архива. Фотографии не от сканированные, а пересняты на телефон. Давно хотел выставить, но не решался) Сейчас уже мы все поменялись, уже...
Ispanec
22 февр. 2017 / 11:05
  • 12802
  • 26
«Ау, дорогой, проснись! 21 век на дворе давно!». Бездипломный-безработный-бесквартирный!

«Ау, дорогой, проснись! 21 век на дворе давно!». Бездипломный-безработный-бесквартирный!

Ну реально же, парни, откуда вы только беретесь такие простые, а? Я сейчас просто расскажу несколько историй из личного опыта, и судите сами – нормально это? Но для начала расскажу немного о себе...
socium_kzo
22 февр. 2017 / 11:38
  • 8035
  • 98
Трамвайные пути Алматы ни в коем случае нельзя убирать, это окончательно уничтожит трамвай

Трамвайные пути Алматы ни в коем случае нельзя убирать, это окончательно уничтожит трамвай

В Алматы было сделано несколько заявлений касательно ситуации с трамваем, опять же не в пользу его восстановления и возвращения на улицы города. В городе собираются демонтировать рельсы...
SKYFALL
24 февр. 2017 / 16:01
  • 6685
  • 5
Диана Шурыгина – жертва или змея? Девочка красивая, а весь мир судит её именно за это

Диана Шурыгина – жертва или змея? Девочка красивая, а весь мир судит её именно за это

Я совсем не смотрю передачу "Пусть говорят", слишком много ругани и негатива, но новость про какую-то девушку заполонила все мои социальные сети, я открыла youtube и посмотрела несколько передач...
Roza_pvl
22 февр. 2017 / 11:49
  • 5917
  • 34
В больнице пара бахил стоит 50 тенге, а оптом 4 тенге. Чувствуете разницу?

В больнице пара бахил стоит 50 тенге, а оптом 4 тенге. Чувствуете разницу?

Получается, цены на бахилы не повышались, а кто-то повысил их самовольно. Я думаю, что на этом пытаются заработать. Позже я нашла ещё одну удивительную штуку:) Упаковка бахил в количестве 50 пар...
killer_slova
сегодня / 9:15
  • 4976
  • 28
Как купить свое жилье при зарплате в 100 тысяч тенге

Как купить свое жилье при зарплате в 100 тысяч тенге

Итак, по просьбам трудящихся и по крикам души коллективного бессознательного решила я написать пост на эту тему. Вводные данные: 1) нет имущества, которое можно продать для покупки собственного...
DanaJarlygapova
20 февр. 2017 / 16:17
  • 4538
  • 47
50 бизнес-встреч с лучшими предпринимателями Астаны. «Наш бизнес начинался как хобби»

50 бизнес-встреч с лучшими предпринимателями Астаны. «Наш бизнес начинался как хобби»

Друзья, представляю вашему вниманию второго героя моей рубрики "50 бизнес-встреч с лучшими (по моей версии) предпринимателей Астаны за 100 дней" - Асхата Солтанова!
Kultursyn
20 февр. 2017 / 12:46
  • 4215
  • 20
Замуж в 27. Это как отправиться на войну, но без оружия

Замуж в 27. Это как отправиться на войну, но без оружия

Я очень долго думала писать данный пост или нет. Потому, что тема очень тонкая, возможно кого-то может задеть, а, возможно, наоборот кому-то откроет глаза. Тема замужества в каждом поколении была и...
Adilyan
21 февр. 2017 / 20:22
  • 3894
  • 20
Диана Шурыгина как один из PR-инструментов продвижения своего товара и бренда

Диана Шурыгина как один из PR-инструментов продвижения своего товара и бренда

Простому обывателю социальных сетей уже известно, что самой обсуждаемой персоной в последнее время является печально известная 16-ти летняя девушка из Ульяновска Диана Шурыгина.
tala03
21 февр. 2017 / 13:27
  • 3666
  • 15