Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Таблицы формата dBase и Paradox

Поиск

Базы данных в Delphi

ПРИЛОЖЕНИЕ К УЧЕБНОМУ ПОСОБИЮ «BORLAND DELPHI 5.0»

 

Автор: Сазонова Марина Анатольевна

 

Улан-Удэ


Оглавление

Глава I. Базы данных в Delphi 4

1.1. Ведение в базы данных. 4

1.2. Таблицы баз данных. 6

1.3. Таблицы формата dBase и Paradox. 7

1.4. Практическая работа. 11

1.5. Самостоятельная работа. 16

Глава II. Наборы данных. 17

2.1. Набор данных. 17

2.2. Практическая работа. 17

2.3. Самостоятельная работа. 19

2.4. Режимы наборов данных. 20

2.5. Практическая работа. 21

2.6. Перемещение по записям набора данных. 22

2.7. Практическая работа. 23

2.8. Доступ к полям.. 25

2.9. Практическая работа. 26

2.10. Практическая работа. 27

2.11. Способы задания состава полей набора данных 29

2.12. Вычисляемые поля. 32

2.13. Практическая работа №7. 32

Глава III. Индексирование баз данных. 35

3.1. Установка текущего индекса. 37

3.2. Сортировка набора данных. 37

3.3. Практическая работа. 37

Глава IV. Фильтрация записей. 40

4.1. Фильтрация по выражению.. 40

4.2. Практическая работа. 42

4.3. Практическая работа. 43

4.4. Фильтрация по диапазону. 45

4.5. Самостоятельная работа. 47

Глава V. Поиск записей в наборе данных. 48

5.1. Поиск записей. 48

5.2. Поиск записей по нескольким полям. 49

5.3. Практическая работа. 49

Глава VI. Модификация набора данных. 51

6.1. Редактирование записей. 51

6.2. Добавление записей. 54

6.3. Удаление записей. 54

6.4. Практическая работа. 55

Глава VII. Работа со связанными таблицами. 60

7.1. Организация связей между таблицами. 60

7.2. Практическая работа. 62

7.3. Самостоятельная работа. 65

Глава VIII. Работа с отчетами. 66

8.1. Объект QuickRep. 66

8.2. Компоненты, размещаемые в полосе. 68

8.3. Практическая работа. 69


Глава I. Базы данных в Delphi

Ведение в базы данных

Для успешного функционирования различных организаций требуется наличие развитой информационной системы, которая реализует автоматический сбор, обработку и манипулирование данными.

Современной формой информационных систем являются банки данных, которые включают:

§ вычислительную систему;

§ систему управления базами данных (СУБД);

§ одну или несколько баз данных (БД);

§ набор прикладных программ.

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

СУБД – это совокупность языковых и программных средств, предназначенных для создания и использования БД.

По характеру использования СУБД разделяют на персональные и многопользовательские.

Персональная СУБД обеспечивает возможность создания локальных БД (расположены на одном и том же компьютере, что и работающее с ними приложения). К персональным СУБД относятся Paradox, dBase, FoxPro, Access и другие.

Многопользовательские СУБД позволяют создавать информационные системы, функционирующие в компьютерных сетях. К ним относятся Oracle, Informix, InterBase и другие.

В зависимости от вида организации данных различают следующие модели БД:

§ Иерархическую

§ Сетевую

§ Реляционную

§ Объектно-ориентированную

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

 

В сетевой БД данные организуются в виде графа.

Реляционная БД получила название от англ. слова Relation – отношение. Данные представлены в виде таблицы.

   
   
   

 

Объектно-ориентированную БД объединяют сетевую и реляционную модели и используются для создания крупных БД с данными сложной структуры.

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

Система Delphi не является СУБД, но обладает ее возможностями. Предоставляемые Delphi средства обеспечивают создание и использование различных видов БД, а также разработку приложений для работы практически с любыми БД. Delphi не имеет своего формата таблиц (языка описания данных), но использует форматы таблиц других СУБД (dBase, Paradox, InterBase).

 

Таблицы баз данных.

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

Для одной таблицы создается несколько файлов, содержащих данные, индексы, ключи и т. п. Имя главного файла таблицы (файла, содержащего данные) – оно же является именем таблицы – задается при создании таблицы. Имена остальных файлов задаются автоматически, причем имена файлов совпадают с именем таблицы, за исключением расширений имен.

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

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

