ЗАЯВКА Касмалиев Турсунбек...

52
ЗАЯВКА на размещение информации в образовательном портале КЭУ Структура/Кафедра «Прикладная информатика» Автор(ы). Касмалиев Турсунбек Кемелович Название материала(работы): Методическое указание к лабораторным работам по проектированию база данных по плат форме высокоуровнего языка DELPHI Вид (тип) материала: «Методические указание» Для направления/специальности: Для студентов обучающиеся по болонской системе Профиль/ специализация : «Прикладная информатика в экономике» Для размещения в базе данных портала: Краткое название материала: «Технология работы с электронными таблицами» Аннотация материала в объеме 2-3 абзаца Методическое указание к лабораторным работам по проектированию база данных по плат форме высокоуровнего языка DELPHI предназначена для использование студентами специальности «Прикладной информатики» как руководительные речи задач по разработка база данных на языке DELPHI Подписи: Автор(ы) Касмалиев Турсунбек Кемелович Первое издание Переиздание Руководитель структуры/Завкафедрой: ____________________________ Дата:01.03.2013. _________________ Визы : ______________________

Transcript of ЗАЯВКА Касмалиев Турсунбек...

Page 1: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

ЗАЯВКА

на размещение информации в образовательном портале КЭУ

Структура/Кафедра «Прикладная информатика»

Автор(ы). Касмалиев Турсунбек Кемелович

Название материала(работы): Методическое указание к лабораторным

работам по проектированию база данных по плат форме высокоуровнего

языка DELPHI

Вид (тип) материала: «Методические указание»

Для направления/специальности: Для студентов обучающиеся по болонской

системе

Профиль/ специализация : «Прикладная информатика в экономике»

Для размещения в базе данных портала:

Краткое название материала: «Технология работы с электронными

таблицами»

Аннотация материала в объеме 2-3 абзаца

Методическое указание к лабораторным работам по проектированию база

данных по плат форме высокоуровнего языка DELPHI предназначена для

использование студентами специальности «Прикладной информатики» как

руководительные речи задач по разработка база данных на языке DELPHI

Подписи:

Автор(ы) Касмалиев Турсунбек Кемелович

Первое издание Переиздание

Руководитель структуры/Завкафедрой: ____________________________

Дата:01.03.2013. _________________

Визы : ______________________

Page 2: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

2

КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра «Прикладная информатика»

Токтакунов Т.Т. Касмалиев Т. К.

Методические указания к лабораторным

работам по проектированию базы данных

на платформе высокоуровневого языка

программирования DELPHI-7

БИШКЕК -2009

Page 3: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

3

УДК 681.3

ББК 32.973

Токтакунов Т.Т. Касмалиев Т. К.

Методические указания к лабораторным работам по проектированию базы

данных на платформе высокоуровневого языка программирования

DELPHI-7. – Бишкек, 2009

Методические указания к лабораторным работам по проектированию базы

данных на платформе высокоуровневого языка программирования

DELPHI-7, предназначены для использования студентами специальности

«Прикладная информатика», как руководство к решению задач по

разработке баз данных на языке Delphi.

Рецензенты: кандидат физико-математических наук, доцент Сабитов Б.Р.

Кандидат технических наук, доцент Керимкулов Т.К.

ISBN

© Кыргызский экономический университет

Page 4: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

4

СОДЕРЖАНИЕ

Предисловие………………………………………………………………………… 3

1. Лабораторная работа № 1 Проектирование базы данных и

редактирование данных. Проектирование БД…………………………………………. 5

1.1 Пример 1. Создание базы данных «Телефонная книжка» и

ее ндексирование……………………………………………………………………......... 10

1.2 Пример 2. Редактирование содержимого таблиц БД

«Телефонная книжка»……………………………………………………………………. 14

1.3 Пример 3. Сортировка содержимого таблицы People БД

―Телефонная книжка‖…………………………………………………............................. 15

2. Лабораторная работа № 2 Проектирование приложений

для работы с БД……………………………………………………………………………. 17

2.1 Пример 1. Создание псевдонима (путь) таблицы в BDE Administrator…………… 17

2.2 Пример 2. Работа с редактором полей при создании формы БД

«Телефонная книжка»……………………………………………………………………...

25

3. Лабораторная работа № 3 Использование запросов при

проектировании приложений……………………………………………………………... 29

3.1 Пример № 1. Создание запроса для вывода записей, имеющих фамилию,

начинающуюся с одной и той же буквы, из БД «Телефонная книжка» …………….... 32

3.2 Пример № 2. Создание запроса для ограничения числа отображаемых записей

из БД «Телефонная книжка» (программный путь) ………………………………….… 35

4. Лабораторная работа № 4 Создание отчета для печати содержимого БД.

«Телефонная книжка» Создание и экспорт отчета Rave в файл

(.html,.rtf,.pdf,.txt) ……………………………………………………………………….. 38

5. Лабораторная работа № 5 Проектирование меню……………………………………. 42

5.1 Пример 1. Создание меню для приложения, работающего

с БД «Телефонная книжка»………………………………………………………………. 45

ЛИТЕРАТУРА……………………………………………………………………………... 51

Page 5: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

5

Предисловие

В связи с развитием и внедрением в повседневную жизнь информационно-

коммуникационных технологий резко возрос интерес к программированию, в частности

использование программных средств при создании базы данных, к одним из таких

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

Delphi — строго типизированный объектно-ориентированный язык, в основе

которого лежит хорошо знакомый программистам Object Pascal.

База данных — это набор файлов, содержащих информацию.

При выполнении лабораторных заданий студенты эффективно осваивают

технологии создания базы данных на Delphi.

Методические указания к лабораторным работам по проектированию базы данных

на платформе высокоуровневого языка программирования DELPHI-7, составлены для

студентов как учебно-методическое пособие по технологии создания базы данных и

решает задачи развития навыков самостоятельной работы студентов при создании базы

данных.

Рассматривается задача создания базы данных «Телефонная книга».

В методическое указание включены:

проектирование базы данных, создание таблиц, определение

полей, создание связей между таблицами;

проектирование приложений, создание форм, создание компонентов,

определение свойств компонентов, создание программных кодов;

создание запросов приложений;

создание отчетов приложений для печати;

создание меню;

Решая каждый из пунктов задачи, студенты приобретает навыки самостоятельной

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

Page 6: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

6

1. Лабораторная работа № 1

Проектирование базы данных и редактирование данных

Проектирование БД

При разработке собственной БД первое, с чего необходимо начать – это

создание таблицы, в которую впоследствии будет вводиться информация.

В дальнейшем данные в таблице могут дополняться новыми данными,

редактироваться или исключаться из таблицы. Вы можете просматривать

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

Основным назначением программы DBD 7.0 при работе с таблицами

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

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

созданные в DELPHI.

Для того чтобы создать новую таблицу, требуется определить ее

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

информация. Поле имеет такие атрибуты как порядковый номер, имя, тип,

размер и ключ. Рассмотрим подробнее структуру полей.

Структура полей

1) Наименования полей:

Порядковый номер поля - этот столбец не содержит заголовка и

предназначен лишь для определения порядка следования полей в таблице.

Значения в нем изменяются автоматически, начиная с единицы,

упорядочиваются по возрастанию и их уникальность поддерживается для

каждого поля.

Field Name - столбец содержит название поля таблицы БД.

Туре - тип данного поля. Он определяется символом, соответствующим

конкретному типу данных.

Size - размер поля в байтах, если тип данных требует задания размера

(например, для строк).

Key - определяет вхождение данного поля в первичный ключ, который

определяет уникальность записи. Значения в таком поле используются для

установления взаимосвязи между таблицами при поддержании целостности

данных в совокупности таблиц.

Page 7: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

7

Правила именования полей для таблиц формата Paradox следующие:

использовать пробелы в

имени можно;

буквы

эквивалентны);

(запятая), (вертикальная линия) и (восклицательный

знак);

-запросах,

например SELECT и COUNT.

2) Типы данных:

Для определения типов полей, т. е. типов данных, которые могут

находиться в этих полях, используются следующие символы, определяющие

соответствующие типы полей:

A (Alpha) - определяет строку с фиксированным количеством символов от 1

до 255;

N (Number) - определяет положительное или отрицательное вещественное

число из диапазона -10(^307) до 10(^308) с точностью до 15 знаков; в число

может входить знак + (плюс) или - (минус), цифры и десятичный знак (точка

или запятая);

$ (Money) - определяет денежный формат поля, который похож на формат

(Number), но при выводе данных ограничивает число десятичных знаков и

отображает символ валюты;

S (Short) - определяет целое число из диапазона от -32767 до 32767;

I (Long Integer) - определяет целое число из диапазона от -2147483648 до

2147483647;

# (BCD) - определяет вещественное число с точностью от 0 до 32 знаков

после запятой;

D (Date) - определяет дату с 1 января 9999 года до н. э. до 31 декабря 9999

года н. э.;

T (Time) - определяет время с точностью до миллисекунд, ограниченное 24

часами;

@ (Timestamp) - определяет хранение одновременно и даты, и времени;

M (Memo) - определяет текст произвольной длины, первые символы

которого (от 1 до 240) хранятся в БД;

F (Formatted Memo) - определяет текст произвольной длины с

оформлением, первые символы которого (от 0 до 240) хранятся в таблице БД;

G (Graphic) - определяет хранение графического изображения в формате

BMP;

O (OLE) - определяет хранение OLE - объекта;

L (Logical) - определяет значение логического типа, по умолчанию можно

использовать значения True и False;

+ (Autoincrement) - определяет поле счетчика (аналогично Long Integer, но

только для чтения), значение которого автоматически увеличивается на

единицу при переходе к новой записи;

B (Binary) - определяет поле произвольной длины, в котором информация

хранится в двоичном виде; DBD 7.0 этот формат не отображает;

Y (Bytes) - определяет поле произвольной длины, в котором информация

хранится в виде байтов; DBD 7.0 этот формат не отображает.

Page 8: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

8

3) Модификация структуры таблицы:

Для добавления нового поля в структуру таблицы следует, находясь в

последнем столбце последней строки таблицы, нажать клавиши Enter либо

Tab. После этого в таблице полей БД добавится внизу новая строка. Тип у

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

БД. Если требуется вставить новое поле между существующими, нужно

перейти на строку, содержащую описание поля, перед которым будет

вставлено новое. Затем нажать клавишу Insert.

При удалении поля из структуры следует нажать клавиши Ctrl-Del. При

этом надо соблюдать осторожность, т. к. данные из удаляемого поля будут

потеряны.

При вводе таблицы не обязательно поддерживаться нужного порядка

следования полей - его можно менять. Для этого, находясь в поле

порядкового номера строки с описанием поля, следует нажать левую

клавишу мыши, затем, не отпуская клавишу, переместить курсор мыши на

нужное место в порядке следования полей и отпустить клавишу.

4) Определение характеристик таблицы:

В правой части окна находятся описания характеристик таблицы.

Переход от описания полей к части описания характеристик таблицы

