СтатьиПрограммирование в Delphi

Работа с базой данных Access в Delphi

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

Обычно, для работы с текстовым файлом в Delphi достаточно использовать простые команды связи внешнего файла с файловой переменной и команды чтения и записи. Для работы со специализированными файлами приходится использовать дополнительные библиотеки или компоненты. Для решения данной задачи, воспользуемся технологией ADO, а так же соответствующими компонентами, позволяющими отобразить данные на пользовательской форме.


Чтобы организовать работу программы с БД, потребуется следующие компоненты:

- ADOConnection – используется для подключения к БД (закладка палитры ADO, в некоторых версиях dbGO);

- ADOTable – связывается с конкретной таблицей БД (закладка ADO);

- DataSource – компонент, используется как связка данных из таблиц, с отображающими и управляющими компонентами Delphi (закладка Data Access);

- DBGrid – таблица, позволяющая вывести содержимое таблицы БД на пользовательскую форму (закладка Data Controls);

- DBNavigator – кнопочная панель, способная управлять данными в привязанной к ней таблице (закладка Data Controls).


После того, как все компоненты установлены на форму, можно приступить к их настройке. Для решения нашей задачи никакого программного кода не потребуется. Только настройка свойств компонентов:

Свойство ConnectionString компонента ADOConnection

Свойство ConnectionString удобно настраивается в специальных окнах. Открываем редактор свойства ConnectionString в инспекторе объектов кнопкой «…». В появившемся окне оставляем все настройки как они были по умолчанию и нажимаем кнопку «Build…».

Получаем еще одно окно с несколькими закладками.

В первой закладке «Поставщик данных» выбираем в списке «Microsoft.Jet.OLEDB.4.0» и жмем «Далее >>».

Во второй закладке «Соединение» в поле «1. Выберете или введите имя базы данных:» жмем «…» и привычным окном выбираем нужный файл БД. Здесь стоит отметить, что при выборе адреса, будет указан полный путь, начиная от корневой директории. При таком указании директории, становится неудобно использование программы на другом компьютере, так как приходится создавать все директории, что и на компьютере, где была создана программа. Чтобы не сталкиваться с такой проблемой, удобней указать относительный путь. Если в этом поле указать только имя файла БД, то программа будет открывать ее из той же директории, где она находится, в какую бы директории ее не разместили. Естественно файл БД должен находиться в той же папке, куда вы сохраняете свой проект Delphi.

Нажимаем кнопку «ОК».

Снова видим предыдущее окно, но уже с заполненной строкой. Снова нажимаем «ОК». Все, настройка свойства ConnectionString завершена.

Свойство LoginPrompt компонента ADOConnection

Это свойство логического типа определяет, будет ли при подключении к БД запрашиваться пароль. Пока никакие пароли не нужны, поэтому, чтобы оно не мешало при работе с программой ставим ему значение False.

Свойство Connected компонента ADOConnection

Свойство определяет, выполнено ли подключение в данный момент. Чтобы не подключаться к БД программно после запуска приложения, указываем True. Если после присвоению свойству значения True, Delphi не вывел никаких сообщений об ошибках, значит, все выполнено правильно. В случае ошибок, стоит проверить, правильно ли указано имя файла БД или «Поставщик данных».

Свойство Connection компонента ADOTable

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

Свойство TableName компонента ADOTable

Выбираем из списка необходимую таблицу из БД.

Свойство Active компонента ADOTable

Свойство, определяющее режим работы компонента. Указываем значение True. Если сообщений об ошибках нет, все нормально. Если есть, проверьте предыдущие два свойства.

Свойство DataSet компонента DataSource

Из списка выбираем нужную таблицу, если их несколько. Обычно для удобства каждой таблице в БД соответствует своя пара ADOTable + DataSource.


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

Свойство DataSource компонентов DBGrid и DBNavigator

Свойство настраивается выбором из списка нужного компонента DataSource.


После всех этих операций получаем программу, которая будет подключаться к вашему файлу БД, выводить данные в простейшей табличной форме. Кнопочная панель позволит перемещаться по записям вперед, назад, перейти к последней или первой, добавлять новые записи, редактировать имеющиеся, а так же удалять не нужные записи.

Подключение Delphi с БД Access
Рисунок: Подключение Delphi с БД Access


Комментарии

23.05.2015 21:04 Иван [гость]
Сделал программу так как здесь описано. Все получилось, но столбцы "абонент" и "адрес" в программе почему-то очень длинные и их не видно целиком. В редакторе мышкой их ширина настраивается, но когда запускаешь программу, они опять длинные. Подскажите пожалуйста, как правильно настроить их размер?
24.05.2015 11:25 Антон Сенников [администратор]
Иван, так получается потому, что эти поля в БД идут с текстовым типом данных. По умолчанию им назначается такая ширина.
Чтобы настроить свою ширину, нужно указать ее непосредственно для столбцов DBGrid. Для этого, нужно два раза кликнуть на компоненте DBGrid – это откроет окно редактора столбцов. В этой форме нужно добавить все столбцы кнопкой "Add all fields". Теперь выбрав нужный столбец, в инспекторе объектов можно задать нужную ширину свойством Width.
24.05.2015 16:14 Иван [гость]
Все получилось. Спасибо.
10.03.2016 12:38 Алина [гость]
Спасибо большое, все очень понятно
19.05.2016 19:05 Линар [гость]
Свойство " Name" компонента ADOTable