С таблицей в целом можно выполнять следующие операции:

§ создание (определение структуры);

§ изменение структуры (реструктуризация);

§ переименование;

§ удаление.

При создании таблицы задается структура и имя таблицы.

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

При переименовании таблица получает новое имя, в результате чего новое имя также получают все ее файлы. Для этого используются соответствующие программы (утилиты), предназначенные для работы с БД, например, Database Desktop или Data Pump.

При удалении таблицы с диска удаляются все ее файлы.

Для работы с БД предназначены специальные средства Delphi, которые можно разделить на два вида:

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

Компоненты, предназначенные для создания приложений, осуществляющих операции с БД.

Инструментальные средства:

§ Borland Database Engine (BDE) – процессор баз данных, который представляет собой набор библиотек, предназначенных для организации доступа к БД из приложений Delphi.

§ Database Desktop – программа создания и редактирования таблиц и другие.

Компоненты, связанные с БД, делятся на визуальные (используются для создания интерфейсной части приложения, видны в работающих программах) и невизуальные (предназначены для организации доступа к данным, содержащимся в таблицах, не видны в работающих программах). Эти компоненты находятся на страницах Data Access, Data Controls, Midas, Decision Cube, QReport, InterBase палитры компонентов.

 

Таблицы dBase

Типы полей таблиц dBase IV

 

Тип Обозначение Описание значения
Character C   Строка символов. Длина не более 255 символов.
Float F Число с плавающей точкой. Диапазон -10 308… 10308. Точность 15 цифр мантиссы.
Number N Число в двоично-десятичном формате BCD (Binary Coded Decimal)
Date D Дата
Logical L Логическое значение. Допустимые значения True (истина) и False (ложь).
Memo M Разрешается использование прописных букв.
OLE O Строка символов. Длина не ограничена. Символы хранятся в файле с расширением dbt
Binary B Данные в формате, который поддерживается технологией OLE. Данные хранятся в файле с расширением dbt
Bytes Y Последовательность байтов. Длина не ограничена. Байты содержат произвольное двоичное значение, хранятся в файле с расширением dbt

Таблицы Paradox

Типы полей таблиц Paradox 7

Тип Обозначение Описание значения
Alpha A Строка символов. Длина не более 255 символов
Number N Число с плавающей точкой. Диапазон – 10 307 …10308. Точность 15 цифр мантиссы
Money $ Денежная сумма. Отличается от типа Number тем, что в значении отображается денежный знак. Обозначение денежного знака зависит от установок Windows
Short S Целое число. Диапазон – 32768 … 32767
Long Integer I Целое число. Диапазон – 2 147 483 648 … 2 147 483 647
BCD # Число в двоично-десятичном формате
Date D Дата. Диапазон 01.01.9999 до н.э. … 31.12.9999
Time T Время
Timestamp @ Дата и время
Memo M Строка символов. Длина не ограничена. Первые 240 символов хранятся в файле таблицы, остальные в файле с расширением mb
Formatted Memo F Строка символов. Отличается от типа Memo тем, что строка может содержать форматированный текст
Graphic G Графическое изображение. Форматы BMP, PCX, TIFF, GIF и EPS. При загрузке в поле изображение преобразуется к формату BMP. Для хранения изображения используется файл с расширением mb
OLE O Данные в формате, который поддерживается технологией OLE. Данные хранятся в файле с расширением mb
Logical L Логическое значение. Допустимы значения True (истина) и false (ложь). Разрешается использование прописных букв
Autoincrement + Автоинкрементное поле. При добавление к таблице новой записи в поле автоматически заносится значение, на единицу большее, чем в последней добавленной записи. При удалении записи значение ее автоинкрементного поля больше не будет использовано. Значение автоинкрементного поля доступно для чтения и обычно используется в качестве ключевого поля
Binary B Последовательность байтов. Длина не ограничена. Байты содержат произвольное двоичное значение. Первые 240 байтов хранятся в файле таблицы, остальные в файле с расширением mb
Bytes B Последовательность байтов. Длина не более 255 байтов

Практическая работа

 

Создание простейшего приложения для работы с таблицами данных.