осуществляется нажатием клавиши F4 или с помощью мыши. Обратный

переход осуществляется с помощью мыши или клавиш Shift+Tab.

Характеристики таблиц приведены в выпадающем списке, находящемся в

правой верхней части окна.

Validity Checks (Проверка ввода значений)

С помощью этой характеристики определяются возможные значения в

выбранном в данный момент поле. Контроль при вводе значений в таблицу

осуществляется автоматически. Следует иметь в виду, что изменение

допустимых значений может привести к потере уже имеющейся информации

при сохранении таблицы.

Page 9: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

9

Здесь можно задать следующие значения:

1. Required Field (Обязательное поле). Данный выключатель определяет, обязательно ли

нужно вводить значение в поле. Этот выключатель необходимо включать для ключевого

поля.

2. Minimum Value (Минимальное значение). Величина, находящаяся в этой строке ввода,

определяет минимально допустимое значение в выбранном поле таблицы.

3. Maximum Value (Максимальное значение). Величина, находящаяся в этой строке ввода,

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

4. Default Value (Значение по умолчанию). Определенное в этой строке ввода значение

устанавливается в поле при создании новой записи в таблице.

5. Picture (Шаблон). В данной строке ввода определяется, какие символы могут быть

введены в текущее поле. Это условие описывается в виде строки, состоящей из

некоторого множества символов. Для удобства ввода и проверки шаблона можно

воспользоваться диалоговым окном, которое вызывается при нажатии кнопки Assist

(Помощник).

Table Lookup (Таблица - справочник)

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

введены в поле таблицы БД из определенной здесь таблицы справочника.

Page 10: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

10

Secondary Indexes (Вторичные индексы)

Вторичные индексы используются для связывания таблиц (например в

запросах), для ускорения выполнения запросов и определения порядка

сортировки значений в таблице. Данная характеристика относится ко всей

таблице целиком, поэтому при определении индекса не имеет значения,

какое поле в структуре в данный момент выбрано. Вторичных индексов у

таблицы может быть несколько. Во вторичный индекс может входить любое

количество полей. Одно и то же поле может входить в разные индексы.

Следует помнить, что ключ всегда индексируется (этот индекс называется

первичным), поэтому для него не требуется дополнительно определять

индекс.

Referential Integrity (Ссылочная целостность)

Ссылочная целостность обеспечивает однозначное соответствие

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

Помимо обеспечения равенства значений в связанных полях при вводе

ссылочная целостность обеспечивает сохранение этого условия при внесении

изменений в связанные поля основной таблицы, отображая их в

подчиненной. Ссылочная целостность для формируемой таблицы может

устанавливаться с несколькими таблицами, однако данная взаимосвязь может

быть определена только для полей основной таблицы, входящих в первичный

ключ. Вхождение в первичный ключ полей основной таблицы объясняется

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

использоваться для объединения таблиц в запросах, а значения первичного

ключа однозначно определяют записи в одной из таблиц.

Password Security (Защита паролем)

Это свойство позволяет определить пароль, который требуется ввести

при попытке получить информацию из формируемой таблицы БД. Паролей

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

информацию, входящую в таблицу, и свойства ее обработки.

Table Language (Язык таблицы)

Данное свойство позволяет переопределить драйвер языка, который

задает порядок сортировки всех значений в таблице и использование

определенного набора символов. Этот драйвер определяется в программе

настройки конфигурации BDE.

Dependent Table (Зависимые таблицы)

После выбора этой характеристики появляется список всех таблиц, для

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

определении характеристики Referential Integraty (Ссылочная целостность).

Корректировка таблиц в DBD 7.0

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

Необходимо выполнить команду главного меню Table|Restructure, с помощью которой

уже можно корректировать структуру таблицы. Выполняется это также как и при

создании новой таблицы.

Индексирование

Чтобы обеспечить быстрый поиск требуемых записей в БД, они должны

быть определенным способом упорядочения. Сам процесс упорядочения для

большой БД достаточно трудоемкий и длительный. Поэтому для быстрого

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

индексация - создание специального поискового файла, содержащего для

каждой записи БД какое-либо отдельное поле (поля), называемое индексом, и

ссылку на местоположение этой записи в БД. Компоненты такого файла

Page 11: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

11

упорядочиваются в соответствии с индексом. Такой файл называется

индексным файлом. Поиск осуществляется в этом файле по индексу, а после

нахождения нужного индекса, используя полученную ссылку,

осуществляется прямой доступ к соответствующей записи в БД.

Индекс, построенный на основе ключа, называется первичным

индексом, и соответствующий ему индексный файл создается автоматически.

Но в этом случае имеется ряд ограничений: во-первых, ключевые поля

обязательно должны стоять в начале записи, что ограничивает возможность

выбора; во-вторых, у двух любых записей БД ключи должны быть различны.

Если такие ограничения первичного индекса нас не устраивают, можно

выбрать индекс (индексы) на основе других полей записи БД. Такой индекс

называется вторичным, а вторичный индексный файл имеет точно такую же

структуру, которую имеет первичный. Создание вторичного индекса (а часто

и нескольких индексов) может потребоваться и в случае, когда поиск в БД

осуществляется по разным критериям.

Создание индекса обеспечивают программные средства,

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

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

запросах), определения порядка сортировки значений в таблице.

1.1 Пример 1. Создание базы данных «Телефонная книжка» и ее

индексирование

Рассмотрим задачу создания БД на примере простой электронной телефонной книжки.

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

домашний, рабочий и мобильный телефоны.

Для хранения информации о человеке будем использовать таблицу с именем People.

Описание структуры таблицы БД People:

Ключ Имя поля Тип Размер,

Дополнительно Описание

# IDPeople Счетчик, Обязательное, ключевое, Идентификатор записи

Family Строка 30 Обязательное Фамилия

Name Строка 15 Имя

SecName Строка 15 Отчество

Birthday Дата День рождения

Sex Логическое Обязательное Пол

Notes Memo 100 Комментарий

В этой таблице было искусственно добавлено поле IDPeople, которое является ключом.

Если бы один человек имел один телефон, можно было бы обойтись одной таблицей

People, добавив к ее полям поле Tel. Но человек может иметь несколько телефонов,

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

человеке должна повторяться столько же раз, сколько у него номеров телефонов. Это

вносит весьма большую избыточность, а кроме того, может повлечь за собой много

ошибок при вводе однообразной информации. Поэтому для хранения информации о

телефоне используется отдельная таблица с именем Tel, которая связана с таблицей

People.

Описание структуры таблицы БД Tel

Ключ Имя поля Тип Размер,

Дополнительное Описание

Page 12: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

12

# IDTel Счетчик, Ключевое, Идентификатор записи

IDPeople Число 4 Обязательное, индексированное, идентификатор человека

Number Строка 9 Обязательно Номер телефона

TypeTel Строка 4 Тип телефона

IDPeople - поле, которое используется для установления взаимосвязи с полем

типа счетчика в другой таблице, должно иметь тип длинного целого и быть

индексированным.

Таким образом, структура БД «Телефонная книжка» состоит из двух

связанных таблиц People и Tel. Таблица People является основной, а

взаимосвязь устанавливается с помощью полей IDPeople в этих таблицах.

Приступим непосредственно к созданию нашей БД:

1. Запустите программу DataBase Desktop 7.0. Задайте команду меню

File|New|Table. В результате появится окно Create Table со значением в

списке форматов таблицы Paradox 7.0. Так как создавать таблицы будем в

формате Paradox 7, нажмите кнопку ОК в этом окне. В результате появится

окно Create Paradox 7 Table (Untitled), в котором будет определяться

структура таблицы. Вначале создайте таблицу People.

2. Задайте поля таблицы

2.1. Введите в первой записи описания структуры, в столбце Field

Name, значение IDPeople и нажмите клавишу Тab для перехода к

следующему столбцу.

2.2. Далее в столбце Type нажмите клавишу пробела и выберите из

списка значение + (Autoincrement), затем нажмите клавишу Tab для

перехода к следующему столбцу.

2.3. В следующем столбце Key нажмите клавишу пробела для указания,

что данное поле ключевое (в столбце Key появится звездочка).

2.4. Включите с помощью мыши выключатель Required field

(Обязательное поле), а затем выберите мышью поле Key в последней

записи и нажмите клавишу Tab для перехода к следующей строке,

описывающей новое поле таблицы БД.

Остальные поля таблицы задайте аналогичным образом, выбирая при

этом соответствующий тип; только для полей Family, Name, SecName и Notes

в столбце Size укажите соответствующий размер, а выключатель Required

field включите только для полей Family и Sex. Следует отметить, что все

оставшиеся поля не будут ключевыми, а следовательно и поле Key для них

не будет активным. Для поля Birthday установите параметр Picture (Шаблон)

следующим образом. Для удобства ввода и проверки шаблона воспользуемся

окном, которое вызывается при нажатии кнопки Assist (Помощник). Здесь в

Page 13: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

13

строке Picture (Шаблон) вводится текст шаблона, правильность которого

можно проверить кнопкой Verify Sintax (Проверка синтаксиса), а в строку

Sample Value (Пример значения) вводится значение для проверки

соответствия введенному шаблону. Тест осуществляется кнопкой Test Value

(Проверка значения), после нажатия которой можно увидеть результат

проверки в виде сообщения в рамке сообщений. Выберите шаблон

#[#]:#[#]:#[#] {AM,PM};, #[#]/#[#]/#[#] - время, дата - из выпадающего списка

Sample Picture (Примеры шаблонов) и нажмите кнопку Use. Теперь в строке

ввода Picture в появившемся шаблоне удалите все, кроме #[#]/#[#]/#[#], т. к.

нам нужна только дата. Добавим еще два # и получим #[#]/#[#]/#[###].

Нажмите кнопку ОК.

3. Сохраните таблицу под именем People.db на диске при помощи кнопки

Save As, далее вам нужно будет активизировать выключатель Display Table

(Показать таблицу) из группы Options для того, чтобы после сохранения

новая таблица была отображена на экране для работы с данными в ней.

4. Открытая таблица позволяет лишь просматривать данные. Выберите

команду меню Table|Edit Data или нажмите клавишу F9. Теперь введите

несколько записей и запишите таблицу. Перемещаться по полям можно с

помощью мыши, клавиш стрелок и клавиши Tab.

5. Создайте теперь таблицу Tel. Для этого выполните действия аналогичные

Page 14: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

14

действиям, которые выполнялись при создании таблицы People, вводя

соответствующие таблице Tel поля, за одним лишь исключением - здесь

необходимо создать вторичный индекс по полю IDPeople, который создается

следующим образом:

5.1. Выберите в выпадающем списке таблицы Tel.db, Table Properties свойство

Secondary Indexes.

5.2. Нажмите появившуюся кнопку Define.

5.3. В окне Define Secondary Index в списке Field выберите значение

IDPeople, затем нажмите кнопку со стрелкой вправо рядом со списком,

после чего нажмите кнопку ОК.

5.4. В появившемся окне Save Index As введите в строку ввода

