вторник, 26 февраля 2019 г.

ADO Access DELPHI. Особенности подключения к базе данных

    Доброго времени суток дорогие друзья! В данной статье я хотел бы вот чем поделиться. Как-то возникла необходимость в написании базы данных с использованием ADO ACCESS в DELPHI, которую я успешно реализовал. Впрочем не все получалось гладко, я столкнулся с проблемой настройки пути к своей базе данных, а конкретно настройки свойства ConnectionString компонента ADOConnection.
    Дело в том, что при стандартном подходе к заполнению данного свойства, в поле - источник данных прописывается конкретный путь к базе. Если данный путь заранее известен и будет уверенность в том, что ее местонахождение не будет изменяться то это хорошо, но как быть в случае, когда она в последствии все-таки будет куда-то перемещаться с основной программой?      Ну например, если используя стандартный подход, Вы захотели запустить свой проект с флешки скопировав туда все файлы включая и файл базы данных, или с рабочего стола, то при подключении возникнет ошибка, т.к. сама программа может находиться где угодно, а база данных только по адресу, который вы указали первоначально в поле - источник данных свойства ConnectionString.
    Для демонстрации своего решения, я предлагаю создать новый проект:

1) Поместим на форму компоненты ADOConnection1, ADOTable1, DataSourse1 и DBGrid1 (я в своем примере буду использовать DBGridEh1).


2) Запустим MS Access и создадим какую нибудь простенькую базу данных, не важно какую, например:



    Запомним что имя нашей таблицы - Таблица1. И сохраним ее в папку с исполняемым файлом нашего проекта, в моем случае это:  C:\Users\Пользователь\Documents\Embarcadero\Studio\Projects\Пример\Win32\Debug\Database2.accdb

3) Теперь перейдем к настройке компонентов. Свойство DataSet компонента DataSourse1, устанавливаем в ADOTable1. Свойство DataSourse компонента DBGrid1 устанавливаем в DataSourse1. В свойство TableName компонента ADOTable1 запишем имя нашей таблицы - Таблица1, свойство Connection этого же компонента установим в ADOConnection1, а его свойство Active - оставляем пустым. Переходим к настройке непосредственно самого компонента ADOConnection1, для этого его свойство LoginPrompt обязательно установим в False, а свойства СonnectionString и Connected - оставим пустыми.
 
    Свойства компонентов которые я выделил красным, мы будем задавать "на лету", то-есть программно, например в момент открытия формы. То-есть при запуске программы, с помощью функции ExtractFilePath, мы будем получать адрес расположения нашего экзешника и подставлять его в качестве пути в свойство СonnectionString  компонента  
ADOConnection1 и активируем его установив в True его свойство Connected.
После нам останется только активировать компонент ADOTable1,  программно установив его свойство Active в True.

4) Итак продолжим, кликаем дважды на форме и в ее событии FormCreate прописываем следующий код:

ADOConnection1.ConnectionString:='Provider=Microsoft.ACE.OLEDB.15.0;Data Source='+
 ExtractFilePath(Application.ExeName)+'Db1.accdb;Persist Security Info=False';

ADOConnection1.Connected:=True;

ADOTable1.Active:=True;
  
    Сохраняемся и запускаем проект. Если Вы все действия выполняли внимательно, то в гриде запущенного приложения отобразятся все данные созданной нами базы данных и более того если мы куда нибудь перенесем экзешник с базой, после чего запустим программу,  все будет работать и подключаться корректно.
 
    Отдельно хотелось бы обратить внимание на следующую часть кода:

Provider=Microsoft.ACE.OLEDB.15.0;

данная строчка указывает какой драйвер нужно использовать при подключении к нашей базе данных. По скольку в своем примере я использовал Access 2019, то я выбрал именно этот драйвер, если у Вас более старые версии MS Access, то можно указать драйверы:

Provider=Microsoft.ACE.OLEDB.12.0;

или

Provider=Microsoft.Jet.OLEDB.4.0;

Часть строчки:

Data Source='+ExtractFilePath(Application.ExeName)+'Db1.accdb;

думаю в пояснениях не нуждается, тут мы с помощью ExtractFilePath(Application.ExeName)
получаем адрес экзешника и добавляем к этому пути имя искомой базы. Ну а:

Persist Security Info=False; 

означает, что пароль для подключения к нашей базе мы не используем, иначе эта строчка выглядела бы иначе, например с паролем - 11111111:

Password=11111111;Persist Security Info=True;

    Ну в общем как-то так, всем успехов, надеюсь что для кого нибудь эта статья окажется полезной.

Комментариев нет:

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

Примечание. Отправлять комментарии могут только участники этого блога.