Выберите пункт главного меню Delphi Tools/Database Desktop для того, чтобы запустить программу Database Desktop, с помощью которого можно создавать таблицы, изменять их структуру и назначать им индексы.

После запуска Database Desktop выберите меню File/New/Table, чтобы начать процесс создания новой таблицы. После выбора этой команды на экране появляется окно Create Table, в котором нужно выбрать формат (тип) таблицы (например, Paradox 7). После выбора формата таблицы появляется окно определения структуры таблицы БД.

 

В этом окне находятся следующие поля:

  • Field Name – имя поля таблицы БД;
  • Type – тип поля (выбирается из списка, который открывается щелчком правой кнопкой мыши или клавишей пробел в поле Type, и отображается одним символом);
  • Size – размер поля (обычно задается для типа поля Alpha);
  • Key – указание ключевых полей (* – можно установить, нажав любую алфавитно-цифровую клавишу).

Каждая таблица должна иметь хотя бы одно поле.

[Insert] – вставка поля;

[Ctrl]+[Delete] – удаление поля (в окне определения и изменения структуры таблицы).

 

Определим поля, входящие в таблицу «Товары». Введите имя поля Tovar в столбец Field Name, в поле Type выберите тип поля Alpha и установите размер поля 20. Задайте для таблицы следующую структуру:

 

 

Field Name Type Size
Tovar A  
Kod N  
DataVipusk D  
SrokGodnos D  
Kolvo N  
Cena $  

 

Для каждого поля можно определить требование обязательного его заполнения значением. Для этого, переходя от поля к полю, включайте переключатели Required Field. Другие поля служат для наложения ограничений назначение поля:

  • Minimum value – определяет минимальное значение поля;
  • Maximum value – определяет максимальное значение поля;
  • Default value – определяет значение поля по умолчанию;
  • Picture – определяет шаблон изображения поля;

Отсутствия значения в одном из полей означает отсутствие ограничений на значение поля.

 

После определения структуры таблицы ее необходимо сохранить, нажав на кнопку Save as…,и в появившемся окне указать расположение таблицы на диске и задать ее имя.

Сохраните созданную таблицу на диске под именем Tovar.db в папке Baza на рабочем диске.

Закройте Database Desktop. Перейдите в главное окно Delphi. Подготовим форму для нашего приложения, с помощью которого можно перемещаться по записям таблицы БД, просматривать и редактировать поля, удалять записи из таблицы и вставлять новые.

Разместите на форме компоненты Table, DataSource (п. к. DataAccess) и DBGrid, DBNavigator (п. к. DataControls), в окне инспектора объектов установите для них свойства:

Компонент Свойство Значение
Table1 DataBaseName C:\Baza (путь к папке, где находится таблица)
TableName (открыть список). Если путь к таблице указан неверно, этот список не откроется. Tovar.db (имя нужной таблицы)
Active (двойной щелчок или открыть список) True (открываем таблицу)
DataSource1 DataSet (открыть списо)к Table1
DBGrid1 DataSource (открыть список) DataSource1
DBNavigator1 DataSource DataSource1

 

Запустите программу и заполните созданную вами таблицу (10 записей, 11-я – пустая). Чтобы добавилась новая запись, установите курсор в последнем поле таблицы и нажмите [Tab] на клавиатуре. Закройте работающую программу и установите для компонента Table1 в свойстве Active значение False и сразу же значение True. В окне формы в компоненте DBGrid вы увидите записи.

 

Компонент DataSource1(источник данных) является связующим элементом между компонентами доступа к данным (Table1 – соединен с реальной таблицей БД) и визуальными компонентами отображения данных (DBGrid1 – отображает содержимое таблицы в виде сетки).

 

– компонент DBNavigator используется для управления набором данных.

Свойство VisibleButtons типа TButtonSet – определяет состав видимых кнопок:

– перейти к первой записи

– к предыдущей

– к следующей

– к последней

– вставить новую запись

– удалить текущую запись

– редактировать текущую запись

– сохранить изменения записи

– отменить изменения текущей записи

– обновить информацию в БД

Свойство ConfirmDelete типа Boolean – выдает на экран окно для подтверждения удаления записи (True – по умолчанию), = False – запись удаляется без подтверждения.

Свойство Flat типа Boolean – управляет внешним видом кнопок