IDPeopleIndex и нажмите кнопку ОК.

6. Сохраните таблицу под именем Tel.db

7. Установите взаимосвязь между таблицами.

7.1. Задайте в качестве рабочей папки ту папку, в которой вы сохраняли

создаваемые таблицы БД «Телефонная книжка». Для этого выполните

команду главного меню File|Working Directory и в появившемся

диалоговом окне выберите требуемую папку.

7.2.Откройте таблицу Tel.db.

7.3 Задайте команду Table|Restructure, в результате появится окно,

аналогичное окну определения структуры таблицы.

7.4. Выберите в выпадающем списке Table Properties свойство

Referential Integrity.

7.5 Нажмите появившуюся кнопку Define.

7.6 В окне «Referential Integrity» из списка Field выберите значение

IDPeople[I], затем нажмите кнопку со стрелкой вправо рядом со

списком.

7.7 В списке Table выберите значение People, затем нажмите кнопку со

стрелкой влево рядом со списком. В центре окна будет схематично

изображена взаимосвязь таблиц. Нажмите кнопку ОК в окне

«Referential Integrity».

7.8 В окне «Save Referential Integrity As» в строку введите имя

соединения PeoplesTel, а затем нажмите кнопку ОК. В результате в

Page 15: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

15

списке, находящемся в правой части окна определения структуры

таблицы, появится введенное имя.

7.9 В окне определения структуры таблицы нажмите кнопку Save.

8. Введите в таблицу несколько записей, используя команду меню Table|Edit

Data.

9. Задайте команду главного меню File|Close для закрытия таблицы Tel.db.

1.2 Пример 2. Редактирование содержимого таблиц БД «Телефонная

книжка»

1. Откройте файл People.db.

2. Выберите из меню команды Table опцию Edit Data. Теперь данные можно

редактировать.

3. Активизируйте любую запись в таблице и откорректируйте или измените

ее.

4. Откорректируйте подобным образом несколько записей.

5. Вставьте запись при помощи клавиш Insert или через меню команды

Record|Insert. Вставка записи производится после активизированной в

данный момент записи.

6. Удалите любую запись. Для этого активизируйте ее и нажмите

комбинацию клавиш Ctrl+Del или Record|Delete. Но для того чтобы

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

удаление записей, необходимо активизировать выключатель Pack Table

(Упаковка таблицы) при сохранении файла с таблицей. Для этого войдите в

Table|Restructure, откроется окно «Restructure Paradox 7.0 for Windows Table:

People.db». Здесь и активизируйте этот выключатель и нажмите кнопку Save

(Сохранить).

7. Потренируйтесь в осуществлении навигации по записям таблицы с

помощью кнопок панели быстрого доступа с изображением различных

стрелок или с помощью команд меню Record, или же с помощью различных

комбинаций клавиш, которые указаны в меню Record.

8. Для таблицы БД Tel.db проделайте то же самое.

Обратите внимание на то, что при таком методе введения данных и их

редактирования могут очень часто возникать ошибки, вызванные

Page 16: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

16

взаимосвязанностью полей двух таблиц. Поэтому чаще всего данные

вводятся и редактируются посредством созданной экранной формы.

Преимущества этого метода вы узнаете при выполнении второй

лабораторной работы.

Сортировка

Сортировка - это физическое упорядочивание файла. Это отличает

сортировку от индексирования БД, которое при неизменности файла

позволяет предъявлять записи и перемещаться по нему в желаемом порядке.

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

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

сортировке всегда создается файл такого же размера, как и исходная таблица,

в котором содержатся упорядоченные записи.

1.3 Пример 3. Сортировка содержимого таблицы People БД “Телефонная

книжка”

1. Выберите команду Tools|Utilities|Sort.

2. В открывшемся диалоговом окне «Select Table» (Выбор таблицы) выберите файл,

который будете сортировать, в данном случае это - People.db. Нажмите кнопку Open, в

результате чего откроется окно «Sort Table:...People.db».

3. В данном окне в группе Sorted Table (Отсортированная таблица) активизирован

переключатель New Table (Новая таблица). Сюда введем имя файла, в котором вы

сохраните результат сортировки, People-s.

4. Активизируйте выключатель Display sorted table (Отобразить отсортированную

таблицу) в этой же группе для того, чтобы после задания условий сортировки увидеть ее

результат. А выключатель Sort just selected fields (Сортировка по выделенным полям)

оставьте не активизированным, т. к. сортировать мы будем всю таблицу в целом, т. е. по

всем полям, определенным в списке Fields, а не по полям, находящимся в списке Sort

Oder.

Page 17: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

17

5. В окне также имеется два списка: левый - Fields - содержит названия всех

полей, входящих в таблицу, правый - Sort Oder - названия полей, по которым

производится сортировка. Выберите в левом списке полей поле Family и,

нажав кнопку со стрелкой вправо рядом со списком, занесите его в правый

список.

6. Мы будем сортировать таблицу по полю Family, причем по возрастанию,

об этом свидетельствует значок плюса перед именем поля в списке Sort Oder.

Но при необходимости вы можете изменить вид сортировки кнопкой Sort

Direction (убыванию соответствует значок минуса перед именем поля в

списке Sort Oder). Здесь также можно изменять порядок следования полей, по

которым сортируется таблица, с помощью кнопок-стрелок Change oder.

7. По окончании выбора порядка сортировки нажмите кнопку ОК. В

результате проведенных действий вы должны увидеть, что таблица будет

отсортирована по фамилиям, упорядоченным по алфавиту.

Page 18: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

18

2. Лабораторная работа № 2

Проектирование приложений для работы с БД

Одной из самых существенных возможностей пакета Delphi является

разработка приложений для работы с БД. Здесь под приложением мы будем

понимать экранную форму, созданную для удобной работы с информацией,

хранящейся в таблицах БД.

Виды форм БД и их создание

Формы БД различаются по способу представления информации.

Существуют следующие виды форм:

Список-форма. Она похожа на таблицу, где записи расположены одна под

другой. Следует отметить, что для создания такой формы используется

компонента DBGrid. Как правило, все поля записи в этой форме

размещаются в одну строку. С этой формой очень удобно работать, когда

записи короткие.

Бланк-форма. Эта форма похожа на анкету, где все поля одной записи

расположены на одном листе. Такая форма используется при отображении

больших записей из БД, например анкетной информации о человеке, и

позволяет создать очень информативное представление данных за счет

дополнительных элементов.

Форма с подформой. Представляет собой форму, в которой отображаются

два или более связанных между собой наборов данных. Эта форма

используется для вывода данных из связанных таблиц. В главной форме

отображаются записи из одной таблицы, а в подчиненной - записи из

другой таблицы, связанные с текущей записью в главной форме. Этот

вариант представления данных удобен, когда одной записи в первом

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

Создавать форму БД при разработке приложения для работы с БД

можно вручную, помещая необходимые компоненты на форму. С другой

стороны, можно также воспользоваться помощью эксперта-построителя

форм БД, а затем, в случае необходимости изменить расположение

отображаемых компонент. Заметим, что эксперт помещает на форму не

только отображаемые компоненты, но и компоненты, которые определяют

связь с БД.

Одной из важных задач при создании приложения для работы с БД

является создание качественных форм БД. Простое, понятное расположение

компонент не только повышает эффективность работы, но и позволяет

минимизировать ошибки ввода.

2.1 Пример 1. Создание псевдонима (путь) таблицы в BDE Administrator

1. До создания формы в Delphi 7 создадим псевдоним в BDE Administrator, для этого

выполним клик в Пуск/Программы/Borland Delphi 7/BDE Administrator.

В открывшемся окне программы на главном меню нажмите Object/New/Standard/OK/

Задайте псевдоним как PeopleTel. В разделе Definition/Path/… Далее укажите путь где

сохранены предыдушие две таблицы.

Page 19: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

19

2. Сохраните изменения в программе.

Создание формы БД с подформой для работы с информацией

из БД «Телефонная книжка» в Delphi 7

1.Откроем новый проект с помощью команды главного меню File|New|Application.

Изменим свойство Caption (Заголовок) формы Form1 на «Информация о людях».

Фактически этот заголовок формы будет являться названием БД.

2.Сразу же сохраним через File| Save As форму Form1 в файле MyExunitDB.pas, а сам

проект - в файле MyExampleDB.dpr. Для этого выполним команду главного меню

File|Save Project As. При этом также появится окно выбора имени файла, в

котором выберем для модуля папку, зададим модулю имя MyExUnitDB,

после этого зададим проекту имя MyExampleDB.

После этих действий окно будет выглядеть так:

3. Поместим на форму Form1 компоненты для связи с таблицей БД,

находящейся в файле People.db.

3.1. В палитре BDE выбераем компонент Table и перенесем с помощью мыши на форму

Form1 компоненту Table (Таблица). Затем выберем свойство TableName и для него

зададим значение People.db, устанавливая связь приложения с таблицей БД People.db. Для

того чтобы отображаемые компоненты могли выводить на экран данные из этой таблицы,

зададим свойству Active компоненты Table1 значение True.

Page 20: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

20

3.2. В палитре Data Controls выбераем компонент DataSource с помощью мыши

перенесем на форму Form1 компоненту DataSource (Источник данных).

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

Зададим для свойства DataSet компоненты DataSource1 значение

Table1.

После этого отображаемые компоненты, размещение которых в

проекте будет описано ниже, получат доступ к данным из таблицы БД

People.db. Расположение компонент в модуле не существенно.

4. Поместим на форму Form1 компоненты для связи с таблицей БД,

находящейся в файле Tel.db, для чего выполним операции, аналогичные

операциям в предыдущем пункте, только компоненты Table2 и DataSource2

будут связаны с таблицей Tel.db через свойство DatabaseName и DataSet

соответственно.

5. Установим взаимосвязь между наборами данных для создания формы с

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

Для этого выделим компоненту Table2 на форме Form1.

Установим для ее свойства MasterSource значение DataSource1.

Активизируем мышью значение свойства MasterFields этой же компоненты.

В комбинированной строке ввода Available Index (Используемые индексы)

выберем значение IDPeopleIndex, т.к. взаимосвязь таблиц устанавливается с

помощью индексированных полей. Затем в левом списке выберем значение

IDPeople (поле в подчиненной таблице Tel, в данном примере оно

единственное) и в правом списке выберем значение IDPeople (поле в главной

таблице People). Нажмем кнопку Add - установленное соединение

отображается в нижней части окна. Если установлена ошибочная связь, ее

следует выделить в нижнем окне и нажать кнопку Delete, находящуюся

справа от окна. Завершается настройка взаимосвязи таблиц нажатием кнопки

ОК. В результате свойство IndexName включает название вторичного индекса

- IDPeopleIndex, а MsterFields содержит имя поля в главной таблице,

участвующего во взаимосвязи, - IDPeople.

Page 21: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

21

6. Поместим в форму Form1 компоненты, предназначенные для отображения

данных из БД. Для этого выполним следующие действия:

6.1. Со страницы Standart палитры компонент поместим в левый

