Продолжаем разговор о создании программы "Расходы".
На прошлом уроке я позволил себе лирическое отступление, рассказав о создании заставки к программе.
На прошлом уроке я позволил себе лирическое отступление, рассказав о создании заставки к программе.
Но сегодня, мой дорогой читатель, наступил долгожданный момент, когда речь пойдет о подключении к созданной нами ранее в среде MS Access базе данных Rashod.mdb.
Но, для начала, предлагаю ввести одну переменную типа записи и одну полезную константу в разделе interface:
const CR=#13#10; // Константа перевода каретки
Type TMySelect = record
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. Это нужно для того, чтобы при попытке подключения к базе данных не запрашивался пароль и логин. В других задачах Вы можете использовать иные настройки.
Затем, как показано на иллюстрации:
- щелкните по кнопке с многоточием в поле ConnectionString, чтобы вызвать редактор строки подключения,
- нажмите кнопку "Build" - построить,
- выберите драйвер MS Jet, позволяющий коннектиться к базам данных Access,
- нажмите кнопку "Далее"
- выберите базу данных Rashod.mdb,
- нажмите "Проверить соединение",
- нажмите "ОК".
Полученную с помощью мастера строку подключения скопируйте целиком в соответствующую строку файла 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;
end;
Процедура:
Procedure TMainFrm.MainConnecting();
var ini: TIniFile;
ConnectionString: String;
begin
ini:=TiniFile.Create(GetCurrentDir + '\Rashod.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;
ADOConnection1.ConnectionString:=ConnectionString;
ADOConnection1.Connected:=true;
end;
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;
MainConnecting;
// далее будет произведено подключение таблиц TableActive(True);
end;
Если Вы скомпилировали проект, и при этом не возникло ошибок, на этом на сегодня все.
Что же дальше?
Короткий разговор о контейнерах и элементах управления главной формы.
Короткий разговор о контейнерах и элементах управления главной формы.
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.