Приложение для работы с базой данных (dBase)

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

?о) подхода, так и с использованием 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. Постановка задачи

 

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

 

3. Практическая часть: Приложение телефонный справочник ПГТУ

 

Что бы базу данных можно было переносить с компьютера на другой компьютер программа должна сама создавать алиасы. Так как 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;

(FStartTime + 0) // 1000PostMessage(MainFOrm.Handle, MM_OKSTART, 1, 0);;TMainForm.EndThread(var Message: TMessage);.Visible := true;:= ;.Visible := false;.Visible := false;.Visible := false;:= true;">// 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 Поиск в базе данных по номеру телефона

 

База данных состоит из шести полей : номер телефона, ФИО, улица, номер дома, номер квартиры, категория.

Что соответствует полям в базе данных: номер телефона - NUMTEL, ФИО - FAMIL, улиуа - STREET, номер дома - HOUSE, номер квартиры - KVART, категория - PR09.

Ниже приведен листинг программы (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);;

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:=0to4doInputs[i].Text:=;;TPhoneForm.SortMode(Sender:tObject);:integer;i:=0to2do.Items[i].Checked:=false;">: 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 :