=False – кнопки отображаются в объемном виде;

=True – плоский вид кнопок.

Свойство DataSource – связывает навигатор с набором данных.

Самостоятельная работа

Создайте таблицы, относящиеся к БД:

§ Автосалон;

§ Магазин «Мороженное»;

§ Музыкальная картотека;

§ Зоомагазин;

§ Записная книжка.

Заполнить таблицы данными (10-12 записей) и сохранить в папке Baza на рабочем диске.


Глава II. Наборы данных

 

Набор данных

Таблицы БД располагаются на диске и являются физическими объектами. Для операций с данными, содержащимися в таблицах, используются наборы данных (НД). В терминах Delphi набор данных – это совокупность записей, взятых из одной или нескольких таблиц БД. НД является логической таблицей, с которой можно работать при выполнении приложения. Взаимодействие таблицы и НД напоминает взаимодействие физического файла и файловой переменной. В Delphi для работы с наборами данных таблиц применяются несколько компонент, но наиболее универсальным и часто используемыми являются НД Table и Query.

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

Для выполнения операций с НД используются два способа доступа к данным:

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

реляционный – основан на обработке группы записей. При реляционном способе доступа для задания операций используются средства языка структурированных запросов – SQL (Structured Query Language).

Практическая работа

Создать приложение для просмотра и редактирования разных таблиц.

Пользователь может выбирать таблицу, данные которой выводятся в сетке DBGrid1. Выбор осуществляется в диалоге открытия файла, который вызывается при нажатии на кнопку «Открыть другую таблицу». После выбора таблицы ее имя устанавливается в качестве значения свойства TableName набора данных Table1.

При задании расположения БД программным способом НД предварительно необходимо закрыть (свойство Active = False).

Расположите на форме компоненты, показанные на рисунке. В компоненте DBGrid должна отображаться таблица Tovar.db

 

Напишите обработчик события OnClick для кнопки «Открыть другую таблицу»:

procedure TForm1.Button1Click(Sender: TObject);

Begin

OpenDialog1.Filter:= 'Таблицы (*.db;*.dbf) | *.db;*.dbf | Все файлы | *.*';

If OpenDialog1.Execute then

Begin

table1.Active:=false;

table1.tablename:=Opendialog1.FileName;

table1.Active:=true;

end;

end;

Напишите обработчик события OnCreate для формы:

procedure TForm1.FormCreate(Sender: TObject);

Begin

DataSource1.DataSet:=Table1;

DBGrid1.DataSource:=DataSource1;

end;

 

Запустите программу и нажмите на кнопку «Открыть другую таблицу». В появившемся диалоговом окне зайдите в папку Baza и двойным щелчком выберите любую таблицу.

Самостоятельная работа

Для таблиц формата dBase и Paradox записи, составляющие НД, нумеруются с 1.

Чтобы определить номер текущей записи НД существует метод RecNo.

Выполните следующие задания:

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

2. Осуществите переход на запись с указанным в поле Edit номером.

 

Число записей, составляющих НД, определяет свойство RecordCount типа Longint. Это свойство доступно для чтения при выполнении приложения.

Приведем пример, в котором производится перебор всех записей НД (Общая схема обработки всех записей НД):

var i:integer;

Table1.First; //переход к первой записи НД

for i:=1 to Table1.RecordCount do

Begin

//здесь можно расположить операторы, которые обрабатывают одну запись НД

Table1.Next; //переход к следующей записи НД

end;

Режимы наборов данных

 

Наборы данных могут находиться в различных режимах. Текущий режим НД определяет свойство State. Оно доступно для чтения во время выполнения приложения и может быть использовано только для текущего режима. Для перевода данных в тот или иной режим применяются специальные методы.

НД может находиться в одном из следующих режимов:

§ dsInactive – НД закрыт и неактивен, доступ к его данным невозможен.

§ dsBrowse – режим просмотра, в котором осуществляется перемещение по записям НД и просмотр данных.

§ dsEdit – редактирование текущей записи.

§ dsInsert – вставка новой записи.

§ dsSetKey – поиск записи, удовлетворяющей заданному критерию.

§ dsCalcField – выполняется расчет вычисляемых полей.

§ dsFilter – выполняется фильтрация записей.

Связи между режимами наборов данных можно отобразить в виде схемы:

 

