2.2.5 Создание псевдонима BDE

Первое, что надо сделать при разработке приложения базы данных с помощью Delphi, - создать псевдоним BDE, представляющий базу данных нашего приложения. Созданный псевдоним будет использоваться в приложении для обращения к реальной базе данных.

Для создания псевдонима мы используем многофункциональное средство Delphi Database Explorer.


Рис.7. Окно Database Explorer после добавления нового псевдонима BDE.

Далее рассмотрим подробнее некоторые модули отвечающие за связь с базой данных.

2.2.6   Модуль формы fmNew

Если мы выберем пункт меню Файл®Новая модель, тогда вызывается модуль, который отвечает за открытие новой модели.

Рис.8. Форма fmNew.


Модуль состоит из пяти процедур. Рассмотрим только наиболее интересующие нас.



Процедура TfmNew.BitBtn1Click


Рис.9. Алгоритм работы процедуры TfmNew.BitBtn1Click

Описываем переменные:

var

 s : String;

 i : longint;

Если в строке не ввели имя модели тогда вывести сообщение ‘Введите имя модели’

begin

 if eNew.Text='' then begin

 MessageDlg('Введите имя модели', mtError, [mbOk], 0);

 eNew.SetFocus;

 exit;

 end;

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

 if ePath.Text='' then begin

 MessageDlg('Введите путь к базе данных модели', mtError, [mbOk], 0);

 ePath.SetFocus;

 exit;

 end;

