Задание8_Работа_с_БД (1076759), страница 5
Текст из файла (страница 5)
unit peter_;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, DBCtrls, Mask, Db, DBTables,
jpeg; // чтобы можно было выводить jpg иллюстрации
type
TForm1 = class(TForm)
Table1: TTable; // база данных - таблица
DataSource1: TDataSource; // источник данных для полей редактирования-просмотра
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBMemo1: TDBMemo;
Image1: TImage;
DBEdit3: TDBEdit;
DBNavigator1: TDBNavigator;
Label4: TLabel;
procedure Table1AfterScroll(DataSet: TDataSet);
procedure DBEdit3KeyPress(Sender: TObject; var Key: Char);
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
procedure Table1BeforeOpen(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
BmpPath: string; // Путь к файлам иллюстраций. Иллюстрации
// находятся в подкаталоге Data каталога программы.
implementation
{$R *.DFM}
// выводит фотографию в поле Image1
procedure ShowFoto(foto: string);
begin
try
Form1.Image1.Picture.LoadFromFile(BmpPath+foto);
Form1.Image1.Visible:=True;
except
on EFOpenError do
begin
MessageDlg('Файл иллюстрации '+foto+' не найден.', mtInformation, [mbOk], 0);
end;
end;
end;
// переход к другой записи (следующей, предыдущей, первой или последней)
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
if form1.DBEdit3.Visible
then
begin
form1.DBEdit3.Visible := False;
form1.Label4.Visible:=False;
end;
if Form1.DBEdit3.Text <> ''
then ShowFoto(Form1.DBEdit3.Text)
else form1.Image1.Visible:=False;
end;
// нажатие клавиши Enter в поле Фото
procedure TForm1.DBEdit3KeyPress(Sender: TObject; var Key: Char);
begin
if (key = #13) then
if Form1.DBEdit3.Text <> ''
then ShowFoto(Form1.DBEdit3.Text) // показать иллюстрацию
else form1.Image1.Visible:=False;
end;
// щелчок на компоненте Навигатор
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
case Button of
nbInsert: begin
Image1.Visible:=False; // скрыть область вывода иллюстрации
DBEdit3.Visible:=True; // показать поле Фото
Label4.Visible:=True; // показать метку Фото
end;
nbEdit: begin // редактирование записи
DBEdit3.Visible:=True; // показать поле Фото
Label4.Visible:=True; // показать метку Фото
end;
end;
end;
//перед открытием таблицы
procedure TForm1.Table1BeforeOpen(DataSet: TDataSet);
begin
BmpPath:=ExtractFilePath(ParamStr(0))+'data\';
end;
end.
Вызов процедуры вывода фотографии (ShowFoto) во время просмотра базы данных выполняет процедура TForml.Table1AfterScroll, которая обеспечивает обработку события AfterScroll для компонента Table1. Событие AfterScroll происходит всякий раз после перехода к другой (следующей, предыдущей, первой, последней) записи таблицы как результат щелчка пользователя на соответствующей кнопке компонента DBNavigator. Процедура TForm1.TabielAfterScroll анализирует содержимое поля (photo) Form1.DBEdit3.Text и, если оно не пустое, что свидетельствует о наличии ссылки на файл фотографии, выводит иллюстрацию.
При просмотре базы данных поле имени файла иллюстрации (DBEdit3) и его заголовок (Label4) на форме не отображаются. Если пользователь нажимает одну из кнопок компонента DBNavigator, то как результат обработки события OnClick вызывается процедура TForml.DBNavigatorlClick, которая при щелчке кнопки Добавить или Редактировать делает доступным поле DBEdit3, тем самым позволяя пользователю ввести или изменить имя файла иллюстрации.
Процедура TForm1.DBEdit3KeyPress обрабатывает событие OnKeyPress для компонента DBEdit3. Если пользователь ввел в поле Edit3 (photo) имя файла иллюстрации и нажал клавишу <Enter> (ее код равен 13), то процедура TFormi.DBEdit3KeyPress выводит иллюстрацию путем вызова процедуры ShowFoto.
4.2.2. Режим таблицы
Программа работы с базой данных "Архитектурные памятники Санкт-Петербурга" выводит информацию в режиме формы, в каждый момент времени пользователь может видеть только одну запись. Такой режим работы с базой данных не всегда удобен. Если необходимо видеть одновременно несколько записей базы данных, то нужно обеспечить просмотр данных в режиме таблицы.
Процесс создания приложения, обеспечивающего просмотр базы данных в режиме таблицы, рассмотрим на примере программы работы с базой данных "Школа".
Пусть база данных "Школа" (псевдоним Школа), представляет собой таблицу, которая находится в файле School.db. Записи таблицы school состоят из полей: Name (Имя), Fam (Фамилия), class (Класс), Adr (Адрес) и n (Личный номер). Поля Name, Fam, Class и Adr являются полями символьного типа (тип А), а поле n — числовое, с автоувеличением.
Примечание
Псевдоним Школа следует создать при помощи BDE Administrator, а таблицу (файл school.db) — при помощи Database Desktop.
Сначала в форму разрабатываемого приложения нужно добавить компоненты Table и DataSource, которые обеспечивают доступ к файлу данных, и установить значения их свойств (табл. 14).
Таблица 17.14. Значения свойств компонентовTable1 и DataSource1
Свойство Значение
T
able1.DatabaseName Школа
Table1.TableName schoo1.db
Table1.Active True
DataSource1.Dataset Table1
Д
ля обеспечения просмотра и редактирования данных в режиме таблицы в форму приложения надо добавить компонент DBGrid, значок которого находится на вкладке Data Controls (рис. 20). Вид формы разрабатываемого приложения после добавления компонента DBGrid приведен на рис. 21. Рис. 20. Значок компонента DBGrid на вкладке Data Controls
Рис. 21. Форма приложения после добавления компонента DBGrid
Компонент DBGrid обеспечивает представление базы данных в виде таблицы. Свойства компонента DBGridi определяют вид таблицы и действия, которые могут быть выполнены над данными во время работы программы. В табл.15 перечислены некоторые свойства компонента DBGrid.
Таблица 15. Свойства компонента DBGrid
Свойство Определяет
N
ame Имя компонента
DataSource Источник отображаемых в таблице данных
Columns Отображаемую в таблице информацию
Options . dgTitles Разрешает вывод строки заголовка столбцов
Options .dglndicator Разрешает вывод колонки индикатора. Во время
работы с базой данных текущая запись помечается в колонке
индикатора треугольником, новая запись — звездочкой,
редактируемая — специальным значком
Options.dgColumnResize Разрешает менять во время работы программы ширину колонок таблицы
Options.dgColLines Разрешает выводить линии, разделяющие колонки таблицы
Options .dgRowLines Разрешает выводить линии, разделяющие строки таблицы
Рис. 22. Редактор колонок
Д
ля того чтобы задать, какая информация будет отображена в таблице во время работы программы, нужно сначала определить источник данных для таблицы (установить значения свойства DataSource), затем — установить значения уточняющих параметров свойства columns. Значение свойства DataSource задается обычным образом, то есть в окне Object Inspector. Чтобы установить значение свойства Columns, надо в окне Object Inspector выбрать это свойство и щелкнуть на кнопке с тремя точками. В результате открывается окно редактора колонок (рис. 22).
Для того чтобы в компонент DBGrid добавить колонку, обеспечивающую просмотр содержимого поля записи файла данных, необходимо нажать кнопку Add New, находящуюся на панели инструментов в верхней части окна (это единственная доступная после запуска
редактора кнопка), выделить добавленный элемент и, используя Object Inspector, установить значения свойств этой колонки (табл.16). Свойство Columns компонента DBGrid представляет собой массив компонентов типа TColumn. Каждой колонке соответствует элемент массива. Устанавливая значения свойств компонентов Column, программист задает вид колонок компонента DBGrid, тем самым определяет вид всей таблицы.
Таблица 16. Свойства компонента column
Свойство Определяет
F
ieldName Поле записи, содержимое которого выводится в колонке
width Ширину колонки в пикселах
Font Шрифт, используемый для вывода текста в ячейках колонки
Color Цвет фона колонки
Alignment Способ выравнивания текста в ячейках колонки. Текст может
быть выровнен по левому краю (taLeftJustify), по центру (taCenter)
или по правому краю (taRightJustify)
Title.Caption Заголовок колонки. Значением по умолчанию является имя поля записи
Title.Alignment Способ выравнивания заголовка колонки. Заголовок может быть выровнен
по левому краю (taLeftJustify), по центру (taCenter) или по правому краю (taRightJustify)
Title. Color Цвет фона заголовка колонки
Title. Font Шрифт заголовка колонки
В
простейшем случае для каждой колонки достаточно установить значение свойства FieldName, которое определяет имя поля записи, содержимое которого будет отображаться в колонке, а также значение свойства Title.Caption, определяющего заголовок колонки. В табл.17 приведены значения свойств Columns компонента DBGridi.
Таблица 17. Значения свойств компонента DBGridi
Компонент FieldName Title.Caption
D
BGridi.Columns[0] Fam Фамилия
DBGridi.Columns[1] Name Имя
DBGridl.Columns[2] Class Класс
DBGridl.Columns[3] Adr Адрес, телефон
П
оследнее, что надо сделать — добавить к форме компонент DBNavigator, настроив его на работу с таблицей-источником данных (свойству Datasource нужно присвоить значение Table1).