Практическая работа

 

Создадим приложение, работающее с таблицами данных. Реализуем добавление, удаление, изменение и сохранение записей в таблице.

Поставьте на форму компоненты Table, DataSource, DBGrid для работы с таблицей Tovar.db. Свяжите их между собой.

Поставьте 5 кнопок Button, заголовки которых будут соответственно «Добавить», «Изменить», «Запомнить», «Удалить», «Отменить».

Опишем процедуры для каждой кнопки:

procedure TForm1.Button1Click(Sender: TObject);

Begin

if Table1.State= dsBrowse then

Table1.Insert;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

Begin

if Table1.State= dsBrowse then

Table1.Edit;

end;

 

procedure TForm1.Button3Click(Sender: TObject);

Begin

if Table1.State= dsBrowse then

if MessageDlg ('Удалить запись?', mtConfirmation, [mbYes, mbNo],0)=mrYes then

Table1.Delete;

end;

 

procedure TForm1.Button4Click(Sender: TObject);

Begin

if Table1.State in [dsInsert, dsEdit] then

Table1.Post;

end;

procedure TForm1.Button5Click(Sender: TObject);

Begin

if Table1.State in [dsInsert, dsEdit] then

Table1.Cancel;

end;

 

Практическая работа

Перемещение по записям НД с помощью кнопок.

Расположить на форме следующие компоненты:

 

Компонент SpinEdit (п. к. Samples) – редактор числа, обеспечивающий отображение и редактирование целого числа с возможностью его изменения с помощью двойной кнопки.

Для компонента Label1 в свойстве Caption оставьте пустую строку.

При помощи рассмотренных методов напишите процедуру для кнопки «Перваязапись»:

procedure TForm1.Button1Click (Sender: TObject);

Begin

Table1.First;

end;

Процедуры для кнопок «Следующая запись», «Предыдущая запись», «Последняя запись» напишите самостоятельно.

Для перемещения указателя на произвольное число записей используется счетчик SpinEdit1, в поле которого вводится это число. Для кнопки «Перемещение на…записей» напишите процедуру:

procedure TForm1.Button5Click (Sender: TObject);

Begin

Table1.MoveBy (SpinEdit1.Value);

end;

Напишите обработчик события OnAfterScroll для компонента Table1. После выполнения события OnAfterScroll информация о текущей записи обновляется сразу после перемещения текущего указателя. Это событие происходит и при открытии НД, когда указатель текущей записи устанавливается на первую запись.

 

procedure TForm1.Table1AfterScroll (DataSet: TDataSet);

Begin

label1.Caption:='Запись номер '+IntToStr(Table1.RecNo);

SpinEdit1.MinValue:= 1-Table1.RecNo;

SpinEdit1.MaxValue:= Table1.RecordCount-Table1.RecNo;

end;

 

Доступ к полям

Каждое поле НД представляет собой отдельный столбец, для работы с которым в Delphi служат:

объект Field: TField;

объекты: TIntegerField,: TFloatField, TStringField (производные от TField).

Объекты типа TField являются невизуальными и служат для доступа к данным соответствующих полей записей. Управляя объектами типа TField, можно управлять поведением полей, при этом все объекты полей являются независимыми друг от друга. Например, можно запретить модификацию значения отдельного поля, несмотря на то, что НД в целом является модифицируемым и допускает изменение значений других полей. Кроме того, можно скрыть то или иное поле от пользователя, сделав его невидимым.

Для доступа к объектам TField и, соответственно, к полям записей НД имеет соответствующие методы и свойства.

Свойство FieldCount: nteger указывает количество полей НД. Количество полей НД может отличаться от физического числа полей таблицы БД, поскольку в НД не обязательно включаются все поля таблицы.

Свойство Fields[Index:Integer]: TField – возвращает содержимое указанного в параметре Index поля НД.

К отдельному полю можно обратиться, указав его номер Index в массиве Fields. Номера полей изменяются от 0 до FieldCount-1.

 

Пример.

Edit1.Text:=Table1.Fields[5].AsString; – в компонент Edit1 появится та информация, которая находится в шестом поле НД.

Свойства объекта Field – AsString, AsInteger, AsFloat, AsBoolean позволяют обращаться к значению поля текущей записи как к строковому, целочисленному, вещественному или логическому значению.