Если не ввели название файла модели вывести сообщение об ошибке

 if eModel.Text='' then begin

 MessageDlg(‘Введите название файла модели', mtError, [mbOk], 0);

 eModel.SetFocus;

 exit;

 end;

Идентификация имени модели

 fmMain.DbPath:=ePath.Text+'\'+eNew.text+'.gdb';

 fmMain.Model:=ePath.Text+'\'+eNew.text+'.gdb';

Вырезаем имя файла с текстом формул

 s:=UpperCase(eModel.Text);

 if (pos('.MDL',s)=0) then begin

 s:='';

 if pos('.',eModel.Text)=length(eModel.Text)-3

 then for i:=1 to length(eModel.Text)-4 do s:=s+eModel.Text[i];

 s:=eModel.Text+'.MDL';

 end;

 fmMain.FModel:=s;

Обработка исключительной ситуации

 try fileUtil.copyfile(extractfilepath(application.ExeName)+'base.gdb',ePath.Text+'\'+eNew.text+'.gdb',nil);

 except

 showmessage(Не найден прототип базы);

 exit;

 end;

Добавляем параметры подключения к базе данных.

 with fmmain.DataBase do begin

 Connected:=false;

 Params.Clear;

 params.Add('user name=sysdba');

 params.Add('password=masterkey');

 params.Add('server name='+ePath.Text+'\'+eNew.text+'.gdb');

 Connected:=true;

 end;


Модуль формы fmForm1.




Рис.10. алгоритм работы процедуры TfmForm1.FormCreate формы fmForm1.


Процедура TfmForm1.FormCreate.

begin

i:=1;

 strQ:='select ID,path,MFile from Model';

qMain.Close;

 qsec.Close;

 with db1 do begin

 Connected:=false;

 Params.Clear;

 params.Add('user name=sysdba');

 params.add('password=masterkey');

 params.Add('server name='+fmmain.dbPath);

 Connected:=true;

 end;

 model_name:=fmMain.DbPath;

 qMain.SQL.Clear;

 qSec.SQL.Clear;

 qsec.Close;

Выборка имени модели из таблицы ‘Model’

 Self.qMain.SQL.Add(strQ);

 Self.qMain.Open;

 model:=tv.Items.AddFirst(nil,Self.qMain.FieldByName('ID').AsString);

 fmMain.FModel:=Self.qMain.FieldByName('MFile').AsString;

Цикл рекурсивной выборки подмоделей и переменных

 while i<Self.qMain.RecordCount do begin

 Self.qMain.First;

 Self.qMain.MoveBy(i);

 child_model:=tv.Items.AddChild(model,Self.qMain.FieldByName('ID').AsString);

 strTmp:=Self.qMain.FieldByName('Path').AsString;

 Self.qMain.close;

 showchild(child_model, strTmp);

 inc(i);

 strQ:='select ID,path from Model';

 Self.qMain.SQL.Clear;

 Self.qMain.SQL.Add(strQ);

 Self.qMain.Open;

 end;

Выборка параметров моделей из таблицы ‘Params’

 i:=0;

 strQ:='Select id from params';

 Self.qMain.close;

 Self.qMain.SQL.Clear;

 Self.qMain.SQL.Add(strQ);

 Self.qMain.Open;

Заполнение дерева

 while i<Self.qMain.RecordCount do begin

 (tv.Items.AddChild(model,Self.qMain.FieldByName('id').AsString));

 Self.qMain.Next;

 inc(i);

 end;

 count_grids:=0;

qMain.Close;

 qSec.close;

Визуализация дерева и таблицы

 fmMain.SpeedButton3.Enabled:=true;

 fmMain.SpeedButton2.Enabled:=true;

 fmMain.SpeedButton1.Enabled:=true;

 treevisible:=true;

 tablevisible:=true;

 graphvisible:=true;

 model.Expand(true);

end;


Модуль формы fmVar

Форма отвечающая за ввод переменных.


Рис.11. Форма fmVar.

Процедура TfmVar.BitBtn1Click.

Дерево модели может включать в себя переменные, подмодели, а также группы из переменных и подмоделей, но на данном этапе развития проекта понятие группы пока не рассматривается.. Также пока не существует модели макроэкономики, которая была бы структурирована достаточным образом, т.е. в нее кроме переменных входила бы хоть одна подмодель. Таким образом, на данном этапе развития проекта имеет смысл говорить о модели, состоящей только из переменных. Программно это выполнено следующим образом: после ввода имени переменных, комментария и индексов, от которых зависит переменная, из таблицы indexes.db с помощью SQL - запроса выбирается информация по индексам, от которых зависит переменная, и, на основании этой информации, формируется таблица для первоначальных значений. Далее, после того, как пользователь ввел начальные значения переменной, заполняются таблицы inter.db, param.db, params.db и var_value.db. Все это делает процедура класса fmVar.



Рис.11. алгоритм работы процедуры TfmVar.BitBtn1Click формы fmVar.

var

 i,j,num : longint;

 Two : Boolean; - имеет значение True, когда переменная зависит от 2-х индексов

begin

 if (eVar.Text='') or (lbVar.Items.Count=0) then exit;

 if lbVar.Items.Count>2 then begin

 MessageDlg('В переменной должно быть не больше двух индексов',mtError,[mbOk],0);

 exit;

 end;

 IndexChance:=not IndexChance;

 lbAll.Enabled:=not lbAll.Enabled;

 lbVar.Enabled:=not lbVar.Enabled;

 sgVar.Enabled:=not sgVar.Enabled;

 eVar.Enabled:=not eVar.Enabled;

 eRem.Enabled:=not eRem.Enabled;

 sgVar.ShowHint:=not sgVar.ShowHint;

 if lbVar.Items.Count=2 then Two:=True

 else Two:=False;

Кнопка Ok нажата один раз

 if not IndexChance then begin

 fmMain.qMain.SQL.Clear;

Выборка параметров индексов

fmMain.qMain.SQL.Add('SELECT * from Indexes where ID='+#39+lbVar.Items.Strings[0]+#39+';');

 fmMain.qMain.Open;

Количество столбцов таблицы sgVar

 sgVar.ColCount:=round((fmMain.qMain.FieldByName('Mx').AsInteger-fmMain.qMain.FieldByName('Mn').AsInteger) div fmMain.qMain.FieldByName('Step').AsInteger+1)+1;

Если переменная зависит от 2-х индексов

 if Two then begin

 fmMain.qSec.SQL.Clear;

 fmMain.qSec.SQL.Add('SELECT * from Indexes where ID='+#39+lbVar.Items.Strings[1]+#39+';');

 fmMain.qSec.Open;

Количество строк таблицы sgVar для второго индекса

 sgVar.RowCount:=round((fmMain.qSec.FieldByName('Mx').AsInteger-fmMain.qSec.FieldByName('Mn').AsInteger) div fmMain.qSec.FieldByName('Step').AsInteger+1)+1;

 end;

Заполнение верхней строки таблицы sgVar значениями индекса

 sgVar.FixedRows:=1;

 sgVar.FixedCols:=1;

 for i:=1 to sgVar.ColCount-1 do

 sgVar.Cells[i,0]:=IntToStr(fmMain.qMain.FieldByName('Mn').AsInteger+(i-1)*fmMain.qMain.FieldByName('Step').AsInteger);

Если переменная зависит от 2-х индексов

 if Two then begin

Заполнение первого столбца таблицы sgVar значениями второго индекса

 for i:=1 to sgVar.RowCount-1 do

 sgVar.Cells[0,i]:=IntToStr(fmMain.qSec.FieldByName('Mn').AsInteger+(i-1)*fmMain.qSec.FieldByName('Step').AsInteger); sgVar.Cells[0,0]:=fmMain.qSec.FieldByName('Id').AsString+'\'+fmMain.qMain.FieldByName('Id').AsString;

 end

 else sgVar.Cells[0,0]:=fmMain.qMain.FieldByName('Id').AsString;

 fmMain.qMain.Close;

 fmMain.qSec.Close;

 end

Кнопка Ok нажата второй раз

 else begin

 for i:=0 to lbVar.Items.Count-1 do begin

 fmMain.qMain.SQL.Clear;

Заносим имя переменной и ее индекс в таблицу Inter

 fmMain.qMain.SQL.Add('INSERT INTO Inter VALUES('+#39+eVar.Text+#39+','+#39+lbVar.Items.Strings[i]+#39+',1,'+#39+'v'+#39+');');

 fmMain.qMain.ExecSQL;

 end;

 num:=0;

Заносим в базу данных значения переменных иэ табл. sgVar

 for i:=1 to sgVar.ColCount-1 do

 for j:=1 to sgVar.RowCount-1 do begin

 fmMain.qMain.SQL.Clear;

 inc(num);

 fmMain.qMain.SQL.Add('INSERT INTO Param VALUES('+#39+eVar.Text+#39+','+#39+lbVar.Items.Strings[0]+#39+','+#39+sgVar.Cells[i,0]+#39+','+IntToStr(num)+');');

 fmMain.qMain.ExecSQL;

Заносим в табл. Param имена переменных и их комментарии

 if Two then begin

 fmMain.qMain.SQL.Clear;

 fmMain.qMain.SQL.Add('INSERT INTO Param VALUES('+#39+eVar.Text+#39+','+#39+lbVar.Items.Strings[1]+#39+','+#39+sgVar.Cells[0,j]+#39+','+IntToStr(num)+');');

 fmMain.qMain.ExecSQL;

 end;

 fmMain.qMain.SQL.Clear;

 fmMain.qMain.SQL.Add('INSERT INTO Var_value VALUES('+#39+eVar.Text+#39+','+IntToStr(num)+','+#39+sgVar.Cells[i,j]+#39+','+'0);');

 fmMain.qMain.ExecSQL;

 fmMain.qMain.SQL.Clear;

 fmMain.qMain.SQL.Add('INSERT INTO Var_value VALUES('+#39+eVar.Text+#39+','+IntToStr(num)+'," ",'+'-1);');

 fmMain.qMain.ExecSQL;

 end;

 fmMain.qMain.SQL.Clear;

 fmMain.qMain.SQL.Add('INSERT INTO Params (id,remark) VALUES('+#39+eVar.Text+#39+','+#39+eRem.Text+#39+')');// changed for MDI

 fmMain.qMain.ExecSQL;

Добавляем переменную в дерево переменных

 if not(TfmForm1(fmMain.ActiveMDIChild).tv.Selected.HasChildren or not(TfmForm1(fmMain.ActiveMDIChild).tv.Selected.Parent<>nil )) then TfmForm1(fmMain.ActiveMDIChild).tv.Items.AddChild(TfmForm1(fmMain.ActiveMDIChild).tv.Selected.Parent,eVar.Text)

 else TfmForm1(fmMain.ActiveMDIChild).tv.Items.AddChild(TfmForm1(fmMain.ActiveMDIChild).tv.Selected,eVar.Text);

 Close;

 end;

end;


Модуль формы fmSetInter.


Рис.12. форма fmSetInter.


Рис.13. алгоритм работы процедуры TfmSetInter.cb1Change формы fmSetInter.

Процедура TfmSetInter.cb1Change.

var

 i:integer;

 begin

Если минимальное значение изменено

 if TComboBox(sender).name='cb1' then begin

Списку максимальных значений присвоить список минимальных

 cb2.items:=cb1.items;

Если выбрано мин. значение – удаляем из макс. списка лишнее

 if cb1.itemindex<>-1 then for i:=0 to cb1.itemindex-1 do cb2.Items.Delete(0);

 end;

Если выбраны все значения – кнопка Ok доступна

 if (cb1.ItemIndex<>-1) and (cb2.itemindex<>-1) then OKBtn.enabled:=true

 else okBtn.enabled:=False;

Сохраняем значения

min:=cb1.items[cb1.itemindex];

max:=cb2.items[cb2.itemindex];


Модуль формы fmIndex.

Рис.14. форма fmIndex.


Рис.15. алгоритм работы процедуры TfmIndex.FormClose.



var

 i : longint;

begin

Курсор в начало таблицы

 tIndex.First;

цикл по всем строкам таблицы

 for i:=1 to tIndex.RecordCount do begin

условия корректности

 if (tIndex.FieldByName('Mn').AsInteger>tIndex.FieldByName('Mx').AsInteger)

 or (tIndex.FieldByName('Mn').AsInteger+tIndex.FieldByName('Step').AsInteger>tIndex.FieldByName('Mx').AsInteger)

 then begin

сообщение об ошибке

 MessageDlg('Введите привильное значение индекса', mtError, [mbOk], 0);

 Action:=caNone;

 exit;

 end;

переход на следущую строку

 tIndex.Next;

 end;

закрытие таблицы tIndex

 tIndex.Active:=False;

end;


Глава 2

ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ

 

“ Технология программирования с использованием средств быстрой разработки приложений”

2. Технология программирования с использованием средств быстрой разработки приложений   2.1 Введение

Тема данной главы - технология быстрой разработки приложений - RAD (Rapid Application Development). Данная технология сравнительно нова, но она быстро становится популярной, многие производители средств разработки приложений взяли эту технологию на вооружение.

Хотя это и новый подход в программировании, но и до появления RAD–средств делались попытки облегчить труд программиста, сделать этот труд более продуктивным, повысив этим быстродействие и удобство создания приложений. Первоначально появились интегрированные среды разработки - IDE (Integrated Development Environment), объединяющие компилятор, специальный текстовый редактор, ориентированный на работы с текстами на целевом языке программирования и средства отладки - трассировщик—дебаггер и другие. По сравнению с предыдущими средствами программирования это был большой шаг вперед, но затем появились CASE–средства, которые позволяли максимально визуализировать процесс создания программы, но пользоваться ими было чересчур неудобно из-за их негибкости. В большинстве случаев написать достаточно сложную программу было очень трудно. Сейчас эти средства используются там, где подход достаточно однообразен - например при написании средств работы с базами данных.

Средства же быстрой разработки приложений (в дальнейшем - RAD–средства), взяв все лучшее из интегрированных сред разработки и CASE систем, объединили мощь и гибкость работы с исходными текстами с удобством создания графического интерфейса пользователя - GUI (Graphic User Interface). К сожалению, большинство RAD–средств не позволяют визуализировать логику самой программы, но и те методы, которые заложены в современные RAD–средства, позволяют поднять производительность разработки программ в 2-3 раза.

Первой вариантом RAD–средств можно назвать продукт фирмы Microsoft - Visual Basic, появившийся в начале девяностых годов. Но пик популярности подобных средств наступил совсем недавно - сразу несколько ведущих фирм по производству средств создания приложений анонсировали новые версии своих продуктов, которые уже могут по праву называться RAD–средствами. Среди них можно назвать Microsoft Visual C++, Microsoft Visual Java, Power Builder (PowerSoft), Optima++ (PowerSoft), Borland Delphi, Borland C++ Builder и много других. В данной главе основной акцент будет делаться на систему Borland Delphi 3, поскольку именно эта среда использовалась при разработке программы в рамках данного дипломного проекта. Соответственно, большее внимание будет уделяться и диалекту языка Pascal - Object Pascal, который используется в качестве языка программирования в среде Delphi.

2.2 Особенности RAD–средств

Две основных черты RAD–средств - это визуальная компонентность и многократное использование кода. Каждая из этих черт предназначена для повышения производительности программирования. Рассмотрим их подробнее.



Информация о работе «Клиентская часть технологической среды для разработки больших экономических моделей: компоненты поддержки работы эксперта-экономиста при формировании и отладке (в расчетном режиме) структурного текста модели»
Раздел: Информатика, программирование
Количество знаков с пробелами: 107651
Количество таблиц: 13
Количество изображений: 31

Похожие работы

Скачать
176646
13
0

... без применения компьютерной техники. Непрекращающееся развитие любого предприятия, учреждения или организации, а как следствие объёмов и сложности информации требует расширения компьютерных сетей и автоматизированных информационных систем. Но кроме очевидных выгод компьютерная техника несет в себе опасность здоровью и поэтому актуальной становится проблема охраны труда человека в процессе работы ...

Скачать
107365
2
8

... мы все сделали правильно, воспроизведем курс с начала, щелкнув кнопку Restart на панели управления. Создание кадров «Автор» и «Уч. пособ» идентично созданию кадра «Заголовок». Первый отображает фамилию и инициалы автора, а второй указывает, что это – электронный обучающий комплекс. Пятый и шестой кадр {Wait Icon и Erase Icon) весьма тесно связаны друг с другом. Эта пара обеспечивает управляемый ...

0 комментариев


Наверх