Минимально необходимое оборудование:
PC.................................................... 80486 SX2-66;
RAM................................................ 12 MB;
HDD................................................ 50 MB свободных;
Screen.............................................. Color VGA.
Рекомендуемое оборудование:
PC.................................................... Pentium 133 МГц;
RAM................................................ 32 MB;
HDD................................................ 30 MB свободных;
Screen.............................................. Color SVGA;
Необходимое программное обеспечение:
ОС................................................... Windows’95;
Машинабазданных....................... Borland DataBase Engine 3.0;
Приложение.................................... Система моделирования макроэкономики.
Структура программы представлена на риc.5
Рис.5. Структура программы.
За более чем 25-летнюю историю развития реляционных баз выработался ряд новых требований к методам и средствам доступа к данным.За такую долгую историю в промышленном использовании нашли своё применение огромное количество форматов хранения данных.Поэтому одним из основных вопросов дальнейшего развития СУБД стал вопрос о создании единой среды обработки данных.На базе многолетнего опыта создания инструментальных средств компания Borland предоставила разработчикам свою технологию доступа к данным – BorlandDatabaseEngine, Известную также как IDAPI (IntegratedDatabaseAPI).Идеология доступа к локальным и клиент/серверным данным существенно отличаются (в одном случае используется навигационный подход, в другом – язык SQL, ориентированный на множество данных). BDE объединяет эти подходы без уменьшения функциональных возможностей кождого из них. Поэтому BDE (IDAPI) положен в основу инструментов создания масштабируемых систем обработки данных, одним из которых является Delphi.
BDE предоставляет единый набор функций (API) обработки локальных и серверных данных. Обращение к различным источникам данных основано на коцепции драйверов. Таким образом обеспечивается интерфейс к наиболее распространённым форматам/способам хранения данных: dBase, Paradox и серверным источникам InterBase, Oracle, Sysbase, Informix, MSSQL-Server.
Когда речь заходит об обработке данных в структуре клиент/сервер следует понимать, что реализация доступа к серверным данным несколько усложняется. В этом случае вводится понятие middleware – некоего среднего звена, отвечающего за взаимодействие универсального интерфейса (в нашем случае IDAPI) с клиентскими средствами сервера БД. В качестве такого middleware для пользователей BDE выступает BorlandSQLLinks, также реализованный в виде набора драйверов для каждого конкретного сервера.
Формы баз данных Delphi можно разделить на четыре следующих функциональных класса.
1. Редактирование и ввод. Простая форма, представляющая одну запись одной таблицы.
2. Сетка. Форма, которая отображает несколько строк одной таблицы, как это делается в программах электронных таблиц (каждая строка таблицы базы данных занимает одну строку на экране).
3. Управляющая сетка. Форма, которая отображает несколько строк одной таблицы (каждая строка таблицы базы данных занимает несколько строк экрана).
4. Главная-подчиненная. Форма, которая показывает строки двух или более связанных таблиц.
При разработке приложения прежде всего создаются и сохраняются в хранилище объектов Delphi формы-предки. Затем на их основе создаются все формы, являющиеся потомками.
Первое, что надо сделать при разработке приложения базы данных с помощью Delphi, - создать псевдоним BDE, представляющий базу данных нашего приложения. Созданный псевдоним будет использоваться в приложении для обращения к реальной базе данных.
Для создания псевдонима мы используем многофункциональное средство DelphiDatabaseExplorer.
Далее рассмотрим подробнее некоторые модули отвечающие за связь с базой данных.
Если мы выберем пункт меню Файл®Новая модель, тогда вызывается модуль, который отвечает за открытие новой модели.
Рис.8. Форма fmNew.
Модуль состоит из пяти процедур. Рассмотрим только наиболее интересующие нас.
Описываем переменные:
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.
Процедура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.