Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



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

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

En Рус
Category CommonName SpeciesName LenSm LenIn Graphic Notes RusName Weight Категория Название Вид Длина, см Длина, дюйм Картинка Описание По русски Вес

 

Рис. 18. Редактирование свойства DisplayLabel полей таблицы Рис. 19. Соответствие англо- и русскоязычных надписей

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

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

 

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

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

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

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

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

Рис. 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.Table1.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.

Другим важным средством составления отчетов является программные продукты для вывода отчетов в окно программы Microsoft 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;

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
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;

end.

 

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

 

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

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

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

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

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

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

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

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

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

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

Рис. 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.

Рис. 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.

Рис. 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.

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

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

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

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

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

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

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

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

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

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


Поделиться:



Популярное:

  1. B2 (базовый уровень, время – 4 мин)
  2. I ЭТАП: ОБСЛЕДОВАНИЯ (СБОР ДАННЫХ)
  3. III. Вид работы: «Использование информационной базы данных»
  4. IV. Анализ и обработка данных.
  5. Авторское право - правовое положение авторов и созданных их творческим трудом произведений литературы, науки и искусства.
  6. Адресная, данных, управления
  7. Алгоритм решения задач динамического программирования.
  8. Анализ и интерпретация данных экспериментально-психологического исследования
  9. Анализ исходных данных и разработка математической модели
  10. Анализ экспериментальных данных
  11. Анализируя опыт мирового развития, можно выделить пять наиболее типичных моделей капиталистической экономики, базирующейся на многообразии форм собственности.
  12. База восстания расширилась, тыл для наступления вверх по Волге был обеспечен. Можно было приступать к решению второй стратегической задачи.


Последнее изменение этой страницы: 2016-06-04; Просмотров: 991; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.083 с.)
Главная | Случайная страница | Обратная связь