Выбираем из списка необходимую таблицу из БД.


поправьте "TABLENAME"
19.05.2016 22:02 Антон Сенников [администратор]
Линар, спасибо за замечание. Исправил эту ошибку.
24.06.2016 09:26 Вадим [гость]
Здравствуйте. Прочитал Ваше указание по поводу того, как задать ширину полей "абонент" и "адрес". Но как задать ширину поля "номер". Для данного поля описанная технология не работает и вообще кнопка "Add all fields" заблокирована!
24.06.2016 11:25 Антон Сенников [администратор]
Вадим, добрый день.
Размер поля "Номер" настраивается аналогично другим - там единый механизм.
А "Add all fields" неактивной может быть, вероятнее всего, из за отсутствия подключения к какому-либо DataSource или не подключен сам набор данных в таблице. Когда все подключено, в сетке должны появится заголовки столбцов вашей таблицы, тогда и будет доступна настройка самих полей. Можно, конечно, в ручную их настроить (добавить поле в сетку и указать название поля таблицы), но мне кажется, так как описано в статье, проще.
24.06.2016 15:29 Вадим [гость]
Спасибо за Ваш ответ. Попробую сделать.
10.10.2016 14:45 Антон [гость]
Здравствуйте. Может подскажите, а как сделать возможным сортировку столбца по алфавиту, на данном примере допустим второй столбец.
10.10.2016 23:59 Антон Сенников [администратор]
Здравствуйте, Антон.
Сортировка таблицы прописывается кодом:

ADOTable.Sort := 'абонент ASC';

Здесь, строкой задается название поля (столбца по которому будет выполнена сортировка) и направление сортировки - ASC (по возрастанию) или DESC (по убыванию).
07.11.2016 12:15 [гость]
Здравствуйте я создала базу данных но после 200 какого то числа перестала добавляться новая строка где можно изменить размер базы данных?
07.11.2016 13:05 Антон Сенников [администратор]
Добрый день.
Ограничения для таблицы MS Access не должно быть таким малым. Здесь вероятно ограничение не по количеству записей. Насколько много у вас полей в таблице? Стоит оценить вес (Мб) одной записи.
07.11.2016 22:20 [гость]
Здравствуйте. Подскажите, пожалуйста, как указать относительный путь к базе данных, если она лежит в папке проекта на рабочем столе?
08.11.2016 13:35 Михаил [гость]
Добрый день. А есть ли где на этом ресурсе урок, в котором рассказывается как можно заполнять таблицы не в ручную, а выбирая записи из списка по связанной таблице?
08.11.2016 20:23 Антон Сенников [администратор]
Добрый день.
По поводу относительных путей. В поле ConnectionString, где вы задаете путь к файлу БД можно указать относительный путь:
"db.mdb" - так будет открываться файл из директории приложения;
"../db.mdb" - в директории на уровень выше того, где находится программа;
"папка/db.mdb" - во вложенной папке директории приложения;
Можно сделать сложнее, например в соседней папке:
"../другая_папка/db.mdb".
08.11.2016 20:31 Антон Сенников [администратор]
Здравствуйте Михаил.
Статьи на такую темы пока нет (хорошая тема - напишу как-нибудь).

По поводу того, как это реализовать. Сделать это не в ручную можно двумя путями: sql-запросом на добавление, либо программным кодом, обращаясь к компоненту ADOTable. Применительно к таблице, самое простое решение:

// добавление новой записи в таблицу.
ADOTable1.Insert;

// заполнение полей
ADOTable1.Fields[0].AsString := "8 999 999 99 99";
ADOTable1.Fields[1].AsString := "Саша Пушкин";
ADOTable1.Fields[2].AsString := "ул. Главная, 10";

// Сохранение данных в таблице
ADOTable1.Post;

Здесь:
ADOTable1.Fields[номер_поля,_начиная_с_нулевого].Тип_поля:= Значение;
08.11.2016 20:50 Михаил [гость]
Спасибо!
08.02.2017 15:30 Бабамурад [гость]
Здравствуйте! Как связать ADOQuery?
10.02.2017 20:42 Антон Сенников [администратор]
Здравствуйте, Бабамурад. Работа с запросами через ADOQuery рассмотрена в статье Запросы на выборку из БД в Delphi с использованием компонента ADOQuery.
06.06.2017 22:02 [гость]
Спасибо, очень доступно и понятно, даже 70-летней бабушке) а мне 65 лет)))
Людмила
Имя:
Текст комментария:
* В комментариях запрещено публиковать рекламные объявления. Сообщения, содержащие ссылки на сторонние ресурсы добавляется в скрытом режиме. Они будут открыты, если не нарушают установленных правил, после проверки.
Защита от спам-роботов (* Обязателельно укажите ответ на простой вопрос ниже.)
Сумма чисел двa плюc тpи? (цифра)