Приложение для работы с базой данных (dBase)
Содержание
1. Введение
2. Постановка задачи
3. Практическая часть: Приложение телефонный
справочник ПГТУ
Заключение
Список использованной литературы
Введение
С начала 60-70хх началось бурное развитие
компьютеризации всех крупных промышленных центров. Ближе к 80-ым, компьютеры
стали появляться и в учебных заведениях, предмету «Информатика» стали уделять
огромное внимание. Стали появляться языки программирования высокого уровня
такие, как Delphi, C++.
Далее пойдет речь о языке программирования
Delphi и о базах данных.
В России Borland Delphi появляется в конце 1993
г. и сразу же завоевывает широкую популярность. Новые версии выходят
практически каждый год. В них реализуются все новые мастера, компоненты и
технологии программирования.
Действительно, процесс разработки в Delphi
предельно упрощен. В первую очередь это относится к созданию интерфейса, на
который уходит 80% времени разработки программы. Вы просто помещаете нужные
компоненты на поверхность Windows-окна (в Delphi оно называется формой) и
настраиваете их свойства с помощью специального инструмента (Object Inspector).
С его помощью можно связать события этих компонентов (нажатие на кнопку, выбор
мышью элемента в списке и т.д.) с кодом его обработки - и вот простое
приложение готово. Причем разработчик получает в свое распоряжение мощные
средства отладки (вплоть до пошагового выполнения команд процессора), удобную
контекстную справочную систему (в том числе и по Microsoft API), средства
коллективной работы над проектом, всего просто не перечислить. Вы можете
создавать компоненты ActiveX без использования Microsoft IDL, расширять
возможности web-сервера (скрипты на стороне сервера), практически ничего не
зная об HTML, XML или ASP. Можно создавать распределенные приложения на базе
СОМ и CORBA, Интернет- и intranet-приложения, используя для доступа к данным
Borland DataBase Engine, ODBC-драйверы или Microsoft ADO. Появившаяся, начиная
с Delphi 3, поддержка многозвенной технологии (multi-tiered) доступа к данным
позволяет создавать масштабируемые приложения (относительно слабо зависящие от
сервера БД) за счет перенесения методов обработки информации (бизнес-правил) на
среднее звено.
Как уже говорилось ранее, в Delphi используется
язык Object Pascal, который постоянно расширяется и дополняется Borland. Язык в
полной мере поддерживает все требования, предъявляемые к
объектно-ориентированному языку программирования. Как и положено строго
типизированному языку, классы поддерживают только простое наследование, но зато
интерфейсы могут иметь сразу несколько предков. К числу особенностей языка
следует отнести поддержку обработки исключительных ситуаций (exceptions), а
также перегрузку методов и подпрограмм (overload) в стиле C++. К числу удачных,
на взгляд автора, относится также поддержка длинных строк в формате WideChar и
AnsiChar. Последний тип (AnsiStrmg) позволяет использовать все прелести
динамического размещения информации в памяти без всяких забот о ее выделении и
сборке мусора Delphi делает это автоматически. Для поклонников свободного стиля
программирования имеются открытые массивы, варианты и вариантные массивы,
позволяющие размещать в памяти все, что душе угодно и смешивать типы данных.
Вы можете создавать свои собственные компоненты,
импортировать ОСХ-компоненты, создавать <шаблоны> проектов и
<мастеров>, создающих <заготовки> проектов. Мало того, Delphi
предоставляет разработчику интерфейс для связи ваших приложений (или внешних
программ) с интегрированной оболочкой Delphi (IDE).
Таким образом, вы можете использовать Delphi для
создания как самых простых приложений, на разработку которых требуется 2-3
часа, так и серьезных корпоративных проектов, предназначенных для работы
десятков и сотен пользователей. Причем для этого можно использовать самые
последние веяния в мире компьютерных технологий с минимальными затратами
времени и сил.
Ну, и одна из самых последних новостей от
Inprise обещает, что в ближайшем будущем вы сможете переносить приложения,
разработанные в Delphi, на платформу Linux. Более подробную информацию о Delphi
можно получить на сайтах. Существует большое количество сайтов, посвященных
Delphi, например <Королевство Delphi> - delphi.vitpc.com, Torry's Delphi
Pages.Последний содержит большое число ссылок на ресурсы, связанные с Delphi.
Ну а если вы уже давно знакомы с этим продуктом, то на сайте можно бесплатно
протестироваться в качестве программиста Delphi и получить по почте сертификат.
Мощность и гибкость Delphi при работе с базами
данных основана на низкоуровневом ядре - процессоре баз данных Borland Database
Engine (BDE). Его интерфейс
с
прикладными
программами
называется
Integrated Database Application Programming Interface (IDAPI).
В принципе, сейчас не различают эти два названия
(BDE и IDAPI) и считают их синонимами. BDE позволяет осуществлять доступ к
данным как с использованием традиционного record-ориентированного
(навигационного) подхода, так и с использованием set-ориентированного подхода,
используемого в SQL-серверах баз данных. Кроме BDE, Delphi позволяет
осуществлять доступ к базам данных, используя технологию (и, соответственно, драйверы)
Open DataBase Connectivity (ODBC) фирмы Microsoft. Но, как показывает практика,
производительность систем с использованием BDE гораздо выше, чем оных при
использовании ODBC. ODBC драйвера работают через специальный “ODBC socket”,
который позволяет встраивать их в BDE.
Все инструментальные средства баз данных Borland
- Paradox, dBase, Database Desktop - используют BDE. Все особенности, имеющиеся
в Paradox или dBase, “наследуются” BDE, и поэтому этими же особенностями
обладает и Delphi.
2. Постановка задачи
Необходимо создать приложение позволяющие
создать базу данных, делать сортировку базы данных, производить новые записи
или удаление полей базы данных.
Что бы базу данных можно было переносить с
компьютера на другой компьютер программа должна сама создавать алиасы. Так как
dBase сохраняет базу данных в виде файла с названием базы dBase.DBF. Удобно не
просто указывать путь доступа к таблицам базы данных, а использовать для этого
некий заменитель - псевдоним, называемый алиасом. Он сохраняется в отдельном
конфигурационном файле в произвольном месте на диске и позволяет исключить из
программы прямое указание пути доступа к базе данных. Такой подход дает
возможность располагать данные в любом месте, не перекомпилируя при этом
программу. Кроме пути доступа, в алиасе указываются тип базы данных, языковый
драйвер и много другой управляющей информации.
Ниже приведен листинг программы которая
производит индексацию и проверку базы данных, а также изображение работы
программы (PROGRESS.PAS)
Рис.1 Индексация базы данных
unit
Progress;
interface, SysUtils, Classes, Forms,
Dialogs, StdCtrls,, DBTables, Controls, ComCtrls, Registry,ShellApi, Messages,
Graphics,;_BASE = WM_USER;_OKSTART = MM_BASE + $1;_DATAERROR = MM_BASE +
$2;_KeyDown = MM_BASE + $3;_ENDTHREAD = MM_BASE + $4;= class(TForm):
TProgressBar;: TLabel;: TTable;: TImage;: TTable;: TTimer;:
TLabel;FormCreate(Sender: TObject);ProgressAOM (var MSG: tagMSG; var Handled:
boolean);DataError(var Message: TMessage); message
MM_DATAERROR;Timer1Timer(Sender: TObject);EndThread(var Message:TMessage);
message MM_ENDTHREAD;: boolean;: cardinal;SearchFile(FileName: string):
boolean;
{ Public declarations
};EPhoneException = class (Exception);: TMainForm;: cardinal;: boolean = true;=
'Data.dbf';= 'Data.mdx';= 'DataBuff.dbf';= 'DataBuff2.dbf';= 'LutskPhone';=
'options.ini';= 'Ошибка при
работе
с
базаю
данных
'+#10#13+
'Проверьте наличии файла базы!';= 'Ошибка работы
с BDE!';
implementationTeldov, Thread,
ActiveX, ComObj, ShlObj;
{$R
*.dfm}TMainForm.FormCreate(Sender: TObject);: tagmsg;:boolean;:= false;:=
(Screen.Height - Height) div 2-200;:= (Screen.Width - Width) div 2;.OnMessage
:= ProgressAOM ;
// создание
ярлыка,
запись
в
реестр.TableName
:= sBuffFile;// Check BDE.CreateTable;.Close;
//
ShowMessage(DBIgetErrorString);(ExtractFilePath(ParamStr(0))+'/'+sBuffFile);EPhoneException.Create(sBDEError);
// error BDE;not SearchFile(sDataFile)raise
EPhoneException.Create(sDataFileError);not
SearchFile(sIndexFile)DataThread.create(false)IsCanStart := true;E: Exception
do(e.Message, mtError, [mbOk],0);(MainFOrm.Handle, MM_DATAERROR, 0,
0);;;;;TMainForm.ProgressAOM (var MSG: tagMSG; var Handled:
boolean);MSG.message = MM_OKSTART then.Enabled := false;.CreateForm(TPhoneForm,
PhoneForm);.Hide;.Show;.OnMessage :=
PhoneForm.AOM;;;TMainForm.SearchFile(FileName: string): boolean;:
TSearchRec;FindFirst(GetCurrentDir +'\'+FileName, faAnyFile, CurrFIle)=0Result
:= trueResult := false;;TMainForm.DataError(var Message:
TMessage);;;TMainForm.Timer1Timer(Sender: TObject);IsFirst then:= false;:= 0;
// GetTickCount;;IsCanStart then:= GetTickCount;Tick > (FStartTime + 0) //
1000PostMessage(MainFOrm.Handle, MM_OKSTART, 1, 0);;TMainForm.EndThread(var Message:
TMessage);.Visible := true;:= '';.Visible := false;.Visible := false;.Visible
:= false;:= true;
end;.
После индексации базы данных и проверки её на
существование запускается программа для работы с базой данных.
Рис.2 Главное окно программы
На рисунке 3 показан результат поиска в базе
данных по номеру телефона.
Рис. 3 Поиск в базе данных по номеру телефона
База данных состоит из шести полей : номер
телефона, ФИО, улица, номер дома, номер квартиры, категория.
Ниже приведен листинг программы (TElDov.pas):
база
данные справочник приложение
unit
TElDov;
interface, SysUtils, Thread,
Progress, ExtCtrls, ComCtrls, Menus,, DBCtrls, ImgList, Classes, Controls,
StdCtrls, Grids,, DBTables, DBGrids, Forms, Messages, Dialogs,Clipbrd;=
class(TForm): TDataSource;: TTable;: TStatusBar;: TGroupBox;: TButton;:
TToolBar;: TToolButton;: TToolButton;: TDBGrid;: TImageList;: TToolButton;:
TPopupMenu;: TImageList;: TToolButton;: TToolButton;: TToolButton;:
TToolButton;: TToolButton;: TToolButton;: TToolButton;: TPopupMenu;:
TDBNavigator;FormCreate(Sender: TObject);SearchClick(Sender: TObject);AOM(var
Msg: tagMSG; var Handled: Boolean);EraseButtonClick(Sender:
TObject);MyPopupHandler(Sender: TObject);MyPopupHandler2(Sender:
TObject);MyEditPopup(Sender: TObject; MousePos: TPoint; var Handled:
Boolean);FormClose(Sender: TObject; var Action: TCloseAction);MInMaxSize(var
Message: TMessage); message WM_GETMINMAXINFO;N20Click(Sender:
TObject);N13Click(Sender: TObject);N14Click(Sender: TObject);N15Click(Sender:
TObject);N16Click(Sender: TObject);ExitButtonClick(Sender:
TObject);SearchButtonClick(Sender: TObject);FormDestroy(Sender:
TObject);CreatePopupFields;UpdateStatusBar;CalculateEditSize;SortMode (Sender:
tObject);ReadIni;WriteIni; // Ini-file;: TPhoneForm;: array [0..4] of TEdit;:
DataThread;: boolean;: integer;: array[0..2] of string =('по
Телефону','по
Имени','по
Улице');:
array [0..2] of string =('ByNumTel','ByFamil','ByStreet');_TO_CLIPBOARD = 'Копировать';_FROM_CLIPBOARD
= 'Вставить';IndexOfItem(Item:
string): integer;IniFiles, DBITypes, DBIProcs, Graphics,ShellApi;
{$R
*.dfm}TPhoneForm.FormCreate(Sender: TObject);i, j: integer;:
tMenuItem;.TableName := sDataFile;.Open;;;;;.onMessage :=
Aom;;TPhoneForm.MyPopupHandler(Sender: TObject);Sender is TMenuItem then with
(Sender as TMenuItem) dotag of
..2: begin Table1.IndexName :=
IndexName[(Sender as TMenuItem).tag ];(Sender);;
: Clipboard.AsText :=
DBGrid1.SelectedField.DisplayText;;;;;TPhoneForm.CreatePopupFields;: integer;:
array [0..4] of TMenuItem;: TMenuItem;i := 0 to 4 do //Создание
полей
ввода[i]
:= TEdit.Create(self);[i].Parent := GroupBox1;[i].PopupMenu :=
PopupMenu2;[i].OnContextPopup := MyEditPopup;[i].Tag := i;;i := 0 to 4 do with
PopupMenu1 do//Создание
меню
сортирования[i]
:= TMenuItem.Create(self);i<3 then MyPopupMenuItem[i].Caption :=
SortName[i];[i].Tag := i;[i].OnClick :=
MyPopupHandler;.Items.add(MyPopupMenuItem[i]);;[3].Caption := '-';[4].Caption
:= COPY_TO_CLIPBOARD;[4].ShortCut := ShortCut(Word('C'),
[ssCtrl]);.Items[0].Checked := true;:= TMenuItem.Create(self);.Caption :=
PASTE_FROM_CLIPBOARD;.OnClick := MyPopupHandler2;.Items.add(MenuItem);(nil,
Point(0,0), bool);;TPhoneForm.CalculateEditSize;: integer;: integer;:=13; //Размер
полей
вводаi
:= 0 to 4 do[i].Left := Offset;:= Offset + DbGrid1.Columns[i].width +
8;[i].Width := DBGrid1.Columns[i].width;[i].Top := 24;[i].MaxLength
:=Table1.Fields[i].Size;;;TPhoneForm.UpdateStatusBar;SortMode:
string;.Panels[0].Text := ' Найдено
абонентов:
'+ InttoStr(Table1.RecordCount);:= SortName[0];PopupMenu1.Items[1].Checked then
sortMode := SortName[1];PopupMenu1.Items[2].Checked then sortMode :=
SortName[2];.Panels[1].Text := ' Отсортировано:
'+SortMode;;tPhoneForm.AOM(var Msg: tagMSG; var Handled: Boolean);key : word;:=
false;msg.message = Wm_keydown then// Обробка
клавиш:=
msg.wParam;:= true;key of // Обробка
клавиш_up:
SendMessage(DBGrid1.Handle,wm_keydown, vk_up, 0);_Down:
SendMessage(DBGrid1.Handle,wm_keydown, vk_down, 0);_Prior:
SendMessage(DBGrid1.Handle,wm_keydown, vk_Prior, 0);_Next:
SendMessage(DBGrid1.Handle,wm_keydown, vk_Next, 0);_return: Search.OnClick(Search);_f1:
Application.HelpCommand(HELP_CONTENTS, 0);handled :=
false;;;;TPhoneForm.SearchClick(Sender: TObject);: string;: integer;:= '';i:= 0
to 4 do //with table1 doInputs[i].Text <> ''filters := filters +
'('+Table1.Fields[i].FieldName + '='+ QuotedStr(Inputs[i].Text + '*')+ ')
and';;filters <> '' then:= copy(Filters, 0, Length(filters)-4);.Filter :=
filters;;;TPhoneForm.EraseButtonClick(Sender: TObject);: integer;i := 0 to 4 do
Inputs[i].Text := '';;TPhoneForm.SortMode (Sender: tObject);: integer;i := 0 to
2 do.Items[i].Checked := false;
(sender as TMenuItem).Checked :=
true;;TPhoneForm.FormClose(Sender: TObject; var Action:
TCloseAction);.OnMessage := MainForm.progressAom;;(MainForm.Handle, WM_CLOSE,
0, 0);;TPhoneForm.ReadIni;TIniFile.Create(ExtractFilePath(Application.exename)+sIniFile)
do.IndexName := IndexName[ReadInteger('Defaults','SortIndex', 0)];:=
ReadInteger('Position','left', 100);:= ReadInteger('Position','top', 100);:=
ReadInteger('Position','height', 50);;;IndexOfItem(Item: string): integer;Item
= SortName[1] then result := 1if Item = SortName[2] then result := 2result :=
0;;TPhoneForm.WriteIni;TIniFile.Create(ExtractFilePath(Application.exename)+sIniFile)
do('Defaults','SortIndex', IndexOfItem(Table1.indexName));('Position','left', PhoneForm.left);('Position','top',
PhoneForm.top);('Position','height',
PhoneForm.height);;;TPhoneForm.MInMaxSize(var Message:
TMessage);TwmGetMinMaxInfo(Message) do.ptMaxTrackSize.X :=
PhoneForm.Width;.ptMaxTrackSize.y := Screen.Height- 100;.ptMinTrackSize.X :=
PhoneForm.Width;.ptMinTrackSize.y := 200;;;TPhoneForm.MyPopupHandler2(Sender:
TObject);Sender is TMenuItem thenClipboard.HasFormat(CF_TEXT) then // number of
edit send by popupmenu2.tag[PopupMenu2.Tag].Text :=
Clipboard.AsText;;TPhoneForm.MyEditPopup(Sender: TObject; MousePos: TPoint; var
Handled: Boolean);.Items[0].Enabled := Clipboard.HasFormat(CF_TEXT);Sender is
TEdit then PopupMenu2.Tag := (Sender as TEdit).Tag;TPhoneForm.N20Click(Sender:
TObject);.HelpCommand(HELP_WM_HELP ,0);;TPhoneForm.N13Click(Sender:
TObject);.First;;TPhoneForm.N14Click(Sender:
TObject);.Prior;;TPhoneForm.N15Click(Sender:
TObject);.Next;;TPhoneForm.N16Click(Sender:
TObject);.Last;;TPhoneForm.ExitButtonClick(Sender:
TObject);.Close;.Close;;TPhoneForm.SearchButtonClick(Sender: TObject);.OnClick(Sender);;TPhoneForm.FormDestroy(Sender:
TObject);.HelpCommand(HELP_QUIT,0);
end;.
Заключение
В результате выполнения курсовой работы мною
было создано приложение для работы с базой данных (dBase)
создание алиасов к базе данных.
Список использованной литературы
1.
А. Я. Архангельский Программирование в Delphi 7.2003г.
.
Никита Культин. Основы программирования в Delphi 7. Самоучитель.2002г.
.
Delphi 7. Учебный курс. Бобровский С.