Чтобы обращаться к какому-либо полю НД не по его номеру в массиве полей, а по его имени существуют методы FindField и FieldByName.

Функция FindField (const FieldName: String): TField возвращает для НД поле, имя которого указано в параметре FieldName. Имя поля, определяемое параметром FieldName, является именем физического поля таблицы БД, заданным при создании таблицы. Если заданное параметром FieldName поле не найдено, то функция FindField возвращает значение Nil. На практике часто используется метод FieldByName, который отличается от метода FindField тем, что если заданное поле не найдено, то генерируется исключительная ситуация.

Свойство Fields и методы FindField и FieldByName наиболее часто используются для доступа к значению поля текущей записи совместно с такими свойствами объекта Field, как AsString, AsInteger, AsFloat или AsBoolean, которые соответственно позволяют обращаться к значению поля как строковому, целочисленному, вещественному или логическому значению.

 

Практическая работа

Вывести в компонент ListBox1 содержимое всех полей текущей записи (начиная с первого).

Расположите на форме компоненты в соответствии с рисунком:

Напишите обработчик события OnClick для кнопки:

procedure TForm1.Button1Click (Sender: TObject);

var n:integer;

Begin

for n:=0 to table1.FieldCount-1 do

ListBox1.Items.Add (table1.Fields [n].AsString);

end;

После этого запустите программу и щелкните по кнопке на форме. В ListBox вы увидите список содержимого полей текущей записи набора данных. Содержимое каждого поля интерпретируется как строковое значение и добавляется к списку ListBox.

 

Самостоятельно выполните следующие задания:

1. Вывести в компонент ListBox1 содержимое всех полей текущей записи (начиная с последнего).

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

 

 

Практическая работа

Выведем на экран общую сумму количества товара (поле Kolvo), общую стоимость каждой единицы товара (поле Cena) и общую стоимость товара (для текущей записи) для таблицы Tovar.db.

Расположите на форме следующие компоненты:

Для кнопок напишите соответствующие процедуры:

procedure TForm1.BitBtn1Click(Sender: TObject);

var s:integer;

i:longint;

Begin

s:=0;

table1.First;

for i:=1 to table1.RecordCount do

Begin

s:=s+table1.fieldbyname('kolvo').asinteger;

table1.Next;

end;

label1.Caption:=inttostr(s);

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

var s:real;

i:longint;

Begin

s:=0;

table1.First;

for i:=1 to table1.RecordCount do

Begin

s:=s+table1.fieldbyname('cena').asfloat;

table1.Next;

end;

label2.Caption:=floattostr(s);

end;

procedure TForm1.BitBtn3Click(Sender: TObject);

var s:real;

Begin

s:=table1.fieldbyname('kolvo').asfloat*table1.fieldbyname('cena').asfloat;

label3.Caption:=floattostr(s);

end;

 

2.11. Способы задания состава полей набора данных

Существуют два способа задания состава полей НД:

§ по умолчанию (динамические поля);

§ с помощью редактора полей (статические поля).

Динамические поля создаются автоматически при разработке приложения. Статические поля создаются с помощью Редактора полей, с помощью которого можно:

§ определять вычисляемые поля, значения которых рассчитываются с помощью выражений, в которых можно использовать значения других полей;

§ ограничить состав полей НД;

§ изменить порядок полей НД;

§ скрыть или показать отдельные поля при выполнении приложения;

§ задать формат отображения или редактирования данных поля на этапе разработки приложения.

 

Редактор полей

Для запуска редактора полей нужно дважды щелкнуть по компоненту Table или вызвать его контекстное меню и выбрать команду Fields Editor (Редактор полей). В заголовке редактора полей – составное имя НД (например, Form1.Table1).

Для перемещения по полям в редакторе полей используются четыре кнопки навигации Редактора или мышь.

Большая часть Редактора – список статических полей, которые перечислены в порядке их создания.

Первоначально список пуст, так как все поля НД по умолчанию динамические.

С помощью Редактора полей разработчик может:

  • создать новое статическое поле;
  • удалить статическое поле;
  • изменить порядок статических полей.

Кроме того, для любого выбранного в Редакторе статического поля с помощью Инспектора объектов возможно задание и изменение свойств этого поля.

