Доброго времени суток дорогие друзья! В данной статье я хотел бы вот чем поделиться. Как-то возникла необходимость в написании базы данных с использованием 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;
Ну в общем как-то так, всем успехов, надеюсь что для кого нибудь эта статья окажется полезной.
Дело в том, что при стандартном подходе к заполнению данного свойства, в поле - источник данных прописывается конкретный путь к базе. Если данный путь заранее известен и будет уверенность в том, что ее местонахождение не будет изменяться то это хорошо, но как быть в случае, когда она в последствии все-таки будет куда-то перемещаться с основной программой? Ну например, если используя стандартный подход, Вы захотели запустить свой проект с флешки скопировав туда все файлы включая и файл базы данных, или с рабочего стола, то при подключении возникнет ошибка, т.к. сама программа может находиться где угодно, а база данных только по адресу, который вы указали первоначально в поле - источник данных свойства 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;
Ну в общем как-то так, всем успехов, надеюсь что для кого нибудь эта статья окажется полезной.
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.