верхний угол формы Form1 метку Label (Метка). Изменим с помощью

инспектора объектов ее свойство Caption на «Фамилия, имя, отчество».

6.2. Используя страницу DataControls палитры компонент, поместим в

форму Form1 3 компоненты DBEdit (Строка ввода значений в БД) под

меткой Label1 в один ряд. Для всех компонент зададим свойству

DataSource значение DataSource1, а в свойстве DataField для каждой из

этих строк ввода выберем соответственно из списка значения Family,

Name и SecName.

6.3. Со страницы Standart палитры компонент поместим в форму еще

одну метку Label. Разместим ее под компонентой DBEdit1. Изменим ее

свойство Caption на «День рождения».

6.4. Правее этой метки со страницы DataControls палитры компонент

поместим строку ввода DBEdit. Зададим ее свойству DataSource

значение DataSource1, а в свойстве DataField выберем из списка

значение Birthday.

6.5. Правее этой строки ввода со страницы DataControls палитры

компонент поместим компоненту DBCheckBox (Выключатель значения

Page 22: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

22

в БД). Изменим свойство Alignment (Расположение) у компоненты

DBCheckBox1 На LeftJustify, а Caption - на «Пол». Затем зададим ее

свойству DataSource значение DataSource1, а в свойстве DataField

выберем из списка значение Sex.

6.6. Ниже метки Label2 поместим со страницы Standart палитры

компонент еще одну метку Label. Изменим ее свойство Caption на

«Комментарий».

6.7. Под этой меткой поместим со страницы DataСontrols палитры

компонент компоненту DBMemo (Редактор в БД). Увеличим ее по

горизонтали на всю величину формы, а вертикальный размер

несколько уменьшим. Зададим ее свойству DataSource значение

DataSource1, а в свойстве DataField выберем из списка значение Notes.

6.8. В правую верхнюю часть формы Form1 поместим со станицы

DataControls компоненту DBNavigator (Навигатор по записям БД).

Записью в таблице БД является строка. Зададим свойству DataSource

значение DataSopurce1.

7. Поместим в форму Form1 со страницы DataControls компоненту DBGrid

(Таблица отображения БД). Поместим ее ниже всех компонент, уже

размещенных в форме, и несколько уменьшим по вертикали. Зададим ее

свойству DataSource значение DataSource2. Если все указанные выше

действия были выполнены верно, в компоненте DBGrid1 сразу будет

выведено содержимое таблицы Tel.db.

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

компоненте DBGrid. Для этого необходимо выполнить следующие действия:

8.1. Активизируем мышью свойство Columns, тем самым вызвав

редактор списка полей таблицы Editing DBGrid1.Columns.

8.2. В этом редакторе нажмем кнопку Add. Выделим появившееся

название «0-TColumn». С помощью инспектора объектов дадим

свойству FieldName значение Number. Для сложного свойства Titel

дадим его параметру Caption значение Номер.

Page 23: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

23

8.3. В окне редактора списка поле нажмем кнопку Add. Выделим

появившееся название «1-TColumn». С помощью инспектора объектов

дадим свойству FieldName значение Type. Активизируем свойство

PickList и в появившемся текстовом редакторе введем две строки:

дом.

раб.

моб.

После этих операций нажмем кнопку ОК. Таким образом мы задали

список, из значений которого можно определять тип телефона. Затем

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

Можно заметить, что отображаемые столбцы появляются в компоненте

DBGrid1 по мере их определения.

8.4. Чтобы завершить работу с редактором столбцов таблицы,

достаточно его закрыть, воспользовавшись стандартной кнопкой на

границе окна.

9. Со страницы Standart палитры компонент поместим в форму Form1 метку

Label. Разместим ее над компонентой DBGrid1 в левой части. Изменим

свойство Caption на Телефоны.

10. Перенесем со страницы DataControls в форму Form1 еще один навигатор

DBNavigator. Разместим его над компонентой DBGrid1 в правой части.

Зададим свойству DataSource этого навигатора значение DataSource2.

Page 24: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

24

11. Запустим программу с помощью главного меню Run|Run.

12. При вводе информации в форму с подформой имеются определенные

особенности. Чтобы отметить их, введем информацию в форму. Для этого

выполним следующие действия:

12.1. Нажмем кнопку «Плюс» на панели верхнего навигатора по

записям БД. После этого создается новая запись в таблице People, куда

внесем информацию о новом человеке.

В три строки ввода под меткой «Фамилия, имя, отчество»

последовательно введем значения «Хромов», «Олег», «Львович».

В строку ввода рядом с меткой «День рождения» введем 14.01.79.

Выключатель с надписью «Пол» должен быть включен.

Нажмем кнопку «Галочка» на верхней панели навигатора по записям.

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

данные о человеке необходимо до начала ввода его телефонов, иначе

они не будут соответствовать этому человеку, а в БД окажется столько

лишних записей, сколько в этом случае введено телефонов.

Чтобы пользователь не смог поступить иначе, нужно запретить ввод

данных в компоненту DBGrid1 и нажатие на кнопки DBNavigator2. Для

этого необходимо выполнить следующие действия:

12.1.1. Завершите работу программы. Выберите компонент

DBNavigator1 на форме. Перейдите на вкладку Events инспектора

объектов.

12.1.2. Дважды щелкните правой кнопкой мыши в строке

BeforeAction. В окне MyExUnitDB.pas дополните процедуру

Form1.DBNavigator1BeforeAction следующим фрагментом:

if ((Button=nbInsert) or (Button=nbEdit)) then

begin

DBNavigator2.Enabled:=false;

DBGrid1.Enabled:=false;

end;

if Button=nbPost then

begin

DBNavigator2.Enabled:=true;

DBGrid1.Enabled:=true;

end;

Page 25: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

25

12.1.3. Сохраните изменения и запустите программу.

13. Завершим работу программы нажатием стандартной кнопки закрытия

окна на границе формы.

14. Сохраним все изменения проекта с помощью команды File|Save All.

12.2. Нажмем кнопку «Плюс» на панели нижнего навигатора по

записям. Создается новая запись в таблице Tel.

Введем в ячейку «Номер» номер телефона.

Выберем в ячейке «Тип», элемент «дом.» из выпадающего списка.

12.3. Нажмем кнопку «Плюс» на панели нижнего навигатора по

записям. Кнопку «Галочка» нажимать для сохранения записи

необязательно: при вводе последовательно нескольких телефонов и

переходе на новую запись данные о телефоне автоматически

сохраняются в таблице, и в этой же таблице создается новая запись.

Введем информацию еще об одном телефоне. Нажмем кнопку

«Галочка» на панели нижнего навигатора по записям. Созданная запись

о телефоне сохраняется в таблице Tel.

Примечания:

1. Если нужно будет удалить какую-либо запись из компоненты DBGrid1,

следует выделить соответствующую строку и нажать у нижнего

навигатора кнопку «Минус». Для изменения же какой-либо записи

компоненты DBGrid1 следует выделить эту запись, нажать кнопку

«Стрелка вверх» нижнего навигатора, выполнить соответствующие

изменения и нажать кнопку «Галочка».

2. Для удаления записи из таблицы People необходимо предварительно

удалить все записи из таблицы Tel, относящиеся к записи, удаляемой из

таблицы People. Чтобы не выполнять предварительное удаление записей

«вручную» можно дополнить процедуру следующим фрагментом:

Page 26: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

26

Form1.DBNavigator1BeforeAction

if Button=nbDelete then

begin

Table2.First;

while not Table2.Eof do

begin

Table2.Delete;

end;

end;

Как это осуществить, уже описывалось в п. 12.1.

2.2 Пример 2. Работа с редактором полей при создании формы БД

«Телефонная книжка»

1. Загрузим проект, помещенный в файле MyExUnitDB.dpr, используя

команду главного меню File|Open.

2. Будем выводить дополнительно порядковые номера записей (значение

поля IDPeople). При этом будем выводить в виде трехзначного числа,

независимо от фактического количества цифр, и снабжать выведенную

информацию пояснением «Порядковый номер». Для этого выполним

следующие действия:

2.1. Используя страницу DataControls палитры компонент, поместим в

верхний левый угол формы Form1, перед навигатором, компоненту

DBEdit. Несколько увеличим компоненту по горизонтали, чтобы в ней

полностью разместилась выводимая информация. Используя инспектор

объектов, зададим ее свойству DataSource значение DataSource1, а в

свойстве DataField выберем из списка значение IDPeople.

2.2. На форме Form1 активизируем компоненту Table1. В появившийся

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

Page 27: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

27

локального меню редактора Add Fields. В списке полей, появившемся в

редакторе, выделим поле IDPeople. В инспекторе объектов появятся

характеристики этого поля. В свойство DisplayFormat поместим

следующую строку:

‗Порядковый номер:‗ 000

Если операции выполнены правильно, в строке ввода DBEdit5 должна

появиться соответствующая информация.

3. В предыдущих примерах мы выводили поле «Пол» с помощью

компоненты DBCheckBox1, что весьма не наглядно. Выведем это значение

словами «Мужской» или «Женский». Для этого выполним следующие

операции:

3.1. На форме Form1 активизируем компоненту Table1. В списке полей

выделим поле Sex. В инспекторе объектов появятся характеристики

этого поля. В свойство DisplayValues поместим следующую строку:

Мужской;Женский

3.2. Удалим из формы Form1 компоненту DBCheckBox1, выделив ее и

нажав клавишу Del. Используя страницу DataControls палитры

компонент, поместим на ее место компоненту DBComboBox

(Комбинированная строка ввода значений в БД) и слегка уменьшим ее

размер по горизонтали. Используя инспектор объектов, зададим ее

свойству DataSource значение DataSource1, а в свойстве DataField

выберем из списка значение Sex. Если операции выполнены правильно,

в строке ввода DBComboBox1 должна появиться соответствующая

информация («Мужской» или «Женский»).

Page 28: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

28

В инспекторе объектов для компоненты DBComboBox1 активизируем

мышью свойство Items и в появившемся редакторе строк введем

следующие строки:

Мужской

Женский

Работу с редактором завершим нажатием кнопки ОК.

3.3. Используя страницу Standart, поместим слева от комбинированной

строки ввода компоненту Label. Используя инспектор объектов,

зададим ее свойству Caption значение «Пол ».

4. Теперь выберем формат даты для вывода дня рождения человека. Для

этого выполним следующие действия:

4.1. На форме Form1 активизируем компоненту Table1. В списке полей

выделим поле Birthday. В инспекторе объектов появятся

характеристики этого поля.

4.2. Выделим в инспекторе объектов свойство DisplayFormat этого поля

и введем в него какой-либо формат, например «dddddd». Завершим

ввод формата нажатием клавиши Enter.

5. Запустим программу с помощью команды главного меню Run|Run. На

экране будут отображены все внесенные нами изменения.

6. Перемещаясь по записям, отметим, что в добавленной строке ввода

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

Page 29: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

29

отформатированный. А в комбинированной строке ввода помещается

значение пола человека, выраженное соответствующим словом. Это значение

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

7. Завершим работу программы, нажав стандартную кнопку закрытия окна на

границе формы.

8. Сохраним все изменения в проекте с помощью команды главного меню File|Save All.

Page 30: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

30

3. Лабораторная работа № 3

Использование запросов при проектировании приложений

При работе с БД широко применяется понятие запроса к ней. Под

запросом понимается требование совершить определенное действие с

информацией из БД. Можно выбрать данные в соответствии с заданным

условием и отобразить результат – запрос на выборку. Можно также

вставить, удалить, обновить определенные записи в БД, используя

соответствующие запросы. Такие требования формируются на специальных

языках программирования QBE и SQL. SQL нашел более широкое

распространение, в Delphi его можно использовать при создании приложения

для работы с БД.

SQL-запрос

На языке SQL можно создать запросы различных типов:

SQL-запрос, созданный с помощью DBD, помещается в файл с

расширением sql.

Каждый запрос на языке SQL состоит из нескольких частей, которые

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

можно использовать как прописные, так и строчные буквы. Информацию

можно разбивать на строки произвольным образом, но желательно в

отдельные строки помещать информацию, имеющую определенное

смысловое назначение. Для разделения отдельных зарезервированных слов,

идентификаторов, чисел, строк, знаков операций и т.д. следует использовать

пробелы.

1.Запрос на выборку.

Он предназначен для извлечения данных, находящихся в определенных

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

условиям. Конструкция запроса следующая:

SELECT [DISTINCT] <список выводимых полей>

FROM <список используемых таблиц>

[WHERE <условие отбора>]

[ORDER BY <порядок сортировки>]

[GROUP BY <порядок группировки>]

[HAVING <условие отбора групп>]

[UNION <объединяемый запрос на выборку>]

Рассмотрим подробнее отдельные части запроса.

DESTINCT – указывает, что в результате запроса не должно быть

повторяющихся значений.

<список выводимых полей>:

[<таблица>.]<поле>[AS <псевдоним>]{,[<таблица>.]<поле>[AS

<псевдоним>]}, где таблица – имя таблицы, если в запросе присутствует

только одна таблица, его можно опустить; поле – имя поля; псевдоним –

псевдоним для имени поля является локальным в запросе; AS – оператор,

ставящий в соответствие конкретному полю псевдоним. Если требуется

получить данные из всех полей таблицы, то достаточно указать * вместо

перечисления всех имен полей.

<список используемых таблиц>:

Page 31: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

31

―<файл с таблицей>‖ [<псевдоним>]{,‖<файл с

таблицей>‖[<псевдоним>]}.

WHERE – зарезервированное слово, с которого начинается оператор задания

условий.

<условие отбора>:

Условие, устанавливающее объединение:

[(<таблицаM.поле1> <условие> <таблицаN.поле2>)]{AND|OR

(<таблицаI.поле1> <условие> <таблицаJ.поле2>)}, где таблицаM, таблицаN,

таблицаI, таблицаJ – имена объединяемых таблиц; поле1, поле2 – имена

полей в этих таблицах, по соответствию значений которых устанавливается

взаимосвязь таблиц; условие – определяет соответствие значений в заданных

полях двух таблиц, например: равенство, больше, меньше, не равно и другие

операции сравнения; условий может быть несколько, в этом случае они

объединяются при помощи круглых скобок и логических операций AND и

OR. Если условие для объединения отсутствует, формируется результат,

представляющий собой всевозможные объединения записей всех таблиц.

Условие на значение полей:

[[<таблица>.]<поле> <условие> <значение>] {AND|OR

[<таблица>.]<поле> <условие> <значение>}.

Помимо математических, используются также логические операторы

сравнения, предикаты IN, LIKE и другие.

ORDER BY – зарезервированное слово, с которого начинается оператор

задания порядка сортировки.

<порядок сортировки>:

[<таблица>.]<поле> [ASC|DESC] {,[<таблица >.]<поле> [ASC|DESC]},

где ASC (по умолчанию) или DESC – определяют порядок сортировки

соответственно по возрастанию или убыванию.

GROUP BY – зарезервированное слово, с которого начинается оператор

задания порядка группировки.

<порядок группировки>:

[<таблица>.]<поле> {,[<таблица>.]<поле>}.

2.Запрос на добавление.

Этот запрос позволяет добавить запись в таблицу и присвоить значения

ее полям. Конструкция запроса следующая:

INSERT INTO “<файл с таблицей>” (<поле>{,<поле>})

VALUES (<значение>{,<значение>}).

Рассмотрим подробнее отдельные части запроса:

файл с таблицей – имя файла с таблицей, в которую добавляется запись;

должен быть с расширением и содержать путь;

поле – имя поля, которому задается значение.

VALUES - зарезервированное слово, с которого начинается оператор

задания списка значений полям таблицы; значение – значение из списка

значений, которое задается соответствующему полю новой записи (их

количество должно равняться числу полей).

3.Запрос на обновление.

Этот запрос позволяет обновить значения в записях, которые

соответствуют задаваемым условиям. Конструкция запроса следующая:

UPDATE “<файл с таблицей>”

SET <поле> = <значение>{, <поле> = <значение>}

[WHERE <условие отбора>]

Рассмотрим некоторые части запроса:

SET – зарезервированное слово, с которого начинается оператор, задающий

Page 32: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

32

список подставляемых значений; <поле> = <значение>{, <поле> =

<значение>} – список полей и значений, которые задаются этим полям.

[WHERE <условие отбора>] – оператор, задающий условие отбора тех

записей, в которых следует обновить данные.

4.Запрос на удаление.

Этот запрос позволяет удалить из таблицы записи, удовлетворяющие

заданным условиям. Конструкция запроса следующая:

DELETE FROM «<файл с таблицей>»

[WHERE <условие отбора>].

Запрос к БД (Query)

Использование одной компоненты Table позволяет работать только с

одной таблицей. Поэтому, когда необходимо работать с несколькими

связанными таблицами, нужно создавать соответствующее число компонент

Table. В этом случае целесообразно взять компоненту Query класса TQuery,

являющегося потомком класса TDBDataSet. Эта компонента позволяет

определить набор данных на основе нескольких таблиц с помощью SQL-

запроса. Ее также удобно применять, когда таблица БД чрезмерно велика; в

этом случае с помощью запроса можно ограничить набор рассматриваемых

данных. Использование этой компоненты связано со знанием языка SQL.

Отметим сразу, что можно создать оператор Delphi SQL при помощи

компоненты Query следующим образом:

1) поместить на форму объекты Query, DataSource и связать их вместе;

2) присвоить псевдоним объекта TQuery свойству DataBaseName;

3) с помощью свойства SQL ввести указание SQL;

3) установить свойство Active в значение True.

Если каждый шаг был завершен правильно и если BDE установлено

корректно, сетка должна будет содержать записи из указанной таблицы.

Delphi позволяет создавать SQL-запросы к БД как статические, в

которых текст запроса остается неизменным, так и динамические (или

запросы с параметрами). Динамические SQL-запросы содержат параметры,

определенные в условиях отбора записей, которые в процессе выполнения

программы могут изменяться. Таким образом, с помощью одного

динамического запроса можно получать различные результаты при

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

запросов аналогична статическим, за исключением того, что у них в секции,

определяющей условия отбора записи, вместо значения записывается

<параметр>, где параметр – имя параметра, вместо которого при выполнении

приложения будет подставляться значение.

У класса TQuery отметим следующие наиболее важные свойства,

которые он добавляет к наследуемым от классов TDataSet, TBDEDataSet и

TDBDataSet:

Local – определяет расположение таблиц (True – локальные таблицы,

False – таблицы на SQL-сервере); свойство только для чтения.

RequestLive – свойство логического типа (по умолчанию имеет значение

False), определяет возможность изменять набор данных, полученный в

результате выполнения запроса. Эта возможность имеется, если свойство

имеет значение True, и у запросов, которые основаны на одной таблице и не

используют сортировку и агрегатные функции. У остальных запросов

результат доступен только для чтения независимо от значения данного

свойства. В этих случаях можно посмотреть свойство CanModify для того

чтобы увидеть, успешен ли запрос, если же нужно откорректировать таблицу

с помощью запроса SQL, то следует использовать команду SQL Update.

Page 33: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

33

SQL – свойство типа TStrings, определяет текст SQL-запроса, который

используется при выполнении методов Open или ExecSQL.

UniDirectional – определяет направление перемещения курсора по

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

UpdateMode – свойство типа TUpdateMode, определяет способ

обновления записей из промежуточного буфера.

Следующие свойства компоненты TQuery используются в динамических

SQL-запросах. Приведем некоторые из них:

DataSource – свойство типа TDataSource, определяет источник данных,

значения полей которого используются как параметры для динамического

запроса.

Params[Index] – свойство типа TParams, задает список элементов типа

TParams, которые определяют параметры в динамическом запросе. С

помощью этого свойства в редакторе значений параметров задаются

начальные величины параметров. Чтобы перейти к редактору значений

параметров запроса, нужно активизировать мышью значение этого свойства.

Класс TQuery добавляет к наследуемым от классов TDataSet,

TBDEDataSet и TDBDataSet следующие методы (некоторые из них):

ExecSQL – процедура выполняет SQL-запрос.

Prepare – процедура посылает запрос в BDE для проверки синтаксиса и

оптимизации. Рекомендуется выполнять для динамических запросов.

События, которые обрабатываются компонентой TQuery, полностью

наследуются от класса TDataSet.

При подстановке переменных связи в динамический запрос

программным методом с помощью свойства Params выполняются обычно

следующие шаги:

1) необходимо убедиться в том, что таблица закрыта;

2) подготавливается объект TQuery с помощью выдачи команды Prepare;

3) Свойству Params присваиваются конкректные значения;

4) Открывается запрос.

3.1 Пример № 1. Создание запроса для вывода записей, имеющих фамилию,

начинающуюся с одной и той же буквы, из БД «Телефонная книжка»

Для работы с электронной телефонной книжкой как с обычной

желательно иметь возможность просматривать абонентов только с

фамилиями, начинающимися на одну букву. Для этого воспользуемся

запросом с параметром.

1. Загрузим заготовку проекта, созданную в лабораторной работе № 2.

Зададим свойству Caption формы значение «Информация о людях (запрос)».

Сразу же сохраним все составные части проекта в файлах с теми же именами,

что и прежние, но с добавлением цифры «2» в конце имени:

MyExUnitDB2.pas, MyExampleDB2.dpr.

2. Со страницы BDE поместим на форму Form1 компоненту Query (Запрос).

Зададим ему People в свойстве DataBaseName.

Оператор Like позволяет отобрать записи, которые определяются

параметром FirstChar в поле Family. Затем активизируем свойство Params и в

появившемся окне редактора параметров запроса Form1.Query1 Parameters

выполним следующее. Выберем из списка Parameter Name (Название

параметра) FirstChar, в строке ввода со списком DataType (тип данных)

выберем String и в строке Value (Значение) введем А% - начальное значение.

Page 34: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

34

Завершим настройку нажатием кнопки ОК.

Выберем компоненту Query1, активизируем свойство SQL и в появившемся

текстовом редакторе введем следующие строки, которые задают запрос на

языке SQL:

SELECT D.*, D1.*

FROM ―<путь к файлу>\.db‖ D, ―<путь к файлу>\Tel.db‖ D1

WHERE

(D.IDPeople = D1.IDPeople) AND (D.Family Like:FirstChar)

Примечание: Путь к файлу задайте Ваш путь, где находится файлы.

3. Установим у свойств Active и RequestLive компоненты Query1 значение

True, используя инспектор объектов.

4. Со страницы BDE палитры компонент поместим на форму Form1

еще одну компоненту DataSource. Активизируем ее и установим свойство

DataSet в Query1.

5. Перейдем к форме Form1. Справа от компоненты DBGrid1 поместим со

страницы Standart палитры компонент две компоненты Label. Свойству

Caption компоненты Label5 зададим значение Постраничный.

6. Ниже, под компонентами Label6 поместим со страницы Standart

кнопку Button. Изменим ее свойство Caption на Просмотр.

Page 35: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

35

При нажатии на эту кнопку будет происходить переход на новую форму, на которой будет

реализован постраничный просмотр БД «Телефонная книжка».

Активизируем ее и в появившемся обработчике события OnClick введем

следующее:

procedure TForm1.Button1Click(Sender: TObject);

begin

Form2.Visible := True;

end;

Свойство Visible обеспечивает отображение формы на экране после своего

создания.

7. Добавим в форму Form1 со страницы Additional палитры компонент

компоненту Bevel. Поместим ее позади компонент Label5 и Button1.

Теперь эта группа компонент будет выделяться на форме. Изменим ее

свойство Style на bsRaised (она будет выпуклой).

8. Создадим теперь вышеуказанную форму. Для этого выполним следующие

действия:

8.1. Добавим в проект форму командой главного меню File|New Form.

8.2. Изменим свойство Caption формы Form2 на «Постраничный

просмотр» и сохраним форму под именем MyExUnitQuery.pas.

8.3. В тексте модуля Form2 в секции implementation напишем

следующую строчку для связи данной формы с Form1:

USES MyExUnitDB2;

Перейдем снова к форме Form1. В тексте ее модуля установим связь с

Form2, для чего в секции implementation допишем:

USES MyExUnitQuery;

8.4. В верхний левый угол формы поместим компоненту ComboBox со

страницы Standart палитры компонент. Изменим ее свойство Text на A.

Затем активизируем свойство Items и в появившемся окне редактора

введем на каждой строке последовательно по одной букве от «А__________Я» до

«Я», за исключением, быть может, букв «Ь» и «Ъ». Завершим ввод

нажатием кнопки ОК.

8.5. Со страницы Standart палитры компонент с помощью мыши

поместим рядом с компонентой ComboBox1 компоненту Button.

Изменим ее свойство Caption на «Страница». Затем активизируем

кнопку и в появившемся обработчике события OnClick введем

оператор, задающий отображение в форме результатов выполнения

запроса в компоненте Query1. Обработчик будет иметь следующий

вид:

procedure TForm2.Button1ClickSender: TObject);

begin

WITH Form1.Query1 DO

BEGIN

Close;

Page 36: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

36

Prepare;

Params[0].AsString := ComboBox1.Text + ‗%‘;

Open;

END;

end;

9. Поместим на форму Form2 еще одну компоненту Button, справа от

компоненты Button1. Изменим ее свойство Caption на Назад. При помощи

этой кнопки мы сможем вернуться к форме Form1 во время работы

приложения. Активизируем кнопку Button2 и в открывшемся обработчике

события OnClick введем следующее:

procedure TForm2.Button2Click(Sender: TObject);

begin

Close;

end;

10. Ниже помещенных нами компонент разместим на всю оставшуюся часть

формы компоненту DBGrid со страницы DataControls палитры компонент.

Зададим свойству DataSourse значение Form1.DataSource3. При помощи

редактора списка полей Editing DBGrid1.Columns определим поля, которые

будут отображаться в таблице (эти действия были описаны в лаб./раб. №2):

Family, Name, SecName, Number, Type, задавая при этом через сложное

свойство Titel заголовки столбцов в DBGrid1: Фамилия, Имя, Отчество,

Номер, Тип соответственно.

11. Поместим в низ формы Form1, приблизительно в центр, еще одну кнопку

Button, которая в тексте модуля будет иметь имя Button2. Изменим ее

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

обработчике события напишем:

procedure TForm1.Button2Click(Sender: TObject);

begin

Close;

end;

12. Запустим программу командой Run|Run. В результате появится окно, в котором при

нажатии на кнопку Просмотр появится еще одно окно, где, выбирая в выпадающем списке

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

отображаемых записей в таблице DBGrid в соответствии с первой буквой значения

фамилии.

13. Завершим работу нажатием кнопки Выход в основном окне.

14.Сохраним все изменения в проекте.

Page 37: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

37

3.2 Пример № 2. Создание запроса для ограничения числа

отображаемых записей из БД «Телефонная книжка»

(программный путь)

В телефонной книжке, как правило, располагается много записей и

просмотр всех их последовательно затруднителен. Рассмотрим простейшее

разбиение таких записей на следующие две части: в первую войдут те,

которые содержат фамилии, начинающиеся на буквы от «А» до «М», а во

вторую – от «Н» до «Я», причем записи будут выводиться в алфавитном

порядке. Будем использовать TQuery программно.

1. Загрузим заготовку проекта, созданную в предыдущем примере. Зададим

свойству Caption формы Form1 значение «Информация о людях (запрос 2)».

Сразу же сохраним все составные части по расширениям проекта в файлах с теми же

именами, что и прежние, но с добавлением цифры 3 в конце имени: MyExUnitDB3.pas,

MyExUnitQuery3.pas и MyExampleDB3.dpr. В тексте модуля формы Form1

заменим раздел объявления используемых модулей в секции implementation

USES MyExUnitQuery;

на раздел

USES MyExUnitQuery3;

А в тексте модуля формы Form2 заменим раздел объявления используемых

модулей в секции implementation

USES MyExUnitDB2;

на раздел

USES MyExUnitDB3;

А ее свойство Caption изменим на «Ограниченный просмотр».

Изменим немного вид формы Form1: свойство Caption у компоненты Label6

с Постраничный на Ограниченный.

2. Перейдем к форме Form2. Удалим из нее две компоненты – ComboBox1 и

Button1 (кнопка Страница).

На место удаленных компонент поместим со страницы Standart две

компоненты Button, а у компоненты DBGrid1 свойство DataSource сделаем

пустым, чтобы первоначально в ней не было никаких записей.

3. Выберем кнопку Button1 и изменим ее свойство Caption на «А – М».

Активизируем ее и в появившемся обработчике события OnClick введем

следующие строки:

procedure TForm2.Button1Click(Sender: TObject);

begin

WITH Form1.Query1 DO

BEGIN

Close;

SQL.Clear;

SQL.Add('SELECT D.*, D1.*');

SQL.Add('FROM "People.db" D, "Tel.db" D1');

SQL.Add('WHERE');

SQL.Add('(D1.IDPeople = D.IDPeople)AND(D.Family < "Н")');

SQL.Add('ORDER BY D.Family ASC');

Open;

END;

Form1.DataSource3.DataSet := Form1.Query1;

DBGrid1.DataSource := Form1.DataSource3;

Page 38: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

38

end;

4. Выберем кнопку Button3 и изменим ее свойство Caption на «Н – Я».

Активизируем ее и в появившемся обработчике события OnClick внесем

следующее:

procedure TForm2.Button3Click(Sender: TObject);

begin

WITH Form1.Query1 DO

BEGIN

Close;

SQL.Clear;

SQL.Add('SELECT D.*, D1.*');

SQL.Add('FROM "People.db" D, "Tel.db" D1');

SQL.Add('WHERE');

SQL.Add('(D1.IDPeople = D.IDPeople)AND(D.Family >= "Н")');

SQL.Add('ORDER BY D.Family ASC');

Open;

END;

Form1.DataSource3.DataSet := Form1.Query1;

DBGrid1.DataSource := Form1.DataSource3;

end;

5. Запустим программу командой Run|Run.

6. Перейдем ко второй форме, нажав кнопку Просмотр. Нажимая кнопки «А

– М» и «Н – Я», можем видеть, как меняется набор отображаемых записей.

7. Завершим работу приложения.

8. Сохраним все изменения в проекте.

Page 39: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

39

4. Лабораторная работа № 4

Создание отчета для печати содержимого БД «Телефонная

книжка»

Создание и экспорт отчета Rave в файл (.html,.rtf,.pdf,.txt)

Для создания отчета выберите в меню Delphi 7 палитру Rave.

Для работы с Rave необходимо перенести на форму следующие компоненты :

для вывода и печати отчета TRvProject ; TRvDataSetConnection ;

для печати отчета в другие форматы: TRvNDRWriter ;

TRvRenderText ; TRvRenderRTF ; TRvRenderHTML ; TRvRenderPDF ;

Печать отчета и сохранение в отдельный файл будем осуществлять при нажатии на

соответствующую кнопку. В результате полученная форма будет выглядеть так:

Теперь присвоим RvDataSetConnection1 свойство Dataset значение Query1. Таким образом

в Rave будут передаваться данные из Query1.

Далее рассмотрим быстрый способ создания отчета. Переходим в Rave Designer (Tools

Rave Designer).

Автоматически будет создан новый проект. Свяжем проект с Query1 через

RvDatasetConnection1. Для этого нажмите кнопку New Data Object и выберите Direct Data

View

Page 40: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

40

Нажимаем Next и в появившемся окне должны быть отражены все активные Rave

соединения. В нашем случае это будет выглядеть так

После нажатия Finish справа в Rave Designer в Data View Dictionary появится Dataview1,

раскрыв который можно увидеть поля Query1.

Теперь создадим быстро простой отчет. Для этого воспользуемся ToolsReport

WizardsSimple Table. Выберим Dataview1, выделим все поля и завершим создание.

После небольшой корректировки полученный лист отчета будет выглядеть следующим

образом

Page 41: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

41

В верхнем поле (TitleBand) заголовок страницы, ниже заголовки колонок и в последней

помещаются DataText Component, которые будут принимать значения соответвующего

поля (колонки).

Загляните в Report Library (справа) и посмортите, что бы имя текущего листа отчета было

Report1. Сохраним полученный проект в папку с проектом Delphi. Получится файл

Project1.rav.

Теперь вернемся к нашему проекту в Delphi и напишем обработчик события для кнопки

печать отчета. Соединим RvProject1 с полученным файлом Project1.rav. Можно сделать

это программно. И далее запустим наш отчет.

В верхнем поле (TitleBand) заголовок страницы, ниже заголовки колонок и в последней

помещаются DataText Component, которые будут принимать значения соответвующего

поля (колонки).

Загляните в Report Library (справа) и посмортите, что бы имя текущего листа отчета было

Report1. Сохраним полученный проект в папку с проектом Delphi. Получится файл

Project1.rav.

Теперь вернемся к нашему проекту в Delphi и напишем обработчик события для кнопки

печать отчета. Соединим RvProject1 с полученным файлом Project1.rav. Можно сделать

это программно. И далее запустим наш отчет. Со страницы Стандарт выберите 2 Button и

изменить их Caption на «Печать отчета» и «Сохранить в файл».

Ввести эту программку в Печать отчета.

procedure TForm1.Button2Click(Sender: TObject);

begin

RvProject1.SetProjectFile(ExtractFilePath(Application.ExeName)+'Project1.rav');

RvProject1.ExecuteReport('Report1');

RvProject1.Close;

end;

Теперь в результате нажатия на кнопу мы увидем диалоговое окно, в котором можно

выбрать печатать отчет на принтере, посмотреть перед печатью или сохранить в файл.

Уже сейчас можно выбрать и сохранить в файл в удобном для нас формате.

Далее рассмотрим как сделать это напрямую без диалогового окна через программный

код:

procedure TForm1.Button1Click(Sender: TObject);

var

Page 42: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

42

NdrStream: TMemoryStream;

OutStream: TMemoryStream;

name:string;

begin

NdrStream := TMemoryStream.Create;

OutStream := TMemoryStream.Create;

RvProject1.Close;

RvProject1.SetProjectFile(ExtractFilePath(Application.ExeName)+'Project1.rav');

RvProject1.SelectReport('Report1',true);

try

RvNDRWriter1.StreamMode := smUser;

RvNDRWriter1.Stream := NdrStream;

RvProject1.Engine := RvNDRWriter1;

RvProject1.Execute;

name:='Report1';

RvRenderText1.PrintRender(NdrStream,name+'.txt');

RvRenderRTF1.PrintRender(NdrStream,name+'.rtf');

RvRenderHTML1.PrintRender(NdrStream,name+'.html');

RvRenderPDF1.PrintRender(NdrStream,name+'.pdf'); finally

FreeAndNil(NdrStream);

FreeAndNil(OutStream);

end;

RvProject1.Close;

end;

В результате нажатия на кнопку будут созданы 4 файла в папке с программой: Report1.txt,

Report1.rtf, Report1.html, Report1.pdf.

После проделанных выше указанных действий ваша форма должна выглядеть так:

Page 43: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

43

5. Лабораторная работа № 5

Проектирование меню

Практически все достаточно сложные программы в настоящее время

обладают системой меню, предназначенной для выбора того или иного пути

выполнения программы. Интерфейс, основанный на использовании меню,

становится очень удобным и позволяет быстро достигнуть необходимого

результата.

В Delphi имеется стандартная компонента, входящая в семейство класса

TMenu. Она содержит структуру меню в виде объекта класса TMenuItem.

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

TMenuItem. Все элементы меню в явном виде размещаются в форме и

непосредственно доступны через свои идентификаторы. Сделано это для

того, чтобы упростить доступ к их обработчикам события OnClick и

опубликованным свойствам.

Элемент меню класса TMenuItem

Элемент меню может представлять собой либо подменю, либо команду,

либо разделительную линию. К какой категории относится конкретный

элемент, зависит от его характеристик. Несмотря на это, любой элемент

меню принадлежит к одному и тому же классу – TmenuItem, и каждый может

рассматриваться как самостоятельное меню.

Для того чтобы элемент меню представлял собой подменю, необходимо,

чтобы свойство Items содержало __________соответствующие компоненты этого

подменю. Если это свойство пустое (не содержит ни одного элемента),

элемент меню является либо командой, либо разделительной линией.

Для того, чтобы элемент меню представлял собой разделительную

линию, следует его свойству Caption задать значение «-».

Элементы меню могут объединяться в группы. Информация о

принадлежности элементов к группам может использоваться при слиянии

меню нескольких форм и при использовании взаимосвязанных элементов

меню. При этом группы элементов меню должны идти в определенном

порядке – по возрастанию их номеров.

Характеристики элемента меню задают его внешний вид и место в

структуре меню. Среди его свойств отметим следующие:

Break – свойство, определяющее наличие разбиения меню на столбцы на

текущем элементе.

Caption – свойство типа string, содержащее текст элемента меню. Здесь

можно задать клавишу быстрого перехода с помощью символа &,

помещаемого перед соответствующим символом текста.

Checked – свойство логического типа, определяющее, является ли

элемент меню отмеченным (если имеет значение True, элемент помечается

«галочкой»).

Default – свойство логического типа; если оно имеет значение True,

текст элемента меню выделяется полужирным шрифтом, а двойное

нажатие мышью старшего элемента приводит к появлению у

текущего элемента события OnClick. По умолчанию имеет значение

False.

Enabled – свойство логического типа; если оно имеет значение True,

элемент меню реагирует на события от мыши и клавиатуры (элемент

меню разрешен).

GroupIndex – свойство целого типа, содержащее номер группы, к

Page 44: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

44

которой принадлежит элемент меню. По умолчанию имеет нулевое

значение.

Items[Index] – свойство-массив типа TMenuItem (индекс Index – целого

типа), задающее младшие элементы меню по отношению к текущему

элементу. Число элементов определяется свойством Count. Нумерация

начинается с нуля и используется только для чтения.

MenuIndex – свойство целого типа, содержащее индекс текущей

компоненты в списке Items старшей компоненты.

RadioItem – свойство логического типа; если оно имеет значение

True, элемент меню выполняет роль переключателя, т.е. помеченным

может быть только один элемент одной группы.

ShortCut – свойство целого типа, определяющее код клавиш

быстрого управления, при нажатии которых активизируется элемент

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

подпрограммы ShortCut, ShortCutToKey, ShortCutToText,

TextToShortCut.

Visible – свойство логического типа; если оно имеет значение True,

элемент меню отображается на экране, если False – нет.

В классе TMenuItem определено одно событие – OnClick.

Класс имеет ряд методов, в основном связанных с корректировкой

структур.

Add(Item) – процедура, добавляющая элемент Item (класса TMenuItem) в

список младших элементов.

Delete(Index) – процедура, удаляющая из списка младших элементов

элемент с индексом Index. При этом элемент из динамической памяти не

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

На стадии проектирования тому или иному элементу меню можно задать

клавишу (клавиши) быстрого управления, используя свойство ShortCut,

выбрав из выпадающего списка подходящее сочетание либо набрав их

непосредственно с помощью клавиатуры.

Можно эту операцию осуществить и на стадии выполнения программы,

но, сделать это несколько труднее. Для этой цели можно воспользоваться

специальными стандартными подпрограммами, позволяющими выполнять

различные преобразования (ShortCut, ShortCutToKey, ShortCutToText,

TextToShortCut).

Главное меню Main Menu

Обычно главное меню формируется на стадии проектирования. С этой

целью следует воспользоваться компонентой Main Menu из страницы

Standart палитры компонент, а затем применить свойство Items. При

активизации мышью этого свойства открывается конструктор меню (работа с

ним будет описана ниже). Характеристики элементов меню задаются с

помощью инспектора объектов. При необходимости (например, для создания

подменю) используется локальное меню конструктора.

Можно создать меню или отдельные его элементы и на стадии

выполнения программы. Для этого нужно использовать следующие

стандартные функции: NewItem, NewLine, NewSubMenu, NewMenu.

Локальное меню Popup Menu

В отличие от главного меню локальное меню постоянно на экране не

отображается, а выводится по мере необходимости. Чаще всего для этого

используется правая клавиша мыши, когда курсор мыши находится над тем

элементом управления, для которого следует открыть локальное меню.

Page 45: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

45

Как правило, локальное меню является одноуровневым, хотя это

необязательно. Во многих случаях отдельные элементы локального меню

дублируют наиболее часто используемые элементы главного меню.

Локальное меню класса TPopupMenu, так же как и главное меню,

является потомком класса TMenu. В свою очередь, в классе TPopupMenu

вводятся новые характеристики, среди которых отметим следующие

свойства:

Alignment – свойство типа TPopupAlignment, которое определяет

расположение локального меню относительно курсора мыши.

AutoPopup – свойство логического типа. Если свойство имеет значение

True, локальное меню появляется при нажатии правой клавиши мыши, если

имеет значение False, меню не появляется (в этом случае следует

использовать метод Popup).

OnPopup – событие, возникающее при выводе локального меню на экран

путем нажатия правой клавиши мыши (если свойство AutoPopup имеет

значение True) или вызова метода Popup. Это единственное событие, которое

обрабатывает локальное меню.

Popup(X, Y) – процедура, выводящая на экран меню, при этом

координаты его верхнего левого угла равны X и Y.

На стадии проектирования локальное меню создается так же, как и

главное меню. В форме размещается компонента Popup Menu из страницы

Standart палитры компонент. Далее активизируется его свойство Items и с

помощью конструктора меню набирается структура меню. Завершается

создание локального меню привязкой его к конкретному элементу

управления (элементам управления) через свойство PopupMenu элемента

управления.

Для создания локального меню на стадии выполнения программы

можно использовать стандартную функцию NewPopupMenu.

Для формирования открытого массива Items элементов меню здесь

также можно воспользоваться стандартными функциями NewItem, NewLine и

NewSubMenu.

Конструктор меню

Окно конструктора меню содержит структуру имеющегося меню или

один пустой прямоугольник (если создается новое меню), соответствующий

первому создаваемому подменю.

При создании нового главного меню в инспекторе объектов появляется

информация, соответствующая новому создаваемому элементу меню. В этой

информации важным является свойство Caption, куда следует поместить

название элемента, которое будет отображаться на экране. При вводе этого

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

Перед какой-либо буквой можно поставить символ &, задающий клавишу

быстрого перехода. Здесь же можно задать и клавиши быстрого управления,

позволяющие выполнять определенную для этого элемента команду. Для

названий подменю главного меню клавиши быстрого управления не

отображаются, однако выполняют свои функции.

Для добавления элемента в любом месте меню (за исключением

конечных элементов, которые создаются автоматически при прекращении

работы с предыдущим элементом) необходимо выделить элемент, перед

которым следует поместить новый элемент, и выполнить команду Insert

локального меню конструктора. В результате этого появится пустой элемент

в соответствующем месте, с которым дальше проводится работа, как указано

Page 46: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

46

выше.

Для удаления любого элемента меню или даже группы элементов

следует выполнить команду Delete.

Все изменения главного меню сразу же отражаются на его виде,

появляющемся в форме.

Редактирование уже имеющегося главного меню выполняется

аналогичным образом.

Работа по созданию или редактированию локального меню аналогична

работе с главным меню, только его следует рассматривать как

самостоятельное подменю с соответствующими элементами. Здесь также

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

подменю в локальном меню по возможности следует избегать.

Завершается работа с конструктором меню закрытием его окна.

5.1 Пример 1. Создание меню для приложения, работающего с БД

«Телефонная книжка»

В данном примере построим главное меню приложения, которое будет

содержать такие пункты меню, как Файл, Поиск, Сортировка, со

следующими подпунктами соответственно: Печать и Выход, По фамилии и

По дате рождения, По номеру и По фамилии. Таким образом, при помощи

данного меню можно будет осуществлять поиск по фамилии и по дате

рождения, проводить сортировку по номеру записи, а также по фамилии,

кроме этого оно дает возможность произвести печать содержимого БД

«Телефонная книжка».

Поверхностный анализ задачи проектирования меню проясняет, что

таблица People.db должна иметь вторичные индексы в полях IDPeople, Family

и Birthday для осуществления поиска и сортировки по этим полям.

1. Откроем DataBase Desktop 7.0 и создадим необходимые нам вторичные

индексы по полям Family, Birthday и IDPeople, назвав их FamilyIndex,

BirthdayIndex и Number соответственно.

2. Теперь войдем в среду Delphi 7 для того, чтобы начать работу по

созданию меню.

3. Вызовим заготовку проекта. Сразу же сохраним

все составные части проекта в файлах с теми же именами, что и прежние, но

с добавлением цифры 5: MyExampleDB5.dpr, MyExUnitDB5.pas.

4.Подготовим форму для размещения на ней меню. Для этого выполним

следующее:

4.1. Сдвинем все имеющиеся в форме компоненты немного вниз,

освободив тем самым место под главное меню (при необходимости

нужно увеличить размер формы по вертикали). Изменим свойство

Color (Цвет) формы на clTeal (или любой другой цвет) для того, чтобы

меню выделялось на экране, привлекая внимание пользователя.

4.2. Создадим кнопку Выход для завершения работы приложения,

разместив ее справа от компоненты DBGrid1 (подобная кнопка

создавалась в лаб./раб. № 3 и лаб./раб. № 4).

Page 47: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

47

5. Сформируем общий вид главного меню. Для этого выполним следующие

действия:

5.1. Со страницы Standart палитры компонент поместим на форму

Form1 компоненту MainMenu в правый нижний угол формы.

5.2. Активизируем у компоненты MainMenu1 свойство Items

(Компоненты), в результате чего откроется окно конструктора меню.

Зададим свойству Caption пустого прямоугольника значение Файл, а

свойству Name этого же элемента меню значение File_pt.

5.3. У появившегося пустого прямоугольника, который соответствует

первому элементу подменю Файл, свойство __________Caption изменим на

Печать, а свойство Name – на Print_pt. У следующего элемента

подменю свойству Caption зададим значение «-» – это будет

разделительная линия. Наконец, у следующего и последнего элемента

этого же подменю свойству Caption зададим значение Выход, а

свойству Name – Exit_pt.

5.4. У следующего элемента главного меню (пустой прямоугольник

справа от элемента меню Файл) свойству Caption зададим значение

Поиск, а свойству Name – Search-pt. Подпункты элемента меню Поиск

– По фамилии, По дате рождения – создадим аналогично элементам

Печать и Выход (их свойствам Name зададим значения Family1_pt и

Date_pt соответственно).

5.5. Аналогичным образом создадим элемент меню Сортировка,

который включает в себя пункты По номеру (свойство Name –

Number_pt) и По фамилии (свойство Name – Family2_pt).

5.6. Закроем конструктор меню. Отметим, что на форме Form1 уже

отображено создаваемое меню, и следующим шагом будет обеспечение

работы всех пунктов данного меню.

Ваша главное меню должна выглядеть так:

6. При выборе пункта меню Печать будет выводиться в режиме

Page 48: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

48

предварительного просмотра отчет, созданный в лаб./раб. № 3, т.е. список

людей с имеющимися у них телефонами. Для того чтобы этот пункт меню

стал рабочим, необходимо выполнить следующие действия:

6.1. Добавим в проект файл MyUnitReport2.pas из лаб./раб. № 3 и

сохраним его под именем MyUnitReport.pas. В тексте модуля формы

Form2 (форма с отчетом) изменим раздел объявления используемых

модулей в секции implementation

USES MyExUnitDB4;

на раздел

USES MyExUnitDB5;

6.2. В тексте модуля формы Form1 в секции implementation напишем

следующую строчку для связи данной формы с формой Form2:

USES MyUnitReport4;

6.3. В форме Form1 активизируем пункт меню Печать и в появившемся

обработчике события OnClick введем оператор, задающий отображение

отчета в режиме предварительного просмотра, введем эту программу на «Печать отчета»:

procedure TForm1.N2Click(Sender: TObject);

begin

Form1.Button3.Click;

end;

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

действия: активизируем данный пункт меню и в появившемся обработчике

события OnClick введем оператор, обеспечивающий завершение работы:

procedure TForm1. N4Click (Sender: TObject);

begin

Close;

end;

8. Для обеспечения поиска по фамилии и по дате рождения нам потребуется

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

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

следующее:

8.1. Добавим в проект новую форму. Изменим размер формы,

уменьшив ее значительно по вертикали и слегка увеличив по

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

Изменим также свойство Caption формы на «Поиск по фамилии».

Сохраним форму в файле Search7.pas.

8.2. Со страницы Standart поместим на форму, в ее верхнюю часть,

компоненту Label. Изменим ее свойство Caption на «Введите фамилию

искомого человека», а через сложное свойство Font изменим шрифт на

полужирный.

8.3. Справа от компоненты Label1 поместим на форму со страницы

Standart компоненту Edit и увеличим ее горизонтальный размер на

оставшуюся часть формы (размер этой компоненты должен быть

достаточным для ввода фамилии с максимально возможной длиной).

Свойство Text этой компоненты сделаем пустым.

8.4. Ниже, под компонентами Label1 и Edit1, приблизительно в центре

формы поместим две кнопки BitBtn со страницы Additional палитры

компонент. Активизируем первую кнопку и изменим следующие ее

свойства: Caption на ОК, Kind на bkOK, ModalResult на mrOK и Name

на OKBtn. В результате мы получим стандартную кнопку ОК. Теперь

активизируем вторую кнопку и изменим ее свойства следующим

образом: Caption на Отмена, Kind на bkCancel, ModalResult на mrCancel

Page 49: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

49

и Name на CancelBtn, т.е. создадим стандартную кнопку Cancel.

8.5. Добавим в проект еще одну новую форму. Сохраним ее в файле

Search5_1.pas. Зададим ее свойству Caption значение «Поиск по дате

рождения». Придадим форме вид, аналогичный виду формы Form3, со

следующими изменениями: свойство Caption компоненты Label1 будет

иметь значение «Введите дату рождения человека», и под ней будет

размещена еще одна компонента Label со свойством Caption равным

«дата вводится через точку».

8.6. Установим связь формы Form1 с формами Form3 и Form4, дописав

имеющуюся в форме Form1, в секции implementation строку

следующим образом:

USES MyUnitReport, Search5, Search5_1;

9. Для обеспечения работы с пунктом По фамилии подменю Поиск

активизируем данный пункт меню и в появившемся обработчике события

OnClick введем следующие строки:

procedure TForm1.N6Click(Sender: TObject);

begin

IF Form3.ShowModal = mrCancel THEN Exit;

Form1.Table1.IndexName := 'FamilyIndex';

Form1.Table1.SetKey;

Form1.Table1.FieldByName('Family').AsString := Form3.Edit1.Text;

Form1.Table1.GotoNearest;

end;

Данный код заставляет всплыть диалог поиска (Form3) в модальном режиме

(метод ShowModal). Данный режим предполагает, что все сообщения,

поступающие в программу в случае открытого модального окна,

обрабатываются только этим окном. Если пользователь выбирает кнопку ОК,

то осуществляется поиск введенной строки. Если же выбирается кнопка

Отмена, то происходит отказ от выбранного действия, т.е. выход из

подпрограммы. Далее устанавливается вторичный индекс по полю, в котором

Page 50: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

50

будет происходить поиск. После этого таблица устанавливается в режим

SetKey и потом таблице сообщается о поиске конкретной строки в поле

Family. В заключение вызывается GotoNearest и таблица подводится как

можно ближе к разыскиваемой записи, т.е. имеется возможность выполнять

частичные поиски, можно использовать неполное или неточное написание

фамилии.

10. Для обеспечения работы с пунктом меню «По дате рождения»

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

события OnClick будет иметь следующий вид:

procedure TForm1.N8Click(Sender: TObject);

begin

IF Form4.ShowModal = mrCancel THEN Exit;

Form1.Table1.IndexName := 'BirthdayIndex';

Form1.Table1.SetKey;

Form1.Table1.FieldByName('Birthday').AsString := Form4.Edit1.Text;

Form1.Table1.GotoNearest;

end;

11. Активизируем теперь пункт меню По номеру подменю Сортировка и в

появившемся обработчике события OnClick введем следующие строки:

procedure TForm1. N12Click (Sender: TObject);

begin

Form1.Table1.IndexName := ‗Number‘;

Form1.Table1.SetKey;

Form1.Table1.GotoNearest;

end;

12. Определим действия, выполняемые пунктом меню По фамилии подменю

Сортировка, активизируя данный пункт меню и в появившемся обработчике

события OnClick запишем следующий код:

procedure TForm1. N10Click (Sender: TObject);

begin

Form1.Table1.IndexName := ‗FamilyIndex‘;

Form1.Table1.SetKey;

Form1.Table1.FieldByName(‗Family‘).AsString := ‗A‘;

Form1.Table1.GotoNearest;

end;

Во избежание возможности появления пустых записей в начале таблицы

после сортировки по фамилии производится поиск записи, поле Family

которой является ближайшим для согласования со строкой «A».

13. Запустим программу командой Run|Run и убедимся в правильности

работы созданного меню.

14. Закроем приложение либо кнопкой Выход, либо командой главного меню

Файл|Выход.

15. Сохраним все изменения в проекте.

После всех действий форма проекта выглядит так:

Page 51: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

51

Page 52: ЗАЯВКА Касмалиев Турсунбек Кемеловичkeu.page.kg/documents/materials/205.pdf2 КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ

52

Литература

1. Delphi 7. Учебный курс./Под ред. С.И.Бобровского. – СПб.: Питер, 2003.

2. Фаронов В.В. Delphi. Программирование на языке высокого уровня. – СПб., 2004.

3. Архангельский А.Я. Object Pascal в Delphi 5. – М. БИНОМ. 1999.

4. Е. А. Зуев « Язык программирования TURBO PASCAL»-М:УНИТЕХ,1992

5. Боон К. « Паскаль для всех»-М: Энергоатомиздат, 1988

6. Абрамов С.А.,Зима Е.В. Программирование на языке Паскаль. М: Наука, 1987

7. Культин Н. Б. Программирование в Turbo Pascal 7.0 и Delphi: 3-е изд. – СПб.: БХВ-

Петербург,2007.

8. Культин Н.Б. Основы программирования в Delphi 7: 2-е изд. СПб.: БХВ-Петербург,

2008.

9. Культин Н.Б. Delphi в задачах и примерах: 2-е изд. СПб.: БХВ-Петербург, 2008.