Для создания статического поля следует вызвать контекстное меню Редактора полей и выбрать пункт Add Fields (Добавить поля), в результате чего появится диалоговое окно добавления новых полей.

В списке Available fields (Доступные поля) окна содержатся все те поля НД, которые еще не являются статическими.

После выбора одного или нескольких полей и нажатия кнопки ОК эти поля добавляются в состав статических полей НД.

 

Для добавления всех физических полей таблицы нужно выбрать в контекстном меню Редактора полей пункт Add all Fields (Добавить все поля).

Имя статического поля – составное и состоит из имени НД и имени физического поля НД (например, Table1Tovar, Table1Kolvo).

Для удаления статического поля нужно выбрать в контекстном меню Редактора полей пункт Delete (Удалить) или выделить в списке поле и нажать клавишу [Delete]. Это поле становится недоступным для операций в программе. Если понадобится, его снова можно сделать статическим, добавив в список Редактор полей.

Можно изменить порядок следования статических полей, переместив их с помощью мыши или с помощью комбинаций клавиш [Ctrl]+[Page Up] и [Ctrl]+[Page Down].

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

Для задания общих свойств (параметров) нового поля используется группа управляющих элементов Field properties (Свойства поля). В поле Name (Имя) задается значение свойства FieldName, то есть имя поля, а в поле Component – значение свойства Name, то есть название компонента (объекта типа TField) поля.

При программировании обычно используется имя поля. Значение поля Component формируется Delphi автоматически. В полях Type и Size указываются тип и размер поля. Тип должен быть задан в обязательном порядке для любого поля.

Тип нового поля выбирается с помощью группы переключателей Field type (Тип поля) из следующих вариантов:

  • Data – поле данных, заменяющее соответствующее физическое поле таблицы;
  • Calculated – вычисляемое поле, значение которого рассчитывается в обработчике события OnCalcFields во время выполнения приложения;
  • LookUp –поле выбора, значение которого можно выбирать из списка, формируемого на основе заданных критериев и правил.

 

 

Вычисляемые поля

Для создания статического вычисляемого поля нужно:

1. В окне создания нового статического поля задать имя (поле Name) и тип (поле Type) поля, выбрать переключатель Calculated.

2. Написать обработчик события OnCalcFields для НД Table, в котором производится расчет значения вычисляемого поля.

Практическая работа №7

Создать для таблицы Tovar.db два вычисляемых поля Total (общая стоимость товара в рублях) и TotalUE (общая стоимость товара в у.е. (в $)).

Значения полей Total иTotalUE вычисляются по следующим правилам:

Total=Kolvo*Cena

TotalUE= Total/30.36

При расчете стоимости в условных единицах предполагается, что обменный курс составляет 30 руб. 36 коп.

Расположите на форме компоненты Table1, DataSource1, DBGrid1 для работы с БД (для таблицы Tovar.db) и свяжите их.

Сделайте поля Tovar, Kolvo, Cena набора данных Table1статическими.

В контекстном меню Редактора полей выберите пункт New Field. В поле Name задайте имя поля Total. В списке Type выберите значение Float. Установите переключатель Calculated в группе переключателей Field type. Нажмите ОК.

Произведите аналогичные действия для поля TotalUE.

Закройте Редактор полей.

Напишите обработчик события OnCalcFields для НД Table1:

procedure TForm1.Table1CalcFields(DataSet: TDataSet);

begin

Table1Total.AsFloat:=Table1.FieldByName('Kolvo').AsFloat*

Table1.FieldByName('Cena').AsFloat;

Table1TotalUE.AsFloat:=Table1Total.AsFloat/30.36;

end;

Чтобы отформатировать значение поля TotalUE можно написать следующий обработчик события OnCreate для формы:

procedure TForm1.FormCreate(Sender: TObject);

begin

Table1TotalUE.DisplayFormat:='###.##';

end;

 

Запустите программу и в компоненте DBGrid1 вы увидите вычисляемые поля Total и TotalUE.


Установка текущего индекса

В НД Table возможно указание текущего индекса. Его можно установить двумя способами:

1. С помощью свойства IndexName: String – содержит имя индекса, заданное



Поделиться:


Последнее изменение этой страницы: 2016-06-23; просмотров: 1345; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.14.143.149 (0.012 с.)