Задачи:
— скачать компонент mysqldac компании microolap;
-скачать компонент отчетов fastreport;
-создать клиентское приложение, формы для управления данными, проверить запросы и отчеты.
Ход работы
В качестве примера рассмотрим пример создания клиентского приложения в среде программирования Embarcadero Delphi 10.4.
Создадим форму под именем MainForm, установив в свойстве formstyle значения fsMDIForm
и разместив на форме компонент MainMenu.
Ниже в таблице показано расположение вкладок меню клиентского приложения.
Система | База данных | Справка |
Настройки | Товары | О программе |
Выход | Поставщики | Руководство |
Приход товара | ||
Запросы |
Разместим на главной форме компонент TMySQLDatabase для подключения к удаленной базе данных sklad.
Для настройки данного компонента вызываем редактор нажатием правой кнопки мыши по данному компоненту и выбираем из контекстного меню TMySQLDatabase Editor и настраиваем его.
Подключение и отключение приложения от БД будет осуществляться с помощью программного кода:
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:
При закрытие форм необходимо в обработчик события 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 назначим новые названия.
Поместим на форму три компонента 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 |
DataField | Name | Name |
ListSourse | DataSourse1 | DataSourse2 |
ListField | Tovar | Postav |
KeyField | IdTovar | IdPostav |
Для указание поступившего на склад товара используем компонент 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 |
Затем в обработчик события 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;