Клиентское приложение на Delphi к MySQL/MariyDB

Задачи:

— скачать компонент mysqldac компании microolap;

-скачать компонент отчетов fastreport;

-создать клиентское приложение, формы для управления данными, проверить запросы и отчеты.

Ход работы

В качестве примера рассмотрим пример создания клиентского приложения в среде программирования Embarcadero Delphi 10.4.

Создадим форму под именем MainForm, установив в свойстве formstyle значения fsMDIForm

и разместив на форме компонент MainMenu.

Ниже в таблице показано расположение вкладок меню клиентского приложения.

СистемаБаза данныхСправка
НастройкиТоварыО программе
ВыходПоставщикиРуководство
 Приход товара 
 Запросы 
Меню вкладок приложения

Разместим на главной форме компонент TMySQLDatabase для подключения к удаленной базе данных sklad.

Для настройки данного компонента вызываем редактор нажатием правой кнопки мыши по данному компоненту и выбираем из контекстного меню TMySQLDatabase Editor и настраиваем его.

Настройка компонента TMySQLDatabase

Подключение и отключение приложения от БД будет осуществляться с помощью программного кода:

MySqldatabase1.Connected:=true; //Подключение
MySqldatabase1.Connected:=false;//Отключение

, включенного в обработку событий onCreate и OnСlose главной формы MainForm.

Добавим в проект функциональные формы TovarForm, PostavForm, PrihodForm, QueryForm, SyS, About  c соответствующими модулями TovarUnit.pas, PostavUnit.pas, PrihodUnit.pas, QueryUnit.pas, SySUnit.pas, AboutUnit.pas которые будут отображаться внутри главной формы MainForm. Для этого необходимо в свойстве formstyle каждой формы установить значение fsMDIChild.

С помощью диалогового окна Project Options переведем данные формы в режим ожидания запуска с главной формы, для этого необходимо выполнить команду Project->Options и выбранные формы перенести из окна Auto-Create forms в окно Available forms:

Диалоговое окно Project Options

При закрытие форм необходимо в обработчик события onClose каждой функциональной формы ввести следующий программный код: action:=cafree;

Для связи с компонентом MySqlDatabase1 прописать в коде объявление uses главного модуля список подключаемых функциональных форм либо указать в форме «Use unit..», вызываемой комбинацией клавиш ALT+F11:

var
MainForm: TMainForm;
implementation
uses TovarUnit.pas, PostavUnit.pas, PrihodUnit.pas, QueryUnit.pas, SySUnit.pas, AboutUnit.pas;

Для вызова выше указанных форм необходимо в обработчик события Click вкладок компонента MainMenu ввести код загрузки форм. Например для формы «Товары» загрузка выполняется следующим образом:

procedure TMainForm.TovarClick(Sender: TObject);
var form:TTovarForm;//объявление переменной типа TTovarForm
begin
form:= TTovarForm.Create(Application); //Создание в переменной объекта
form.show; //Отображение формы
end;

Форма TovarForm предназначена для ввода сведений о товарах, находящихся на  складе. Внешний вид формы представлен на рисунке

Внешний вид формы «Товары»

На данной форме расположен компонент  MySQLTable1:TMySQLTable  предназначенный для подключения к таблице Tovar. В окне Инспектора Объектов, для компонента MySQLTable1 установим в свойстве Database значение MainForm.mySQLDatabase1, и укажем имя подключаемой таблицы, значение Tovar в свойстве TableName.

Расположим на форме компонент DataSource. Он служит в качестве связующего звена между невизуальными компонентамии визуальными компонентами. Установите в свойство DataSet компонента значение MySQLTable1, выбрав его из выпадающего списка.

Расположим на форме компонент DBGrid, взяв его из палитры компонентов на странице Data Controls. Установим в свойстве DataSourceкомпонента значение DataSource1, выбрав его из выпадающего списка. Компонент DBGridслужит для отображения записей набора данных в табличной форме.  Для установки отображения названий столбцов необходимо вызвать редактор Editing DBGrid1.Columns и создать список отображаемых полей. В инспекторе объектов каждому элементу редактора в свойстве Caption раздела Title назначим новые названия.

Инспектор объектов и редактор компонента DBGrid1

