Разработка баз данных в среде программирования delphi использованием bde (borland database engine)

Русификация надписей над компонентами и на колонках сетки

Два раза щелкните на компоненте Table1. Наряду с этим покажется редактор перечня полей таблицы (рис. 18).

Разработка баз данных в среде программирования delphi использованием bde (borland database engine)
En Рус
Category CommonName SpeciesName LenSm LenIn Graphic Notes RusName Weight Категория Наименование Вид Протяженность,см Протяженность, дюйм Картина Описание По русски Вес
Рис. 18. Редактирование свойства DisplayLabel полей таблицы Рис. 19. Соответствие англо- и русскоязычных надписей

Замените значения свойства DisplayLabel каждого столбца на русскоязычное в соответствии с таблицей, продемонстрированной на рис. 19. Одновременно с этим замените значение свойстваCaption каждой метки, расположенной над соответствующим компонентом отдельного поля таблицы. Сейчас все надписи будут отображаться по-русски (рис. 20).

Разработка баз данных в среде программирования delphi использованием bde (borland database engine)

Рис. 20. Вид формы по окончании русификации надписей

Центрирование надписей на колонках сетки

Как видно из рис. 20 заглавия колонок сетки прижаты к левому краю, что нельзя считать успешным. Лучше расположить их по центру.

Два раза щелкните на сетке DBGrid1. Наряду с этим покажется редактор колонок сетки. Добавьте в него все поля связанной с сеткой таблицы. Удалите ненужные поля, после этого для каждого оставшегося поля измените значение свойства Title.Alighmentна taCenter (рис. 21).

Разработка баз данных в среде программирования delphi использованием bde (borland database engine)

Рис. 21. Центрирование надписей на заголовках колонок сетки

Сейчас заголовки колонок будут размешаться по центру (рис. 22).

Разработка баз данных в среде программирования delphi использованием bde (borland database engine)

Рис. 22. Вид сетки по окончании центрирования надписей на заголовках колонок сетки

редактирование и Вычисление данных

Редактирование текстовых и числовых данных

Покинем до тех пор пока в стороне вопрос о замене картины для текущей записи таблицы. Разглядим изюминке замены текстовых и числовых значений. Такая замена возможно совершена вводом с клавиатуры в желаемую ячейку сетки либо в строчок ввода личного компонента для определенного поля. Обратите внимание, что в момент начала трансформации значения навигатор DBNavigator1 реагирует на это активацией кнопки (сохранить трансформации). По окончании внесения трансформаций дабы зафиксировать их в таблице возможно щелкнуть на данной кнопке или передвинуть указатель на другую запись. Обратите кроме этого внимание, что значения поля LenIn в сетке исправить не удается. В личном же поле это сделать возможно (на него не распространяется запрет, сделанный в сетке). Но такое редактирование не позволит результата потому, что в момент сохранения трансформаций процедураBeforePost все-равно пересчитает значение этого поля по-своему.

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

Автономизация приложения

Об открытии БД

Не нужно открывать таблицу в режиме DesignTime, другими словами при написании программы в Delphi (ее возможно временно открывать в том месте только при отладке программы). В готовой программе таблица должна быть закрыта. Таблицу необходимо открывать программно в трудящейся программе, другими словами в режиме RunTime. Причем запускать программу направляться не изDelphi, а при помощи ярлыка программы либо в проводнике двойным щелчком на файле Biolife2.exe, другими словами кроме этого, как запускаются и всякие другие программы.

Отечественное приложение владеет одним значительным недочётом — оно способно трудиться только на том компьютере, где имеется БД с алиасом DbBiolife2. Другими словами в случае, если скопировать директорию Biolife2 на флешку и с нее запустить программу на втором компьютере, то программа не отыщет БД DbBiolife2, а следовательно, откажется трудиться. Другими словами отечественная программа до тех пор пока абсолютно зависима от БД DbBiolife2. на данный момент мы сделаем программу свободной, независимой.

Мысль автономизации программы содержится в том, что папка db с БД находится в той же папке, что и программа Biolife2.exe. Следовательно, в случае, если выяснить папку, в которой находится эта программа, то легко выяснить и папку с БД. Составим функцию логического типа, которая возвратит true, в случае, если ей удалось отыскать папку БД, файл таблицы и открыть её.

