Консультация № 173640
24.10.2009, 23:10
0.00 руб.
0 4 2
Добрый вечер Увжажаемые эксперты. Как можно реализовать программный выбор пути к базе данных в элементах ADOconection и ADOQuery. Чтобы в рограме было поле, адрес выбирался с помощью OpenDialog. И При нажатии на определенную кнопку адрес до базы данных в ADOconection и ADOQuery изменялся на адрес, который находится в поле. Пожалуйста, подскажите как это сделать.

Обсуждение

Неизвестный
24.10.2009, 23:43
общий
Dimon4ik:
Как можно реализовать программный выбор пути к базе данных

Ну а база данных то какая?
Кроме InterBase/Firebird и Access для которых в случае отсутствия алиаса надо указывать расположение файла, ну и для плоских таблиц типа Paradox и DBase где надо указывать каталог, во всех остальных случаях надо указывать сервер СУБД
Неизвестный
25.10.2009, 01:26
общий
Microsoft Access .mdb
Неизвестный
25.10.2009, 12:47
общий
это ответ
Здравствуйте, Dimon4ik.
Перед созданием соединения с базой данных необходимо определить его параметры. Для этого предназначено свойство ConnectionString (тип WideString) объектов ADOConnection, ADOTable, ADOQuery и др. наследников ADODataSet.
Свойство ConncetionString содержит строку, в которой записаны все необходимые данные для связи с БД (набор параметров изменяется в зависимости от типа используемого провайдера).
Строку можно сформировать не только с помощью редактора соединений, но и вручную (программно). Для каждого провайдера строка будет разной.
К примеру для создания связи с базой данных MS Access строка выглядет так:
ADOCOnncetion1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ACCESS\base.mdb;Persist Security Info=False';
для универсальности путь можно к БД можно указывать с помощью OpenDialog:
ADOCOnncetion1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+OpenDialog1.FileName+';Persist Security Info=False';
Что же касается Вашего случая, здесь все по аналогии. Создайте соединение с базой данных с помощью редактора соединений.

Для того чтобы вызывать редактор соединений, необходимо дважды щелкнуть на компоненте TADOConnection. В результате будет активировано диалоговое окно. В этом окне можно настроить соединение, используя поле Use Connection String, или загрузить параметры соединения из файла в разделе Use Data Link File.
Параметры соединения хранятся в файлах UDL, представляющих собой обычные текстовые файлы, содержащие параметры соединения.
Для того чтобы настроить соединение сданным провайдером, необходимо нажать на кнопку Build. Появится окно, в котором будет опубликован список доступных провайдеров.
На вкладке Provider можно выбрать подходящий провайдер данных OLE DB для конкретного источника данных. В списке провайдеров также присутствуют провайдеры, предназначенные для доступа к конкретным службам операционной системы. На вкладке Connection необходимо указать путь к базе данных или сервер. Вкладка Advanced предназначена для указания режима доступа, аналогично свойству Mode. Вкладка Аll предназначена для более «тонкой» настройки специфичных свойств провайдера.

Далее используйте содержимое сформированной ConnectionString, изменяя ее параметры в зависимости от требований.

Вот обработчик события кнопки Button1, по нажатию на которую устанавливается соединение с базой MS Access. Расположение базы выбирается пользователем с помощью OpenDialog1. Для связи используется ADOConnection1. (В приложении).
Для других провайдеров суть одна и та же (программно можно указывать каталог расположения БД, для MS SQL Server можно указывать компьютер с БД и имя БД, для InterBase также).

Удачи!

Приложение:
procedure TForm1.Button1Click(Sender: TObject);
begin

if OpenDialog1.Execute then //Выбираем файл с БД
begin
ADOConnection1.Connected:=false; //Разрываем связь с БД, на тот случай, если соединение уже установлено
//Формируем ConnectionString
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
OpenDialog1.FileName +
';Persist Security Info=False';
try
ADOConnection1.Connected:=true; //Открываем БД
except on E:Exception do //если ошибка
ShowMessage(E.Message); //показываем сообщение ошибки
end;

end;
5
Неизвестный
25.10.2009, 15:40
общий
это ответ
Здравствуйте, Dimon4ik.
Осмелюсь предложить и другой вариант. Немного дополняющий предыдущий ответ.
Во время отладки приложения, для удобства может быть, строка подключения может принимать законченный вид (имеет путь к БД и значения других параметров) и прописана соответственно в свойстве ConnectionString. Остается поправить ее для реального расположения БД, введнного пользователем. Пердположим, что этот реальный путь оказывается в поле Edit1.Text, тогда см. код в приложеии

Приложение:
var ParamValue:TStringList

begin

ParamValue:=TStringList.Create;
ADOConnection1.Connected:=false; // разрываем соединение, иначе будет ошибка

ParamValue.Text:=StringReplace(ADOConnection1.ConnectionString,';',sLineBreak,[rfReplaceAll]); // заменяем разделитель параметров ";" на конец строки. это для того, чтобы наш stringlist воспринимал строку подключения как "параметр"="значение"
ParamValue.Values['DBQ']:=Edit1.Text;
ParamValue.Values['DefaultDir']:=Edit1.Text;
ParamValue.Values['Initial Catalog']:=Edit1.Text; //эти три параметра могут быть другими. все зависит от источника данных
ADOConnection1.ConnectionString:=StringReplace(ParamValue.Text,sLineBreak,';',[rfReplaceAll]); // делаем обратное преобразование, чтобы теперь уже ADOConnection воспринимал правильно строку подключения
ADOConnection1.Connected:=true; // всё, есть коннект
ParamValue.Free;
end;
5
Форма ответа