Поместим на форму три компонента TDBEdit(страница Data Controlsпалитры компонентов): компонент DBTovar, DBEdizm, DBZena Чтобы связать новые компоненты полями, поместим в их свойства DataSource значение DataSource1и в свойство DataFieldсоответственно Tovar, Edizm, Zena.

Для обеспечения навигации по набору данных поместим компонент DBNavigator. Установим в свойстве DataSource компонента значение DataSource1, выбрав его из выпадающего списка.

При открытие формы к событию OnCreate необходимо добавить код mySQLTable1.Active:=true, а на закрытие OnClose код mySQLTable1.Active:=false;

Аналогичным образом создается форма «Поставщики», изображенная на рисунке.

Внешний вид формы «Поставщики»

Форма «Приход товара» предназначена для регистрации поступившего на склад товара, на ней для доступа к полю Tovar размещен сложный компонент TDBLookupComboBox, который позволяет вводить те значения товара, которые уже существуют в таблице Tovar, аналогично к полю Postav таблицы «Поставщики». Изменим свойства так, как указано в таблице:

СвойствоЗначение DBLookComboBox1Значение DBLookComboBox2
DataFieldNameName
ListSourseDataSourse1DataSourse2
ListFieldTovarPostav
KeyFieldIdTovarIdPostav
Свойства компонентов TDBLookupComboBox

Для указание поступившего на склад товара используем компонент TЕdit под названием KolvoEdit и компонент TDataTimePicker вкладка Win32 под названием DataTimePicker1 для указания даты поступления товара.

Для работы с таблицами Tovar и Postav БД разместим по два компонента TMySQLTable и TDataSourse связанных с ними. Дополнительно добавим два компонента для выполнения запросов TMySQLQuery. Первый компоненты   MySQLQuery1 – вставка, удаление записей, а второй MySQLQuery2 – выборка записей. Отображение выборки происходит c помощью компонентаTDBGrid, в нашем случае связанного сMySQLQuery2 через DataSourse3.

Зададим свойству SQL компонента MySQLQuery2 значение:

select IdPrihod, Tovar, Postav, Datprih, Kolvo from Tovar, Prihod, Postav where Tovar.IdTovar=Prihod.IdTovar and Postav.IdPostav=Prihod.IdPostav

При открытие формы к событию OnCreate необходимо добавить код

mySQLTable1.Active:=true;
mySQLTable2.Active:=true;
mySQLQuery2.Active:=true;

, на закрытие соответственно значение false;

Внешний вид формы «Приход товара»

Напишите обработчик события OnClick кнопки Добавить:

procedure TPrihodForm.AddButtonClick(Sender: TObject);
begin
DateSeparator := '-'; //Разделить в дате
ShortDateFormat := 'yyyy/m/d'; //Формат отображения даты
MySQLQuery1.SQL.Clear;
MySQLQuery1.SQL.Add('INSERT INTO prihod SET '
+'IdTovar='+inttostr(DBLookupComboBox1.KeyValue)+ ', '
+'DatPrih='''+datetostr(DateTimePicker1.Date)+ ''','
+'Kolvo='+KolvoEdit.Text+','
+'IdPostav='+ inttostr(DBLookupComboBox2.KeyValue));
MySQLQuery1.ExecSQL;
MySQLQuery2.Refresh;
end;

Напишим обработчик события OnClick кнопки Удалить:

procedure TPrihodForm.DelButtonClick(Sender: TObject);
begin
MySQLQuery1.SQL.Clear;
MySQLQuery1.SQL.Add('DELETE FROM Prihod Where IdPrihod='+ MySQLQuery2.Fields[0].AsString);
MySQLQuery1.ExecSQL;
MySQLQuery2.Refresh;
end;

Для создания запросов разместим на форме «Запросы» компонент TMySQLQuery под именем MySQLQuery1, компонент TDataSource (страница Data Access палитра компонентов) и TDBGrid (страница Data Controls). Установим в свойстве  MySQLQuery1.DatabaseName значение MainForm.Database. Свяжите компонент DataSource1 с MySQLQuery1 (свойство DataSource1.DataSet), a DBGrid1 с DataSource1 (свойство DBGrid1.DataSource).

Добавим на форму компоненты для расширения возможности запросов TEdit, TDataTimePicker.

Внешний вид формы «Запросы»

Чтобы выполнять запросы необходимо предварительно с помощью утилиты mysql сервера база данных MySQL протестировать запросы в таблице

ЗапросИмя компонента
Найти товары дороже 1000 руб.Edit1
Найти товары, произведенные в городе Москва.Edit2
Найти товары, поступившие на склад 01.04.2003.DateTimePicker1
Найти адреса поставщиков производящие товар «Молоко сгущенное»Edit3
Компоненты для реализации SQL-запросов

Затем в обработчик события OnClick каждой кнопки на форме ввести следующий программный код:

MySQLQuery1.Active:=false; //Закрыть запрос
MySQLQuery1.SQL.Clear; //Очистить  строку запроса
MySQLQuery1.SQL.Add('Select name as ''Товар'' from tovar where zena>'+edit1.Text); //Добавить строку запроса
MySQLQuery1.Active:=true; //Выполнить запрос

Если при нажатие на кнопку выскакивает сообщение об ошибке, то запрос набран неверно, необходимо проверить строку запроса.

Ниже приведены значения свойства SQL для компонента MySQLQuery1 необходимые реализуются посредством кнопок формы:

1.Найти товары, произведенные в городе Москва:

Select name as ''Поставщик'',ulica as ''Улица'',telef as ''Телефон'' from postav where gorod='''+edit2.Text+''''

2.Найти товары, поступившие на склад 01.04.2003.

Select tovar.name as ''Товар'',kolvo as ''Количество'',postav.name as ''Поставщик'', telef as ''Телефон'' from postav, prihod,tovar where tovar.idtovar=prihod.idtovar and datprih='''+ datetostr(DateTimePicker1.Date)+''''

3.Найти адреса поставщиков производящие товар «Молоко сгущенное»:

Select Distinct postav.name as ''Поставщик'', ulica as ''Улица'', telef as ''Телефон'' from postav, tovar, prihod where tovar.idtovar=prihod.idtovar and tovar='''+edit3.Text+''''

4.Найти сумму стоимости товаров поступивших на склад:

Select Tovar.name as ''Товар'', sum(kolvo) as ''Сумма'' from tovar, prihod where tovar.idtovar=prihod.idtovar group by tovar

Далее создадим форму “Настройка”, которая используется для установки параметров подключения к серверу баз данных. Для хранения системной информации создадим текстовый файл sys.ini, структура данных, которого представленный ниже:

[Server]
localhost
[Port]
3306
[Database]
sklad
[User]
root
[Password]
123

При активизации главной формы MainForm в обработчике события FormActivate введем программный код установки параметров подключения к БД из данного файла в компоненте MySQlDatabase1:

var     f:textfile;
str:string;
begin
assignfile(f,'sys.ini'); reset(f);
MySQlDatabase1.Connected:=false;
readln(f,str); //[Server] Сетевое имя Серверу БД
readln(f,str);mySQLDatabase1.host:=str;
readln(f,str);//[Port] Порт подлючения к Серверу БД
readln(f,str);mySQLDatabase1.Port:=strtoint(str);
readln(f,str);//[Database] Имя БД
readln(f,str);mySQLDatabase1.DatabaseName:=str;
readln(f,str);//[User] Пользователь Сервера БД
readln(f,str);mySQLDatabase1.UserName:=str;
readln(f,str);//[Password] Пароль пользователя
readln(f,str);mySQLDatabase1.UserPassword:=str;
closefile(f);
MySQlDatabase1.Connected:=true;

Для редактирования данного файла используется форму Sys, на которой размещено 5 компонентовTEdit и  кнопки OK и Отмена для подтверждения либо отмены изменения  настроек:

Внешний вид формы «Настройки»

В обработчик события кнопки Отмена для закрытия данной формы используем оператор Close,а для кнопки OK программный редактирования файла:

procedure TSys.OkButtonClick(Sender: TObject);
var
f:textfile;
begin
assignfile(f,'sys.ini');
rewrite(f);
writeln(f,'[Server]');
writeln(f,ServerEdit.text);
writeln(f,'[Port]');
writeln(f,PortEdit.text);
writeln(f,'[DB]');
writeln(f,DBEdit.text);
writeln(f,'[User]');
writeln(f,UserEdit.text);
writeln(f,'[Password]');
writeln(f,PasswordEdit.text);
closefile(f);
end;

Leave a Comment

+ 10 = 16