Нельзя исключать кроме этого, что на компьютере может отсутствовать BDE (Borland Database Engine) — движок работы с БД типа Paradox. В случае, если на компьютере установлена Delphi, то на нем установлен и BDE (он устанавливается вместе с Delphi). В случае, если Delphi на компьютере отсутствует, то для работы отечественной программы BDE возможно установить раздельно. Исходя из этого не считая проверки наличия БД, нужно еще и контролировать наличие BDE.

Наличие BDE возможно проверить функцией

function BDEInstalled: Boolean;
begin
Result:= (dbiInit(nil) = 0);
if not Result then ShowMessage(‘BDE не установлен.’);
end;

Текст функции TableActivate с комментариями приведен ниже

function TableActivate: boolean;
var ExeDir, DbDir, DbFile: String; // переменные для папки приложения, папки БД и файла biolifes.db
begin
Result:= false; // начало поиска
if BDEInstalled then // в случае, если BDE установлен, то
begin
ExeDirt:= ExtractFilePath(Application.ExeName); // папка, где лежит приложение
DbDir:= ExeDir+’db\’; // папка с БД
DbFile:= DbDir+Form1.Table1.TableName; // полный путь к файлу БД biolifes.db
if FileExists(DbFile) then// в случае, если файл с таблицей отыскан, то
begin
Form1.не1.DataBaseName:= DbDir; // имя БД делаем равным адресу папки БД
Form1.Table1.Open; // открываем таблицу Table1, которая лежит на форме Form1, потому, что файл таблицы отыскан
Result:= true; // таблица отыскана и открыта
end;
end;
end;

Потом нужно решить вопрос о том, в то время, когда необходимо обращаться к данной функции. оптимальнее это сделать тогда, в то время, когда по окончании запуска программы форма Form1 делается активной. Для этого создадим для формы Form1 событие OnActivate:

procedure TForm1.FormActivate(Sender: TObject);
begin
if not TableActivate then ShowMessage(‘Не удалось открыть таблицу БД.’);
end;

Сейчас при активации формы в случае, если БД не удалось открыть, будет выдано соответствующее сообщение. В случае, если же таблица отыскана, то она без дополнительных сообщений откроется и готовься к работе.

О закрытии приложения

Потому, что в начале собственной работы программа открывает таблицу БД Table1, то при завершении работы программа обязана эту таблицу закрыть. направляться заявить, что трансформации, каковые происходят с таблицей на протяжении работы программы, находятся в оперативной памяти, другими словами на диске в файле таблицы находятся ветхие эти, тогда как в оперативной памяти в таблице смогут случиться трансформации. Исходя из этого иногда эти трансформации направляться фиксировать в файле biolifes.db. Возможно это делать всегда, в то время, когда срабатывает событие AfterPost (по окончании фиксации трансформаций) таблицы Table1, а возможно и один раз, в то время, когда происходит выход из программы. Сброс данных из таблицы в файл производите способом FlushBuffers. Следовательно, перед закрытием таблицы, нужно скинуть эти из Table1 в файл biolifes.db,в противном случае они будут утрачены.

На этом основании возможно составить код программы обработки таблицы при закрытии формы, в то время, когда срабатывает событие формы OnClose:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Table1.Active then // в случае, если таблица открыта, то
begin
Table1.FlushBuffers; // сброс трансформаций из таблицы в файл biolifes.db
Table1.Close; // закрытие таблицы
end;
end;

Сервисные улучшения

Implementation

var OldGridWinProc: TWndMethod;

procedure TForm1.FormCreate(Sender: TObject);
begin

OldGridWinProc := DBGrid1.WindowProc;
DBGrid1.WindowProc := NewGridWinProc;

end;

procedure TForm1.NewGridWinProc(var Msg: TMessage);
begin
if Msg.Msg = WM_MOUSEWHEEL then
begin
if SmallInt(HiWord(Msg.wParam)) 0 then DBGrid1.DataSource.DataSet.Prior
else DBGrid1.DataSource.DataSet.Next;
Msg.Result := 1;
end else OldGridWinProc(Msg);
end;

Отчеты в Delphi

