вторник, 11 октября 2011 г.

Урок 20. Подключение к базе данных


Продолжаем разговор о создании программы "Расходы". 


На прошлом уроке я позволил себе лирическое отступление, рассказав о создании заставки к программе.
Но сегодня, мой дорогой читатель,  наступил долгожданный момент, когда речь пойдет о подключении к созданной нами ранее в среде MS Access базе данных Rashod.mdb.
Но, для начала, предлагаю ввести одну переменную типа записи и одну полезную константу в разделе interface:
const CR=#13#10;                   // Константа перевода каретки
Type  TMySelect = record
-  объявление типа запись,  на основе которого будет объявлена переменная,  предназначенная для хранения  выбираемых в процессе работы значений
MySel_ID: Integer;             // Идентификатор выбранной строки
MySel_IDAcc: Integer;          // Идентификатор счета
MySel_AccName: String;         // Наименование счета
MySel_IDMO: Integer;           // Идентификатор мемориального ордера
MySel_MOName: String;          // Наименование мемориального ордера
MySel_Mes: Integer;            // Номер месяца
MySel_IDVal: Integer;          // Идентификатор валюты
MySel_ValName: String;         // Название валюты
MySel_Dir: String;             // Выбранная рабочая папка
MySel_Field: String;           // Имя поля
end;

И пусть это пока не смущает... Пригодится.
Не забудьте добавить объявление переменной:
var  MySelect: TMySelect;
Теперь настало время открыть форму в режиме конструктора и разместить на ней компонент TADOConnection с вкладки dbGO панели инструментов. Этот компонент не единственный, который позволяет связать приложение с базой данных. Есть ряд компонентов сторонних производителей, выполняющий аналогичные функции. Корифеи начнут упрекать меня за выбор этого компонента, но я оправдаюсь следующим:
  • данный компонент входит в стандартную поставку среды разработки (т.е. Вам не придется искать и покупать аналоги сторонних производителей),
  • работа с ним проста и удобна,
  • компонент работает надежно и стабильно.
Измените свойство Login Prompt экземпляра ADOConnection1 компонента TADOConnection на False. Это нужно для того, чтобы при попытке подключения к базе данных не запрашивался пароль и логин. В других задачах Вы можете использовать иные настройки.
Затем, как показано на иллюстрации:
  1. щелкните по кнопке с многоточием в поле ConnectionString, чтобы вызвать редактор строки подключения,
  2. нажмите кнопку "Build" - построить,
  3. выберите драйвер MS Jet, позволяющий коннектиться к базам данных Access,
  4. нажмите кнопку "Далее"
  5. выберите базу данных Rashod.mdb,
  6. нажмите "Проверить соединение",
  7. нажмите "ОК".
Полученную с помощью мастера строку подключения скопируйте целиком в соответствующую строку файла Rashod.ini (см. видео):
[General]
ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=X:\Lessons\InternetBusiness\! VideoLessons\Les 20\Расходы\Rashod.mdb;Persist Security Info=False

Правильно сформированная строка не вызовет ошибки, если свойство Connected элемента ADOConnection1 изменить на True. Если у Вас все получилось, верните этому свойству первоначальное значение.
ВНИМАНИЕ! В финале работы над проектом Вы обязательно удалите строку подключения из свойства ConnectionString!
Но, не сейчас. Она нам еще понадобится, когда мы продолжим разработку и будем наполнять проект таблицами и запросами.
Теперь нам необходимо осуществить программное подключение.
В описании класса формы, в разделе Private, добавим одну процедуру и одну функцию:
private    { Private declarations }
Procedure MainConnecting();
Function TestConnection(): Boolean;
Назначение функции - дать ответ на вопрос: возможно ли подключение к базе данных по заданной в ini файле строке подключения.
Процедура же, после тестирования производит необходимые действия по подключению к базе данных.
Текст функции:
Function TMainFrm.TestConnection(): Boolean;
var  ini: TIniFile;
ConnectionString: String;
begin
Result:=True;                     // Если не произойдет "плохого", то функция вернет это значение
// Подключение и считывание из файла настроек
ini  ini:=TiniFile.Create(GetCurrentDir + '\Rashod.ini');
ConnectionString:=Ini.ReadString('General','ConnectionString','');
ini.Free;
// Проверка, имеется ли подключение? Если да, то - сброс
If ADOConnection1.Connected=True  then    ADOConnection1.Connected:=False;
// Назначение компоненту считанной из файла настроек строки подключения
ADOConnection1.ConnectionString:=ConnectionString;
// Подключение
Try
ADOConnection1.Connected:=true;
Except
ADOConnection1.Connected:=False;     // Если неудача
Result:=False;
End;
end;

Процедура:
Procedure TMainFrm.MainConnecting();
var  ini: TIniFile;
ConnectionString: String;
begin
ini:=TiniFile.Create(GetCurrentDir + '\Rashod.ini');
ConnectionString:=Ini.ReadString('General','ConnectionString','');
ini.Free;
If ADOConnection1.Connected=True  then    ADOConnection1.Connected:=False;
ADOConnection1.ConnectionString:=ConnectionString;
ADOConnection1.Connected:=true;
end;

А теперь, задав для события создания формы (onCreate) процедуру его обработки как показано в прилагаемом видео, запишем в нее следующий текст:
procedure TMainFrm.FormCreate(Sender: TObject);
begin
// Стартовые значения переменным
MySelect.MySel_ID:=0;
MySelect.MySel_IDAcc:=0;
MySelect.MySel_IDMO:=0;
MySelect.MySel_AccName:='';
MySelect.MySel_MOName:='';
MySelect.MySel_Mes:=0;
MySelect.MySel_IDVal:=1;
MySelect.MySel_ValName:='Руб';
If Not TestConnection  then    {некие действия с помощью процедуры SetDisk, разговор о которой в будущем};
MainConnecting;
// далее будет произведено подключение таблиц TableActive(True);
end;
Если Вы скомпилировали проект, и при этом не возникло ошибок, на этом на сегодня все.

Что же дальше?
Короткий разговор о контейнерах и элементах управления главной формы.

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

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