Одним из ответственных разделов Delphi, каковые относятся к работе с базами данных, являются разработке и средства создания отчетов. Отчеты являются печатные документы, приобретаемые в следствии исполнения запросов к БД.

Для упрощения работы по созданию отчетов во всех предположениях Delphi имеются специальные программные средства — генераторы отчетов. В первых предположениях Delphi это былReportSmith, после этого, с Delphi 3 по Delphi 6 — QuickReport, а начиная с Delphi 7 и заканчивая Delphi 2006 — Rave Reports.

ПРИМЕЧАНИЕ. В поставку Delphi 7 так же входит и QuickReport, но по умолчанию данный инструментарий отсутствует на панели компонентов. Дабы воспользоватьсяQuickReport в данной версии Delphi, направляться открыть Component ‘ Install Packages, надавить кнопку Add и выбрать файл dclqrt70.bpl в подкаталоге …Delphi\Bin.

Генераторы ReportSmith и Rave Reports являются отдельные приложения, при помощи которых возможно создавать отчеты, в то время, как QuickReports — это наборVCL-компонентов, каковые помещают конкретно на стандартную форму Delphi.

Вторым серьёзным средством составления отчетов есть программные продукты для вывода отчетов в окно программы Микрософт Excel. Во многих случаях это самый предпочтительный метод автоматизации создания отчетов.

язык и Запросы SQL

На практике очень редко создают отчет по все таблице БД. В большинстве случаев требуется не все, а только интересующие записи, каковые направляться отобрать из таблицы на базе запроса, записанного на особом языке. Для этих целей применяют язык SQL (Structured Query Language — язык структурированных запросов). При помощи команд, записанных на этом языке, делают запрос, результаты которого помещаются в особый компонент Query, по виду напоминающий Table, что по окончании создания отчета будет содержать требуемые записи. Эти записи потом смогут быть выведены в отчет.

Язык SQL рекомендован для управления запросами данных в реляционных БД. В ходе работы с БД значительно чаще применяют четыре главных команд — SELECT (выбрать),INSERT (засунуть), UPADTE (обновить) и DELETE (удалить). Это значит, что при помощи SQL возможно не только отбирать эти, но и вносить трансформации в таблицы БД. В отечественных упражнениях мы будем применять SQL лишь для запросов на отбор записей из всей таблицы данных.

Interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, QRCtrls, QuickRpt, ExtCtrls, DB, DBTables, StdCtrls, Grids,
DBGrids, KdnExcel, KdnServ;

type
TfQueryRep = class(TForm)

QR: TQuickRep;
HeaderBand: TQRBand;
DetailBand: TQRBand;
TitleBand1: TQRBand;
QRLabel3: TQRLabel;
PageFooterBand1: TQRBand;
QRSysData1: TQRSysData;
QRSysData2: TQRSysData;
bDoQuery: TButton;
MemoSQL: TMemo;
QuRep: TQuery;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
bDoReport: TButton;
bDestroyDynamicComponents: TButton;
bCreateDynamicComponents: TButton;
Label1: TLabel;
Label2: TLabel;
bDoDiynamicReport: TButton;
bOutToExcel: TButton;
TitleFont: TLabel;
DataFont: TLabel;
HeaderFont: TLabel;
Framed: TCheckBox;
OutDataTime: TCheckBox;

procedure bDoQueryClick(Sender: TObject);
procedure bCreateDynamicComponentsClick(Sender: TObject);
procedure bDestroyDynamicComponentsClick(Sender: TObject);
procedure bDoReportClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure bDoDiynamicReportClick(Sender: TObject);
procedure bOutToExcelClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
fQueryRep: TfQueryRep;
L: array of TQRLabel; // массив надписей на колонках полей
T: array of TQRDBText; // массив значения по по полям таблицы

Implementation

{$R *.dfm}

procedure DoRepSQL;
// процедура исполнения запроса
begin
With fQueryRep do
begin
QuRep.Close;
QuRep.Prepare;
QuRep.SQL.Assign(MemoSQL.Lines);
QuRep.ExecSQL;
QuRep.Open;
end;
end;

procedure TfQueryRep.bDoQueryClick(Sender: TObject);
begin
// процесс исполнения отчета
DoRepSQL;
end;

procedure DestroyReportComponents;
// уничтожение динамических массивов
// для компонентов отчета
var n,i: Integer;
begin
n:= Length(L);
if n 0 then
for i:= 0 to n-1 do
begin
L[i].Free;
T[i].Free;
end;
L:=Nil; T:= Nil;
end;

procedure CreateReportComponents;
// создание динамических компонентов отчета
var n, i: Integer;
begin
With fQueryRep do
if QuRep.Active then // в случае, если таблица по выполненному запросу открыта, то
begin
n:= QuRep.FieldCount; // число полей в взятом запросе QuRep
SetLength(L,n); // выделим память в массиве заголовков под столько же элементов
SetLength(T,n); // выделим память в массиве данных под столько же элементов
for i:= 0 to n-1 do // проход по каждому полю
begin
L[i]:= TQRLabel.Create(HeaderBand); // создаем элемент заголовка конкретного поля с номером i
L[i].Parent:= HeaderBand; // назначаем ему родителя составную часть заголовков HeaderBand
L[i].Left:= 12+i*140; // первый заголовок будет с отступом 12 пикселов, остальные через 140 от соседнего
L[i].Caption:= QuRep.Fields[i].FieldName; // надпись на заголовке будет совпадать с именем поля

T[i]:= TQRDBText.Create(DetailBand); // создаем элемент данных конкретного поля с номером i
T[i].Parent:= DetailBand; // его родителем будет составная часть данных DetailBand
T[i].Left:= L[i].Left; // отступы кроме этого, как для заголовков
T[i].DataSet:= QR.DataSet; // эти те же, что и для компонента отчета QR
T[i].DataField:= QuRep.Fields[i].FieldName; // эти по колонке брать из соответствующего поля таблицы
end;
end;
end;

procedure TfQueryRep.bCreateDynamicComponentsClick(Sender: TObject);
begin
CreateReportComponents;
end;

procedure TfQueryRep.bDoReportClick(Sender: TObject);
begin
QR.Preview;
end;

procedure TfQueryRep.bDestroyDynamicComponentsClick(Sender: TObject);
begin
DestroyReportComponents;
end;

procedure TfQueryRep.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DestroyReportComponents;
end;

procedure TfQueryRep.bDoDiynamicReportClick(Sender: TObject);
begin
DoRepSQL;
if QuRep.Active then
begin
DestroyReportComponents;
CreateReportComponents;
QR.Preview;
DestroyReportComponents;
end;
end;

procedure TfQueryRep.bOutToExcelClick(Sender: TObject);
begin
// в случае, если Excel открыт, то закрываем, в противном случае открываем его и выводим отчет
if ExApp Nil then ExcelClose(0) else
// вывод таблицы в Excel
OutReportToExcel(‘Пример отчета по запросу’,
QuRep, // таблица для вывода в Excel
TitleFont.Font, // шрифт заголовка
HeaderFont.Font, // шрифт заголовков стобцов
DataFont.Font, // шрифт данных
Framed.Checked, // заключать данные в рамки
OutDataTime.Checked // выводить время создания отчета
);
не;

end.

unit QueryRep;

Interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, QRCtrls, QuickRpt, ExtCtrls, DB, DBTables, StdCtrls, Grids,
DBGrids, KdnExcel, KdnServ;

type
TfQueryRep = class(TForm)

QR: TQuickRep;
HeaderBand: TQRBand;
DetailBand: TQRBand;
TitleBand1: TQRBand;
QRLabel3: TQRLabel;
PageFooterBand1: TQRBand;
QRSysData1: TQRSysData;
QRSysData2: TQRSysData;
bDoQuery: TButton;
MemoSQL: TMemo;
QuRep: TQuery;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
bDoReport: TButton;
bDestroyDynamicComponents: TButton;
bCreateDynamicComponents: TButton;
Label1: TLabel;
Label2: TLabel;
bDoDiynamicReport: TButton;
bOutToExcel: TButton;
TitleFont: TLabel;
DataFont: TLabel;
HeaderFont: TLabel;
Framed: TCheckBox;
OutDataTime: TCheckBox;

procedure bDoQueryClick(Sender: TObject);
procedure bCreateDynamicComponentsClick(Sender: TObject);
procedure bDestroyDynamicComponentsClick(Sender: TObject);
procedure bDoReportClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure bDoDiynamicReportClick(Sender: TObject);
procedure bOutToExcelClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
fQueryRep: TfQueryRep;
L: array of TQRLabel; // массив надписей на колонках полей
T: array of TQRDBText; // массив значения по по полям таблицы

Implementation

{$R *.dfm}

procedure DoRepSQL;
// процедура исполнения запроса
begin
With fQueryRep do
begin
QuRep.Close;
QuRep.Prepare;
QuRep.SQL.Assign(MemoSQL.Lines);
QuRep.ExecSQL;
QuRep.Open;
end;
end;

procedure TfQueryRep.bDoQueryClick(Sender: TObject);
begin
// процесс исполнения отчета
DoRepSQL;
end;

procedure DestroyReportComponents;
// уничтожение динамических массивов
// для компонентов отчета
var n,i: Integer;
begin
n:= Length(L);
if n 0 then
for i:= 0 to n-1 do
begin
L[i].Free;
T[i].Free;
end;
L:=Nil; T:= Nil;
end;

procedure CreateReportComponents;
// создание динамических компонентов отчета
var n, i: Integer;
begin
не меньше do
if QuRep.Active then // в случае, если таблица по выполненному запросу открыта, то
begin
n:= QuRep.FieldCount; // число полей в взятом запросе QuRep
SetLength(L,n); // выделим память в массиве заголовков под столько же элементов
SetLength(T,n); // выделим память в массиве данных под столько же элементов
for i:= 0 to n-1 do // проход по каждому полю
begin
L[i]:= TQRLabel.Create(HeaderBand); // создаем элемент заголовка конкретного поля с номером i
L[i].Parent:= HeaderBand; // назначаем ему родителя составную часть заголовков HeaderBand
L[i].Left:= 12+i*140; // первый заголовок будет с отступом 12 пикселов, остальные через 140 от соседнего
L[i].Caption:= QuRep.Fields[i].FieldName; // надпись на заголовке будет совпадать с именем поля

T[i]:= TQRDBText.Create(DetailBand); // создаем элемент данных конкретного поля с номером i
T[i].Parent:= DetailBand; // его родителем будет составная часть данных DetailBand
T[i].Left:= L[i].Left; // отступы кроме этого, как для заголовков
T[i].DataSet:= QR.DataSet; // эти те же, что и для компонента отчета QR
T[i].DataField:= QuRep.Fields[i].FieldName; // эти по колонке брать из соответствующего поля таблицы
end;
end;
end;

procedure TfQueryRep.bCreateDynamicComponentsClick(Sender: TObject);
begin
CreateReportComponents;
end;

procedure TfQueryRep.bDoReportClick(Sender: TObject);
begin
QR.Preview;
end;

procedure TfQueryRep.bDestroyDynamicComponentsClick(Sender: TObject);
begin
DestroyReportComponents;
end;

procedure TfQueryRep.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DestroyReportComponents;
end;

procedure TfQueryRep.bDoDiynamicReportClick(Sender: TObject);
begin
DoRepSQL;
if QuRep.Active then
begin
DestroyReportComponents;
CreateReportComponents;
QR.Preview;
DestroyReportComponents;
end;
end;

procedure TfQueryRep.bOutToExcelClick(Sender: TObject);
begin
// в случае, если Excel открыт, то закрываем, в противном случае открываем его и выводим отчет
if ExApp Nil then ExcelClose(0) else
// вывод таблицы в Excel
OutReportToExcel(‘Пример отчета по запросу’,
QuRep, // таблица для вывода в Excel
TitleFont.Font, // шрифт заголовка
HeaderFont.Font, // шрифт заголовков стобцов
DataFont.Font, // шрифт данных
Framed.Checked, // заключать данные в рамки
OutDataTime.Checked // выводить время создания отчета
);
end;

end.

Разработка баз данных в среде программирования Delphi применением BDE (Borland Database Engine)

Ещё одним средством разработки баз данных из множества вторых (Word, Excel и др.) есть универсальная среда программирования Delphi. Разработка баз данных и совокупностей управления базами данных (СУБД)- одна из главных областей применения Delphi. К преимуществом данной среды направляться отнести наличие фактически исчерпывающего комплекта средств, при помощи которых смогут быть решены фактически каждые задачи по обработке и ведению баз данных, каковые далеко не всегда могут быть решены при помощи СУБД Микрософт Access.

Различают локальные (персональные) и сетевые (многопользовательские, клиент-серверные) СУБД.

самые известными локальными СУБД являются Access, FoxPro, Paradoxи DBASE, а сетевыми — DB/2, Oracle, MS SQL Server и Interbase. Главное отличие сетевых СУБД и БД пребывает в том, что они смогут трудиться с удаленными БД, тогда как локальные — лишь с теми, каковые находятся на определенном компьютере. Среда Delphi возможно использована для как локальных, так и сетевых СУБД и БД.

1. Реляционные базы данных

В подавляющем большинстве современные БД относятся к числу реляционных баз данных, другими словами таких БД, в которых между всеми либо частью таблиц установлены определенные отношения. Концепция реляционных БД создана в начале 70-х годов прошлого компанией IBM.
Особенности реляционных БД сводятся к следующим главным моментам:

  • все сведенья сохраняются в таблицах, складывающихся из столбцов и строк;
  • связи между данными в разных таблицах организованы по совпадению каких-либо главных значений, благодаря которым устанавливаются определенные отношения между такими таблицами;
  • любой столбец имеет собственное имя и содержит эти определенного типа;
  • типы значений и порядок столбцов определяются в момент создания таблицы, наряду с этим любая таблица должна иметь по крайней мере один столбец;
  • строки таблиц не упорядочены, но они смогут быть упорядочены программно при обработке запросов;
  • запросы к реляционным БД возвращают итог в виде таблицы, которая со своей стороны возможно использована для другого запроса.

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

Разглядим ведения и основные средства создания баз данных в среде Delphi на конкретных примерах.

2. СУБД и БД с одной таблицей

Как пример разглядим имеющуюся в среде Delphi демонстрационную БД с одной таблицей.
Запустите Delphi. В случае, если в среде открыт проект, то закройте его командой Файл / Закрыть все, после этого создайте новое приложение командой Файл / Создать / Приложение. Вид нового приложения продемонстрирован на рис. 1.

Разработка баз данных в среде программирования delphi использованием bde (borland database engine)

Рис. 1. Новое приложение в среде Delphi

Для сохранения приложения надавите кнопку Сохранить все. При сохранении заведите на каком-нибудь диске (лучше D либо на флешке) новую папку FishProject, после этого сохраните модуль Unit1.pas под новым именем FishForm.pasи сам проект под именем Fish.dpr.

Потом для формы Form1 измените значение ее свойства Caption на Fish Fact. Назначьте для ширины (Width) и высоты (Height) формы значения 600 и 480, соответственно.

Положите на форму 4 панели (компонент Panel на закладке Standard) и очистите значение их свойства Caption. Для нижней панели свойству Alignназначьте значение alBottom(занять дно по всей ширине клиентской части родителя, в этом случае формы, на которой лежит эта панель). Наряду с этим форма обязана принять вид, что продемонстрирован на рис. 2.

Разработка баз данных в среде программирования delphi использованием bde (borland database engine)

Рис. 2. Новое приложение в среде Delphi

Поэкспериментируйте со значениями особенностей BevelInnerи BevelOuter этих панелей и подберите требуемую их окантовку.

Потом положите на соответствующие панели следующие компоненты:

Компоненты на панелях
№ компонента Имя (Name) Тип Закладка Комментарий Компонент базы данных
DBImage1 DBImage Data Controls Компонент для показа картинок из таблицы БД Да
DBLabel1 DBText Data Controls Метка (нередактируемый текст) Да
Label1 Label Standard Метка Нет
DBLabel2 DBText Data Controls Метка Да
DBMemo1 DBMemo Data Controls Многострочный текст описания рыбы Да
DBGrid1 DBGrid Data Controls Сетка для отображения записей таблицы Да
Table1: Table BDE Таблица БД Да
DataSource1 DataSource Data Access Источник данных Да
BitBtn1 BitBtn Additional Кнопка Нет

Вид этих компонентов приведен на рис. 3.

Разработка баз данных в среде программирования delphi использованием bde (borland database engine)

Рис. 3. Форма с компонентами на панелях

Измените свойство Colorкомпонентов DBMemo1, обеспечив требуемый цвет подложки. Свойство Caption компонента Label1 на About the. Цвет шрифта компонентов DBLabel1и DBLabel2 обеспечивается свойством Font.

Сейчас привяжете компонентTable1 к базе данных и нужной нам таблице из данной БД. Щелкните на нем, после этого через Инспектор объектовназначьте его свойству DataBaseзначение DBDEMOS (это имя демонстрационной базы данных, которая устанавливается вместе с Delphi). Выберите для свойства TableName значение BIOLIFE (файл BIOLIFE.dbхранит таблицу базы данных по описанию рыб).

Компонент DataSource1 есть источником данных. Его свойствоDataSetпредставляет собой ссылку на комплект данных. В нашем случае таким комплектом будет таблица Table1(установите для источника его свойство DataSetв значение Table1).

Привяжем сетку DbGrid1к источнику данных для отображения в ней содержимого таблицы Table1 (другими словами записей из файла BIOLIFE.db). Для этого значение свойстваDataSource сетки выберите равным DataSource1. Разработка баз данных в среде программирования delphi использованием bde (borland database engine)

Дабы на рисунке отображалось изображение рыбы, информация о которой содержится в текущей записи таблицы БД, компоненту DBImage1 направляться назначить имя того поля таблицы, в котором хранится это изображение. Таким есть поле с именем Graphic(это значение направляться назначить свойствуDataFieldкомпонента DBImage1 как продемонстрировано на рисунке справа).

Подобным образом назначьте свойству DataField остальных компонентов БД значения в соответствии с нижеследующей таблицей:

Компонент DBLabel1 DBLabel2 DBMemo1
Значение свойства DataField Common_Name Common_Name Notes

Разработка баз данных в среде программирования delphi использованием bde (borland database engine) Потом два раза щелкните на компоненте Table1. При это откроется маленькое окно редактирования особенностей полей таблицы. Через контекстное меню выполните команду Добавить все поля. Удалите из перечня главное поле Species No. Это будет означать что его не требуется применять в отечественном приложении. Для поля Length_In установите свойство DisplayFormat в 0.00, как продемонстрировано на рисунке справа. Закройте это окно.

Для кнопки назначьте её свойству Kindзначение bkClose. Это значит, что в запущенной программе при щелчке по ней случится закрытие формы. Потому, что вторых форм у нас не будет, то это приведет и к закрытию всего приложения, т. е. к выходу из программы. Помимо этого, свойству Caption кнопки назначьте значение Exit(выход). Тут значок показывает на то, что букву x при отображении надписи на кнопке, направляться выделить (см. рис. 2.3). Это со своей стороны свидетельствует, что клавиша x будет тёплой для закрытия формы, другими словами нажатие клавиши будет дублировать щелчок на данной кнопке.

Выделите компонент Table1 щелчком мыши. Измените его свойство Active на true (открыть таблицу). Наряду с этим форма примет вид,продемонстрированный на рис. 4.

Разработка баз данных в среде программирования delphi использованием bde (borland database engine)

Рис. 4. Форма с активными компонентами

Запустите приложение при помощи кнопки F9. Выберите в сетке желаемую запись (строчок) и поле (столбец) мышью либо клавишами вертикального перемещения указателя. На рис. 5 таковой указатель стоит на записи со значением поля Category = Barracuda в клетке поля Length (cm).

Разработка баз данных в среде программирования delphi использованием bde (borland database engine)

Рис. 5. Окно активной программы

Слева вверху продемонстрировано изображение данной рыбы, справа — её многострочное описание. Помимо этого из таблицы видно, что средняя протяженность данной рыбы равняется 150 см либо 59,06 дюймов (привычная для Северной Америки мера длины), которая относится в виду Sphyraena barracuda. Видно кроме этого, что надпись на компоненте Labe1 (About the) остается неизменной, а на компонентах DBLabel1и DBLabel2 она изменяется в зависимости от выбранной записи таблицы БД. Для данной записи значением поля Common_Name (неспециализированное наименование) являетсяGreat Barracuda (огромная барракуда).

1.Borland Database Engine


Интересные записи:

Понравилась статья? Поделиться с друзьями: