Упражнения
1. Для форматирования и преобразования действительных чисел вместо функции FloatToStr() примените функцию Format(‘ %f ’,[пeременная]). Например, Format(‘%f ‘, [Delta]).
2. Теперь для форматирования и преобразования примените эту же функцию в таком виде Format(‘Строка %f’,[пeременная]). Например, Format(‘Вам надо похудеть %f[Delta]) .
3. Сделайте к программе заголовок, замените кнопку Button1 на кнопку BitBtn1, введите кнопку “Close”.
Контрольні питання:
1. Надайте визначення фреймам.
2. Надайте загальну характеристику компонентів-діалогів.
3. Охарактеризуйте діалоги відкриття та збереження файлів.
4. Охарактеризуйте компоненти фрагментів діалогів – DriveComboBox, DirectoryListBox.
5. Охарактеризуйте компоненти фрагментів діалогів – FilterComboBox, FileListBox та DirectoryOutLine.
6. Опишіть діалог вибору шрифта та його компонент FontDialog.
7. Охарактеризуйте діалогу вибору кольору та його компонент ColorDialog.
8. Охарактеризуйте діалог друку та встановлення друкуючого пристрою та надайте характеристику роботи компонентам – PrintDialog та PrinterSetupDialog.
9. Опишіть процедуру роботи діалогу пошуку тексту та його компонент FindDialog.
10. Охарактеризуйте роботу компонента ReplaceDialog – діалогу заміни текста.
АУДИТОРНЕ ЗАНЯТТЯ
ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ
ТЕМА 6.6: ОСНОВИ БАЗ ДАНИХ
Лекція №53 –Створення таблиць баз даних та форм прикладних застосувань
План заняття
1. Характеристика процедури створення таблиць баз даних
2. Характеристика процедури створення форм прикладних застосувань
Существует несколько путей для создания таблиц БД, например, программное создание с помощью метода CreateTableили посредством языка SQL. Но наиболее удобно использовать для этого программу Database Desktop, которая позволяет создавать и изменять таблицы БД, а также редактировать записи.
Рассмотрим последовательность создания БД с использованием Database Desktop на основе небольшого примера. Пусть требуется создать БД, состоящую из одной таблицы, которая содержит сведения об автомобілях.
Прежде всего, необходимо создать на диске новый каталог, в котором будет размещаться новая БД (допустим, C:\BD). Обращение к БД осуществляется с помощью так называемого псевдонима, поэтому с помощью программы BDE Administrator требуется создать псевдоним, который будет ссылаться на папку, где размещается БД. После запуска программы выбирается пункт меню . Object | New. В появившемся окне нужно оставить без изменения тип БД (STANDARD) и нажать кнопку ОК. В левой части окна администратора БД появится строка с надписью STANDARD1. Ее необходимо изменить на желаемый псевдоним, например имя Auto. В правом поле требуется изменить параметр PATH, присвоив ему нужное значение, определяющее путь к БД (в данном случае C:\BD). Чтобы запомнить заданное имя псевдонима, следует щелкнуть на нем правой кнопкой мыши и в открывшемся меню выбрать пункт Apply. В результате на экране появится диалоговое окно, в котором нужно нажать кнопку ОК, тем самым подтверждая сохранение нового псевдонима. Окно администратора БД принимает примерно такой вид, как показано на рис. 13.2.
После того как определен псевдоним, вызывается программа Database Desktop и выбирается пункт главного меню File \ New \ Table. В открывшемся диалоговом окне следует оставить без изменения тип создаваемой таблицы Paradox 7 (либо выбрать другой требуемый тип, в зависимости от желания пользователя) и нажать кнопку ОК. После выполнения этой операции на экран будет выведено окно формирования структуры таблицы (см. рис. 13.3).
Каждая строка таблицы, расположенной в данном окне, соответствует полю создаваемой таблицы. Столбцы имеют следующие назначения:
■ Fields Name - имя поля;
■ Туре - тип поля;
■ Size - размер поля (задается только для строковых типов);
Key - определяет, входит ли поле в первичный ключ. Если входит, то данный параметр содержит символ "*". Поля, включаемые в состав первичного ключа, должны обязательно размещаться в самом начале таблицы.
В табл. 13.2 приведено описание типов полей, используемых в таблицах Paradox 7
Итак, при определении структуры таблицы задается список полей (имена которых проектировщик выбирает по собственному желанию), устанавливается их тип, длина, а также определяется первичный ключ.
Для рассматриваемого примера следует задать набор следующих полей:
■ Number(тип Alpha,длина 10) - номер машины (данное поле является первичным ключом, поскольку однозначно определяет конкретный автомобиль и представляет собой уникальное, неповторяющееся значение);
■ Саг(тип Alpha,длина 30) - марка автомобиля;
■ Year(тип Short)- год выпуска;
■ Owner(тип Alpha,длина 50) - фамилия, имя и отчество владельца.
В правом верхнем углу окна определения структуры БД размещен комбинированный список Table Properties, который предназначен для установки дополнительных параметров. Этот список содержит такие пункты:
■ Validity Check- позволяет установить условие обяза
тельного заполнения поля, интервал допустимых значе
ний, значение по умолчанию и шаблон изображения поля;
■ Table Lookup - служит для задания полей поиска;
■ Secondary Indexes — используется для задания вторичного индекса;
■ Referential Integrity - применяется для установки ссылочной целостности между таблицами;
■ Password Security - дает возможность задать пароль;
■ Table Language - служит для установки языка.
После описания всех полей таблицы и установки необходимых параметров созданную таблицу необходимо сохранить на диске в определенном ранее каталоге, для которого был создан псевдоним при помощи программы BDE Administrator. С этой целью нужно нажать кнопку Save as..., выбрать необходимую папку (в данном случае C:\BD) и задать желаемое имя таблицы (например cars.db)
При этом таблица будет записана на диск (изначально пустая), и автоматически будут созданы все необходимые файлы, имеющие общее имя и отличающиеся только своим расширением.
Для изменения структуры таблицы нужно вначале открыть ее, а затем обратиться к пункту меню Table | Restructure. Однако следует учесть, что если в данный момент времени таблица используется другим приложением, то изменение ее структуры будет невозможно.
Изменение имени таблицы следует также осуществлять с помощью Database Desktop, чтобы при этом автоматически про: изошло соответствующее изменение имен различных дополнительных файлов.
Когда структура таблицы окончательно определена и таблица сохранена, можно открыть ее и вручную ввести некоторый начальный набор данных, хотя все же чаще заполнение таблицы реализуется с помощью созданного приложения Delphi, специально предназначенного для этих целей.
Для того чтобы сделать простейшее приложение, которое позволит работать с созданной таблицей, достаточно произвести ряд несложных операций.
Вначале на форму помещается компонент Table. Для него задаются следующие свойства. Свойству Databaseприсваивается значение Auto,указывающее на определенный ранее псевдоним. Здесь необходимо заметить, что вместо псевдонима можно просто указывать каталог, где находится БД. Если же исполняемый файл приложения и БД располагаются в одной и той же папке, то можно оставить данное свойство равным пустой строке.
После этого свойству TableNameзадается требуемое имя таблицы - в данной ситуации это cars. db.
На втором шаге на форму добавляется компонент DataSource, и его свойству DataSetустанавливается значение Tablel.
Наконец, на форме размещается компонент DBGrid и его свойству DataSourceприсваивается значение DataSourcel.
Теперь необходимо открыть таблицу БД cars.db для того, чтобы активизировать данные, содержащиеся в ней. Это достигается путем установки свойству Activeкомпонента Table значения True.
После выполнения всех описанных действий приложение готово к использованию, и остается только запустить его на выполнение. На экране отобразится содержимое таблицы БД в виде таблицы (см. рис. 13.4).
Пользователь имеет возможность просматривать содержимое таблицы БД, перемещаясь между записями с помощью стрелок на.
клавиатуре, добавлять и редактировать данные, нажимая клавишу F2 или любую алфавитно-цифровую клавишу, а также используя двойной щелчок мыши на записи, которую требуется изменить.
.
Контрольні питання
1. Опишіть процедуру створення таблиць баз даних
2. Опишіть процедуру створення форм прикладних застосувань
АУДИТОРНЕ ЗАНЯТТЯ
ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ
ТЕМА 6.6: ОСНОВИ БАЗ ДАНИХ
Лекція №56 –Відображаючі компоненти для роботи з базами даних
План заняття
1. Характеристика відображаючих компонентів при роботі з базами даних
2. Характеристика компоненту об’єкт поля та його властивостей
На этом занятии будут подробно рассмотрены некоторые основные компоненты, которые используются в Delphi для работы с БД, а также важнейшие свойства и методы этих компонентов.
Объект поля. Прежде всего, рассмотрим объект поля Field,который имеет весьма важное значение. Класс TFieldпозволяет обращаться к отдельным полям таблицы БД. Любой набор данных (наборы данных Tableи Queryбудут рассматриваться ниже) содержит как минимум одно поле. По умолчанию доступны все поля набора данных. Однако могут быть ситуации, когда нет необходимости использовать все поля, в этом случае может быть задан некоторый ограниченный набор полей, доступных для использования. Это осуществляется с помощью специального редактора полей, который позволяет на этапе конструирования приложения определять объекты-поля. Имена объектов поля формируются путем объединения имени набора данных и имени поля. Например, если в качестве набора данных используется таблица Tablelи у нее определен объект для поля Fam,то этот объект получит имя Tablel Fam.
Таким образом, к полю можно обращаться тремя эквивалентными способами ных. Этот компонент располагается на странице DataAccess Палитры компонентов.
Данный компонент имеет всего четыре характерных специфических свойства.
Свойство DataSet (тип TDataSet) служит для указания набора данных, с которым связан источник данных. В свою очередь, визуальные компоненты связываются с источником данных через свое свойство DataSource.
Свойство State (тип TDataSetState) определяет текущее состояние, в котором находится набор данных.
Свойство AutoEdit (тип Boolean) определяет возможность редактирования набора данных пользователем через визуальные компоненты с использованием определенных, присущих этим компонентам действий для перевода их в режим модификации. По умолчанию свойство AutoEdit имеет значение True, т.е. редактирование записей разрешено. Если установить этому свойству значение False, то пользователю будет запрещено редактировать набор данных, связанный с конкретным источником данных. Однако при этом возможным остается программное внесение изменений, а также пользователь может переводить набор данных в режим модификации нажатием соответствующих кнопок компонента DBNavigator.
Свойство Enabled (тип Boolean) определяет, будут ли визуальные компоненты, связанные с конкретным источником данных, отображать данные.
Кроме компонента DataSource, на странице DataAccess расположен еще целый ряд компонентов, предназначенных для обеспечения доступа к данным.
Элементы страницы ADO Палитры компонентов позволяют взаимодействовать с информацией из базы данных с использованием объектов данных ActiveX.
Компоненты, расположенные на странице InterBase, дают возможность непосредственно соединяться с БД InterBase без использования процессоров BDE или ADO.
Страница Midas содержит компоненты, используемые для создания удаленных БД.
Страница Decision Cube применяется для создания систем принятия решений и обеспечивает работу с многомерными данными.
На странице Rave находятся компоненты, применяемые для
создания отчетов.
Компоненты, представленные на страницах DataSnap, предназначены для работы с многоярусными базами данных
На странице dbExpress располагаются компоненты, которые позволяют приложениям связываться с базами данных, использующими технологию dbExpress.
Контрольні питання
1. Навести огляд відображаючих компонентів при роботі з базами даних
2. Надати характеристику компоненту об’єкт поля та його властивостей
САМОСТІЙНА РОБОТА СТУДЕНТА
ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ
ТЕМА 6.6: ОСНОВИ БАЗ ДАНИХ
Самостійне заняття №40 –Переміщення по набору даних
План заняття
1. Характеристика метода Ferst, Next, MoveBy, Last
2. Характеристика RecordCount, RecNo
В Delphi существует ряд процедур и функций, которые обеспечивают перемещение указателя текущей записи (или курсора) по набору данных без его изменения. Курсор можно установить на любую запись, которую, например, требуется отредактировать или удалить.
Перед началом перемещения указателя набор данных автоматически переводится в режим просмотра. Если при этом производилось редактирование какой-либо записи, то все изменения автоматически запоминаются.
Ниже приводятся методы, которые используются для перемещения указателя текущей записи по набору данных.
Метод Firstустанавливает курсор на первую запись.
Метод Nextперемещает курсор на следующую запись (если в текущий момент времени указатель установлен на последнюю запись, то перемещения не происходит).
Метод Last устанавливает указатель на последнюю запись. Метод Priorперемещает курсор на предыдущую запись (если указатель установлен на первую запись, перемещение не осуществляется).
Метод MoveBy (Distance: Integer): Integerперемещает указатель на число записей, задаваемое параметром Distance. Положительное значение данного параметра определяет перемещение курсора вперед, а отрицательное - назад. При попытке переместить курсор на запись с номером, превышающим общее количество записей в таблице, он будет установлен на последнюю запись. Аналогично, курсор устанавливается на первую запись при попытке его перемещения на запись с номером, меньшим единицы. Данная функция возвращает в качестве результата число записей, на которое сместился указатель.
Свойство RecordCountсодержит информацию об общем количестве записей в наборе данных.
Свойство RecNoсодержит номер текущей записи, то есть определяет текущее положение курсора.
Свойства BOFи EOFслужат для определения начала и конца набора данных соответственно. Свойство BOFимеет значение True,если указатель установлен на первую запись, иначе - False.В свою очередь, свойство EOF равно Trueтолько в том случае, если курсор указывает на последнюю запись набора данных.
При осуществлении операций перемещения по набору данных следует помнить одну особенность, которая может оказаться весьма немаловажной и способна привести к ошибкам, если ее не учесть. Дело в том, что порядок записей в наборе данных не является постоянным - он изменяется в зависимости от текущего индекса, от применяемой фильтрации, от добавления и удаления записей. Таким образом, не исключено возникновение ситуации, когда в процессе последовательного перемещения по записям таблицы БД порядок их размещения изменяется, что может привести к результату, абсолютно отличающемуся от ожидаемого. Разработчику приложения следует учитывать такую возможность и не допускать подобных ошибок.
Сортировка, то есть размещение записей в определенном порядке, осуществляется путем установки необходимого индекса в качестве текущего. При осуществлении перемещения по набору данных желательно вначале определенным образом отсортировать записи и не изменять заданный порядок до полного завершения требуемого цикла перемещений.
Контрольні питання
1. Надати характеристику метода Ferst, Next, MoveBy, Last
2. Надати характеристику RecordCount, RecNo
САМОСТІЙНА РОБОТА СТУДЕНТА
ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ
ТЕМА 6.6: ОСНОВИ БАЗ ДАНИХ
Самостійне заняття №41 –Фільтрація
План заняття
1. Характеристика понять фільтрація та фільтр
2. Характеристика фільтрації по вираженню
3. Характеристика фільтрації по діапазону
С помощью фильтров устанавливаются ограничения для записей, которые включаются в состав набора данных. Иными словами, при наложении фильтра в набор данных будут входить не все записи, а только те, которые отвечают условиям фильтрации. Другой способ ввода ограничений на включение записей в набор данных - это использование SQL-запросов, что, вообще говоря, является более мощным средством, чем использование фильтров (о SQL-запросах речь пойдет в следующем разделе).
В Delphi предусмотрены два возможных типа фильтрации записей. Фильтрация может выполняться по выражению или по диапазону. По умолчанию фильтры не установлены, то есть набор данных получает все записи таблицы.
Фильтрация по выражению осуществляется путем установки необходимого значения свойству Filter(тип String)компонента Table. Выражение фильтра представляет собой строку, которая может включать имена полей таблицы, литералы (числа, строки или символы), операции сравнения, арифметические операции, а также круглые и квадратные скобки. Имена переменных в выражении фильтра использовать нельзя. Для того чтобы включить в фильтр значение переменной, его следует предварительно преобразовать в строковый тип.
Несколько примеров того, как могут выглядеть выражения фильтров, приведены ниже:
1) Fam= 'Сидоров'(выбираются все записи, у которых поле Famимеет значение «Сидоров»);
2) Massa*Kolvo> 100(будут выбраны записи, для которых произведение значения поля Massaна значение поля Kolvoбольше 100);
3) Date>= 03.05.87 and Date<= 03.05.97(отбираются те записи, для которых значение даты, содержащейся в-поле Date,находится в промежутке от 03.05.87 до 03.05.97);.
4) Price <= 500 and Tovar <> 'Диван'(выбираются записи, у которых значение поля Price меньше или равно 500 и при этом значение поля Tovarне равно «Диван»).
Если выражение фильтра имеет ошибки, то при попытке его выполнения возникает исключительная ситуация.
В случае, когда задать условие фильтрации с помощью одного выражения нельзя, можно дополнительно использовать обработчик события OnFilterRecord.
Для того чтобы активизировать фильтр, необходимо свойству Filteredприсвоить значение True.По умолчанию данное свойство имеет значение False.При этом фильтрация не осуществляется, а значение, содержащееся в свойстве Filter,игнорируется.
Свойство FilterOptions(тип TFilterOptions)задает параметры фильтрации и представляет собой произвольную комбинацию таких двух значений:
■ Caselnsensitive- данная опция устанавливает, что регистр букв не будет учитываться при фильтрации, то есть большие и маленькие буквы не различаются. Например, если задано выражение фильтра Name='Иван'и установлен данный параметр, то будут отобраны записи, у которых содержимое поля Nameравно «Иван», «иван», «ИВАН», «ИвАн» и т.д. Все эти значения воспринимаются как одинаковые; ■ foNoPartialCompare- эта опция обеспечивает проверку на полное соответствие значения, задаваемого в выражении фильтра, и содержимого поля. Если данный параметр не используется, то осуществляется проверка на частичное соответствие. Например, выражение фильтра имеет вид Name= 'Иван', тогда для него будут выбраны записи, у которых поле Nameимеет значение 'Иванов', 'Иван', 'Иванченко', 'Иванчихин' и т.д. Если же данный параметр установлен, то будут отобраны только записи, для которых значение поля Nameравно непосредственно «Иван*». При фильтрации по выражению последовательно просматриваются все записи таблицы. Поэтому, если таблица имеет большой объем либо код обработчика события OnFilterRecordслишком длинный, то наложение фильтра может вызывать определенное замедление работы приложения.
Фильтрация по диапазону означает, что из таблицы будут выбираться только те записи, для которых значение указанного поля попадает в заданный диапазон. Этот способ фильтрации можно применять только для индексированных полей (причем индекс поля, по которому осуществляется фильтрация, должен быть установлен как текущий). В связи с использованием индексно-последовательного метода доступа, фильтрация по диапазону производится быстрее, чем фильтрация по выражению. Данный способ применим только для компонента Table.
Для включения фильтрации по диапазону используется метод ApplyRange, а для ее отключения - метод CancelRange.Предварительно для индексного поля, по которому выполняется фильтрация, устанавливается диапазон допустимых значений. Для этого используются методы SetRangeStartи SetRangeEnd,определяющие, соответственно, нижнюю и верхнюю границы диапазона. Эти методы переводят набор данных в режим dsSetKey,после чего с помощью оператора присваивания задаются необходимые значения границ диапазона.
Изменение границ диапазона выполняется при помощи методов EditRangeStartи EditRangeEnd,действие которых аналогично действию методов SetRangeStartи SetRangeEnd.
Свойство KeyExclusive(тип Boolean)определяет, будут ли включены граничные значения в диапазон при его установке. Если данное свойство имеет значение False(по умолчанию), то граница включается в диапазон, если же свойству присвоено значение True,то граница не входит в диапазон. Свойство KeyExclusiveзадается отдельно для верхней и нижней границы сразу* же после вызова методов SetRangeStartи SetRangeEnd.
Для диапазона может быть установлена только одна граница. Если определена только нижняя граница диапазона, то будут выбраны все записи, у которых фильтруемое поле имеет значение большее, чем граничное. Если же задана только верхняя граница, то отбираются записи, для которых значение фильтруемого поля меньше этого граничного значения.
Существует возможность установки фильтра по нескольким полям. В этом случае используется несколько операторов присваивания (для каждого фильтруемого поля), а предварительно должен быть создан индекс по этим полям и установлен в качестве текущего.
Пример фильтрации по диапазону показан ниже.
В результате выполнения данного кода будут отобраны все записи, для которых значение поля Rostнаходится в диапазоне от 150 до 170, а значение поля Ves- от 45 до 65.
Метод SetRangeтакже позволяет осуществлять фильтрацию по диапазону. Этот метод имеет следующий синтаксис:
SetRange (const StartValues, EndValues: array of const.
Этот метод позволяет сразу задать границы диапазона и одновременно произвести фильтрацию. Параметры представляют собой массив констант и содержат, соответственно, значения верхней и нижней границ диапазона. В том случае, когда фильтрация производится по нескольким полям, значения границ перечисляются через запятую. Поля, по которым осуществляется фильтрация, определяются в соответствии с текущим индексом.
Например, установка фильтра, который Позволяет осуществить описанную выше фильтрацию с помощью метода SetRange,выглядит следующим образом:
Tablel.SetRange([150, 45], [170, 65]);
При этом следует помнить, что предварительно обязательно должен быть установлен текущий индекс, построенный по полям
Rostи Ves.
Рассмотрим еще один характерный пример. Пусть требуется выбрать из таблицы всех владельцев автомобиля ВАЗ-2107, фамилия которых начинается с буквы «Р». Задать фильтр для выбора таких записей можно следующим образом.
При выборе фамилий в качестве нижней границы задается «Р», а для установки верхней границы выбора фамилии к символу «Р» добавлена строка «яяя». Фамилии будут выбираться следующим образом. В соответствии с нижней границей будут отобраны все строки, у которых код первой буквы больше кода буквы «Р», т.е. фамилии, начинающиеся с букв Р, С, Т, У, Ф и т.д. Затем из полученного множества значений выбираются те строки, коды первых символов которой меньше кодов букв строки «Ряяя», т.е. фамилии, начинающиеся с букв «Ра...», «Рб...» и т.д., вплоть до «Ря-яю...» (где многоточие означает строку любой длины, состоящую из любых символов). Таким образом, длина фамилии не имеет значения, а выборка осуществляется только по соответствию первых символов строки установленным границам. Другими словами, производится обычный отбор в алфавитном порядке, когда, например, фамилия Рябко стоит в списке ниже, чем Решетников. Поскольку код буквы «я» больше, чем коды других букв, то в результате в набор данных будут включены все записи, поле Famкоторых содержит значение, начинающееся с буквы «Р». Вероятность же того, что при осмысленном заполнении таблицы найдутся записи, содержащие поля, которые включают подстроку «яяя», бесконечно близка к нулю.
Метод CancelRangeпозволяет отменить фильтрацию, выполняемую с помощью методов ApplyRangeили SetRange.
Кроме описанных способов фильтрации, существует также возможность навигации в неотфильтрованном наборе данных между записями, удовлетворяющими фильтру. Для этого служат методы FindFirst, FindLast, FindNextи FindPrior.Они обеспечивают, соответственно, поиск первой, последней, следующей и предыдущей записей, которые удовлетворяют критериям фильтрации, заданным в обработчике события OnFilterRecordили свойством Filter.При этом сам набор данных находится в неотфильтрованном состоянии, то есть метод Filteredимеет значение False.Действие перечисленных методов заключается в следующем: они кратковременно переводят набор данных в отфильтрованное состояние (Filtered=True)без визуализации этой фильтрации в DBGridили другом подобном визуальном компоненте, находят соответствующую запись, устанавливают на. нее курсор и снова переводят набор данных в неотфильтрованное состояние (Filtered=False).Если искомая запись найдена, то методы возвращают значение True,в противном случае - False.
Контрольні питання
1. Надати характеристику поняттям фільтрація та фільтр
2. Надати характеристику фільтрації по вираженню
3. Надати характеристику фільтрації по діапазону
САМОСТІЙНА РОБОТА СТУДЕНТА
ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ
ТЕМА 6.6: ОСНОВИ БАЗ ДАНИХ
Самостійне заняття №42 –Модифікація набору даних
План заняття
1. Характеристика методів, які дозволяють програмно додавати, видаляти та редагувати записи набору даних
2. Характеристика компоненту Table
Это занятие посвящено изучению методов, которые позволяют программно добавлять, удалять и редактировать записи набора данных.
О возможностях визуального изменения набора данных при работе с такими компонентами, как DBGrid, говорилось выше. В главе 13 было рассказано, как пользователь может вручную добавить, удалить или отредактировать записи набора данных, используя для этих целей визуальные компоненты. Для выполнения подобных операций в качестве вспомогательного компонента может также использоваться навигатор DBNavigator.
Чтобы набор данных можно было изменять программным образом, он должен быть модифицируем. Это определяется значением соответствующих свойств наборов данных.
Для компонента Table возможность модификации задается присвоением свойству Readonlyзначения False(по умолчанию). Если данное свойство равно True,то любые изменения таблицы (как визуальные, так и программные) будут запрещены. Изменить значение этого свойства можно только при условии, что набор данных не активен в текущий момент времени. Другими словами, перед изменением свойства Readonlyнабор данных должен быть закрыт.
Свойство CanModify (Boolean)используется для того, чтобы в ходе выполнения приложения проверить, можно ли модифицировать набор данных. Это свойство доступно только для чтения. Если оно имеет значение True,то набор данных можно модифицировать, в противном случае - модификация запрещена.
Существует также возможность запретить автоматический переход в режим редактирования набора данных при работе пользователя с визуальными компонентами, такими, как DBGrid или DBEdit. Для этого необходимо установить значение Falseсвойству AutoEdit(тип Boolean)источника данных DataSource.
Метод Editслужит для перевода набора данных в режим редактирования.
Метод Postзаписывает изменения, внесенные пользователем при редактировании. Данный метод автоматически вызывается при перемещении указателя текущей записи, например, с помощью использования методов First, Last, Next, Priorили MoveBy.
Метод Cancelпозволяет отменить изменения, сделанные при редактировании до того момента, пока они не были сохранены с
помощью метода Post.
Метод SetFields (const Values: array of const)
используется для изменения значений всех или некоторых полей текущей записи. Параметр Valuesпредставляет собой массив значений, которые присваиваются полям текущей записи. Порядок заданных значений соответствует порядку полей в наборе данных.. Если количество значений, заданных параметром Values,меньше числа полей набора данных, то эти значения присваиваются первым полям, а остальные поля не изменяются. Если же количество заданных значений превышает число полей, то при выполнении данного метода будет сгенерирована исключительная ситуация. Чтобы не изменять значение какого-либо поля, ему необходимо присвоить значение nil.В этом случае прежнее значение поля будет сохранено без изменения. Следует различать значения nilи Null.Если вместо nilбудет указано Null,то поле будет изменено и получит значение Null.Редактирование записи с помощью данного метода может выглядеть примерно так: Tablel.Edit;
Tablel.SetFields('0284', 'Порошок стиральный', nil, 500);
При выполнении вышеприведенного кода первому полю записи присваивается значение «0284», второму полю - «Порошок стиральный», третье поле не изменяется, а четвертое получает значение 500.
После выполнения метода SetFieldsнабор данных автоматически переводится в режим просмотра.
Добавление записей имеет много общего с редактированием. Прежде всего, добавление новой записи может осуществляться только в 'том случае, если разрешена модификация набора данных. Подтверждение или отмена произведенных добавлений осуществляется путем применения методов Postили Cancelсоответственно.
Ниже приводятся методы, позволяющие добавить новую запись к набору данных.
Метод Insertпереводит набор данных в режим вставки и добавляет пустую запись в позицию, на которой находится указатель текущей записи. После вызова данного метода необходимо заполнить поля новой записи. Это осуществляется с помощью метода SetFields.Для сохранения сделанных изменений вызывается метод Post.
Метод InsertRecord (const Values: array of const)вставляет новую запись в текущую позицию курсора и одновременно задает значения всех или некоторых ее полей.
Методы Appendи AppendRecordабсолютно аналогичны методам Insertи InsertRecordсоответственно. Единственным отличием является то, что оба эти метода добавляют новую запись в конец набора данных, а не в позицию, на которую указывает курсор.
Метод Deleteпозволяет удалить текущую запись из набора данных. Этот метод применим только к модифицируемым наборам данных.
Использование некоторых из вышеприведенных методов будет продемонстрировано на следующем примере.
Пример 14.2. Пусть необходимо создать приложение, которое позволяло бы производить программную модификацию таблицы БД, содержащей некую справочную информацию о различных животных.
Для решения поставленной задачи, прежде всего, с помощью Database Desktop создается таблица, включающая такие поля: Название животного (Animal),Масса (Weight),Длина тела (Length).
На втором шаге создается главная форма приложения, на которой размещаются соответствующие элементы управления (см. рис. 14.4).
Как видно из рис. 14.4, в верхней части формы расположен компонент DBGrid, в котором отображается содержимое таблицы БД. Ниже размещены три однострочных редактора Edit, в которые пользователь имеет возможность вводить новую информацию. Внизу формы находятся четыре кнопки. Кнопка Добавить обеспечивает добавление содержимого однострочных редакторов в таблицу anim.db.При этом обязательным условием является то, что должны быть введены все данные, а длину и массу тела животного необходимо задавать в числовом выражении. Если пользователь пытается добавить в список новую запись, а там уже имеются данные о таком животном, то выдается соответствующее сообщение и запись не добавляется.
Следует обратить внимание на то, что запись добавляется в конец таблицы с целью иллюстрации использования метода Ар-pendRecord.Специально для того чтобы увидеть результат данного действия, индексирование в данной таблице не используется, и первичный ключ не задается, ибо в противном случае записи будут упорядочены и любая добавляемая запись будет тут же. отображаться в таблице в соответствии с порядком индексирования (следовательно, тот факт, что запись добавляется в конец таблицы, был бы вовсе не очевиден). Если же не задавать первичный ключ и не производить индексирование, то можно будет явным образом увидеть, что метод AppendRecordдобавляет запись в конец таблицы.
Кнопка Вставить обеспечивает вставку новой записи в текущую позицию указателя в таблице. Это позволяет проиллюстрировать использование метода InsertRecordи наглядно показать его отличие от метода AppendRecord.Увидеть это различие также возможно только в том случае, если в таблице не применяется индексирование записей. Если же используется какой-либо индекс, то для пользователя не будет заметна разница между использованием этих двух методов.
С помощью кнопки Изменить можно изменить текущую запись в соответствии с данными, содержащимися в полях редакторов Edit. На изменение данных накладываются те же ограничения, что и на добавление, кроме одного исключения. Изменение производится только для текущей записи. При этом значение, записанное в поле редактора Editl(название животного), не учитывается, а просто производится изменение полей Weightи Lengthдля той записи, на которую в текущий момент времени установлен указатель.
Кнопка Удалить позволяет удалить текущую запись.
Программную реализацию решения поставленной задачи можно видеть в листинге 14.1.
Данная программа не имеет большой практической ценности и носит иллюстративный характер с целью демонстрации использования некоторых методов, позволяющих модифицировать набор данных.
Контрольні питання
1. Надати характеристику методів, які дозволяють програмно додавати, видаляти та редагувати записи набору даних
2. Охарактеризувати компонент Table
АУДИТОРНЕ ЗАНЯТТЯ
ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ
ТЕМА 6.6:ОСНОВИ БАЗ ДАНИХ
Лекція №57 –Робота із зв’язаними таблицями
План заняття
1. Характеристика поняття зв’язана таблиця
2. Характеристика властивостей зв’язаних таблиць
В Delphi существует возможность создавать приложения, обеспечивающие работу с двумя взаимосвязанными таблицами, одна из которых является главной, а другая подчиненной. При этом в подчиненной таблице в каждый момент времени отображаются только те записи, которые соответствуют текущей записи главной таблицы. Наиболее распространенным типом связи двух таблиц является связь один-ко-многим, то есть когда одной записи главной таблицы могут соответствовать несколько записей подчиненной. Кроме этого существует также связь один-к-одному и многие-ко-многим, однако эти типы связи используются относительно редко.
Нижеперечисленные свойства подчиненной таблицы используются для установки связи между двумя таблицами.
Свойство MasterSource (тип TDataSource) содержит ссылку на источник данных, связанный с главной таблицей. Таким образом, это свойство служит для выбора главной таблицы и обеспечивает ее связь с используемой таблицей, которая выступает в роли подчиненной.
Свойство MasterFields (тип String) задает список полей, в соответствии со значениями которых будет осуществляться связь между двумя таблицами. При вызове данного свойства через Инспектор объектов вызывается диалоговое окно Field Link Designer, в пределах которого устанавливается связь между полями главной и подчиненной таблицы (см. рис. 14.5).
Как видно из рис. 14.5, в верхней части представленного диалогового окна расположен разворачивающийся список Available Indexes, позволяющий выбрать необходимый индекс подчиненной таблицы, на основе которого будет формироваться связь с главной таблицей. Ниже в диалоговом окне расположены два списка: слева - поля, входящие в выбранный индекс подчиненной таблицы Detail Fields; справа - поля главной таблицы Master Fields. Проектировщик приложения выбирает одно поле в левом списке и одно в правом, а затем нажимает кнопку Add, размещенную в центре окна. Результат, отражающий связь между полями двух таблиц, помещается в список Joined Fields, расположенный в нижней части диалогового окна.
Результатом установления такой связи будет отображение в подчиненной таблице только тех полей, значения которых совпадают со значением связанного поля текущей записи главной таблицы. Например, если связь между двумя таблицами установлена по полям, содержащим фамилию, имя и отчество студентов (Name -для главной таблицы, Fio - для подчиненной таблицы), и при этом поле Name текущей записи главной таблицы в настоящий момент времени содержит значение «Васильев В.А.», то в подчиненной таблице будут отображаться только те записи, у которых поле Fio имеет значение «Васильев В.А.».
Подобным образом путем поочередного связывания двух таблиц может устанавливаться одновременная связь между тремя и
более таблицами.
Транзакции. В данном разделе представляется целесообразным упомянуть о таком понятии, как "транзакция". Под транзакцией понимается некое комплексное воздействие на БД, переводящее ее из одного целостного состояния в другое. Воздействие заключается в изменении данных в таблицах БД.
Механизм транзакции обеспечивает сохранение смысловой целостности и достоверности информации, содержащейся в таблицах БД. Данный механизм, как правило, используется при работе с несколькими таблицами. Суть его состоит в том, что, если одно из изменений, вносимых в БД в рамках транзакции, завершается неуспешно, должен быть произведен возврат (так называемый откат) к состоянию БД, имевшему место до начала транзакции. Таким образом, либо одновременно подтверждаются все внесенные в БД изменения, либо не подтверждается ни одно из них.
Поясним на примере, о чем идет речь. Допустим, в магазине имеется БД, в которую входят три таблицы, хранящие информацию о продаже товаров. В первой таблице Prodaga.db содержится подробная информация по каждой продаже, такая, как дата продажи, количество проданных единиц товара, номер накладной и т.п. Вторая таблица Tovars. db содержит сведения о продаже каждого товара за некоторый период времени, например за текущий год. В третьей таблице Clients. db хранится информация о продаже товаров каждому покупателю за тот же период времени.
Транзакция, связанная с продажей того или иного товара, будет состоять из такого набора операций:
1) добавление записи в таблицу Prodaga. db;
2)поиск (или добавление) в таблице Tovars. db записи, соответствующей проданному товару, и увеличение общего объема продаж товара данного вида;
3)поиск (добавление) в таблице Clients. db записи, относящейся к сделавшему покупку покупателю и увеличение общей суммы совершенных им покупок.
Предположим, что на одном из шагов произошла ошибка. Например, первый и второй шаги были выполнены успешно, а на третьем шаге случилась ошибка, и он не был завершен. Возникает ситуация, когда две таблицы изменены и содержат корректные данные, а третья таблица не была изменена и, следовательно, содержащаяся в ней информация неверна. Таким образом, это ведет к нарушению смысловой целостности БД. Возможность предупреждать возникновение подобных нарушений и обеспечивает механизм транзакций, который в такой ситуации производит возвращение всей БД к исходному состоянию, отменяя все внесенные изменения.
Для реализации механизма транзакций необходимо.воспользо-ваться следующими методами компонента Database.
Метод StartTransaction начинает транзакцию. Сразу вслед за данным методом в программе должны располагаться операторы, составляющие транзакцию. При выполнении операций должна производиться обработка возникающих исключительных ситуаций для выявления ошибок и отката транзакции в случае необходимости.
Метод Commitутверждает транзакцию в случае, если не возникло никаких исключительных ситуаций. Результатом выполнения данного метода является вступление в силу всех внесенных
изменений.
Метод Rollbackпри возникновении исключительных ситуаций производит отмену данной транзакции и действий всех операций в ее рамках (откат транзакции).
В самом общем виде программная реализация механизма транзакции будет выглядеть следующим образом:
// Начало транзакции Databasel.StartTransaction; try
{Составляющие транзакцию операции по изменению таблиц БД}
// Операции выполнены успешно.
// Утверждение транзакции
Databasel.Commit;
except
// Возникла исключительная ситуация.
// Откат транзакции
Databasel.Rollback;
end;
Применение механизма транзакций возможно как к связанным, так и к несвязанным таблицам. Кроме этого в транзакцию могут быть включены операции, выполняемые над отдельными таблицями.
Контрольні питання
1. Надати характеристику поняття зв’язана таблиця
2. Розглянути властивості зв’язаних таблиць
АУДИТОРНЕ ЗАНЯТТЯ
ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ. ВІЗУАЛЬНІ КОМПОНЕНТИ. БАЗИ ДАНИХ
ТЕМА 6.7: НАВІГАЦІЯ ПО НАБОРУ ДАНИХ. МОВА SQL. СТВОРЕННЯ ДОВІДКОВОЇ СИСТЕМИ
Лекція №58 –Робота з таблицями та індексами
План заняття
1. Характеристика поняття таблиця
2. Характеристика поняття індекс
Прежде всего, рассмотрим несколько методов, которые позволяют осуществлять различные операции с таблицей БД в целом.
Метод CreateTableслужит для динамического создания новой таблицы БД. Перед вызовом данного метода требуется определить структуру таблицы (т.е. описать все ее поля), задать расположение БД, имя и тип таблицы, а также определить индексы при необходимости. Это осуществляется путем установки соответствующих свойств.
Свойство DatabaseNameзадает имя базы данных, которое, собственно говоря, прямо или косвенно указывает место расположения БД на диске. Этому свойству можно прямо задать путь к каталогу, где содержится БД, либо указать имя заранее определенного псевдонима, либо установить в качестве значения свойства пустую строку, в том случае, если БД располагается в том же каталоге, что и исполнимый файл приложения.
Имя файла, содержащего таблицу БД, задается с помощью свойства TableName.
Тип таблицы определяет свойство ТаЫеТуре,которое может иметь одно из следующих значений:
■ ttDef ault- тип таблицы определяется на основе расширения имени файла таблицы (если расширение отсутствует, то принимается формат Paradox);
■ ttParadox -тип Paradox;
■ ttDBase -тип dBASE;
■ ttFoxPro -тип FoxPro;
■ ttASCII -тип ASCII(обычный текст, разбитый на колонки).
Свойство FieldDef sзадает список полей таблицы при ее создании с помощью метода CreateTable,перед вызовом которого должно быть определено хотя бы одно поле новой таблицы. Прежде всего, содержимое свойства FieldDefsдолжно быть удалено с помощью метода Clear,так как в нем может содержаться информация о полях другой таблицы, с которой ранее был связан набор данных. Затем осуществляется добавление новых полей в список. Для этого используется метод Add,который имеет такой синтаксис:
Add (const Name: String; DataType: TFieldType; Size:Word;Required: Boolean).
Здесь параметр Nameзадает имя поля, параметр DataType-тип поля, параметр Size- размер поля, а параметр Requiredопределяет, должно ли поле содержать некоторое значение или может оставаться пустым.
Для определения индексов используется свойство IndexDef s.По аналогии со свойством FieldDef s,содержимое свойства IndexDefsтакже изначально удаляется с помощью метода Clear,а затем с помощью метода Addlndexв список добавляются новые индексы. Для удаления индексов используется метод Deletelndex.Следует иметь в виду, что в случае определения индексов после создания таблицы необходимо установить текущий индекс, обновив значения свойств IndexNameили IndexFieldNames,поскольку они могут указывать на индекс предыдущей таблицы, с которой ранее был связан набор данных.
Нижеприведенный листинг содержит фрагмент программного кода, который показывает пример создания новой таблицы БД.
// Закрытие набора данных
Tablel.Active:= False; // Установка параметров таблицы Tablel.DatabaseNarae:= 'NewBD'; Tablel.TableName:= 'TableNew'; Tablel.TableType:= ttParadox; // Определение полей таблицы Tablel.FieldDefs.Clear; Tablel.FieldDefs.Add('Tab_no_true); Tablel.FieldDefs.Add('Fio', ftString, 50, true); Tablel.FieldDefs.Add('Position' ,ftString, 30, false);
Tablel.FieldDefs.Add('Salary', ftCurrency, 0, false);
// Описание индексов
Tablel.IndexDefs.Clear; Tablel.IndexDefs.Add(Tab_no', [ixPrimary, ixUnigue]);
Tablel.IndexDefs.Add('indS', 'Salary',[ixDescending]);
// Создание таблицы Tablel.CreateTable;
// Задание текущего индекса
Table1.IndexName:= >indS';
//Активизация (открытие) набора данных,
// связанного с созданной таблицей
Tablel.Active:=,True;
В результате выполнения данного кода в каталоге, определяемом псевдонимом NewBD,будет создана таблица типа Paradoxс именем TableNew,представляющая собой список сотрудников фирмы. Таблица будет содержать четыре поля: Tabjno(табельный номер сотрудника), Fio(фамилия, имя, отчество сотрудника), Position(должность) и Salary(заработная плата). Для таблицы установлены два индекса: первый представляет собой первичный ключ (индексит рование производится по табельному номеру сотрудника), а второй называется indSи обеспечивает индексирование по убыванию размера заработной платы (Salary).После создания таблицы в качестве текущего выбирается именно второй индекс indS.
Метод DeleteTableпозволяет удалить таблицу БД в процессе выполнения приложения. При вызове данного метода происходит удаление с диска всех файлов, связанных с таблицей БД, имя и расположение которой определяется значением свойств TableNameи DatabaseNameсоответственно. Набор данных следует закрыть перед удалением таблицы.
МетодRenameTable (const NewTableName: String)используется для переименования таблицы БД. Параметр NewTableNameзадает новое название таблицы.
Контрольні питання
1. Надати характеристику поняття таблиця
2. Надати характеристику поняття індекс
АУДИТОРНЕ ЗАНЯТТЯ
ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ. ВІЗУАЛЬНІ КОМПОНЕНТИ. БАЗИ ДАНИХ
ТЕМА 6.7: НАВІГАЦІЯ ПО НАБОРУ ДАНИХ. МОВА SQL. СТВОРЕННЯ ДОВІДКОВОЇ СИСТЕМИ
ОБОВ’ЯЗКОВА КОНТРОЛЬНА РОБОТА №63
Контрольна робота по темі: «Створення консольних прикладних застосувань
1. Охарактеризуйте тип змінних типу integer і real.
2. Охарактеризуйте ключові слова end і type.
3. Охарактеризуйте ключове слово const.
4. Охарактеризуйте директиву $ APPTYPE.
5. Написати додаток для консолі з висновком значення типу string. Ввести 20 символів ABОCDENGAQUTOLBNDLOP і т.д. вивести 11 символ даної послідовності. Використовувати змінну k типу string.
6. Написати додаток для консолі з висновком значення типу char. Ввести символ P типу char. При вирішенні задачі використовувати змінну е.
7. Написати додаток для консолі з обчисленням пройденого шляху двома мандрівниками, якщо відомо, що перший витратив на шлях від пункту А в пункт В 0.57 години, а другий 0.73 години. Також відомо, що перший йшов зі швидкістю 3.7 км / год, а другий 4.2 км / год. Визначте який мандрівник пройшов більшу відстань. При обчисленні задачі використовувати змінні типу real, s - шлях, t - витрачений час, v - швидкість пересування. Всі оператори оформляти із вводом пояснюючих зазначень.
8. Дано 2 числа, вивести більше з них. Всі оператори оформляти із вводом пояснюючих зазначень. Використовувати змінні s1 і s2 як змінні цілого типу. S1 ввести як рівне 34, а S2 ввести як рівне 76.
9. Дано ціле число. Додати до нього 1 і відняти від нього 2; якщо число стало більше 15, то вивести отримане число, якщо число стало менше вивести «результат менше 15». Використовувати змінні s1 і y - як змінні цілого типу. S1 ввести як рівне 111. Всі оператори оформляти із вводом пояснюючих зазначень.
10. Дано два числа. Вивести спочатку більше, а потім менше з них. Всі оператори оформляти із вводом пояснюючих зазначень. Використовувати змінні s1 і s2 як змінні типу цілі числа. S1 ввести 289, число s2 ввести 754.
11. Написати програму, яка обчислює суму перших n цілих позитивних чисел. Кількість суммуємих чисел повинно вводитися під час роботи програми. Вихідні дані використовувати змінну k - цілого типу. Всі оператори оформляти із вводом пояснюючих зазначень.
12. Написати програму, яка виводить таблицю ступенів двійки від 0 до 10. Всі оператори оформляти із вводом пояснюючих зазначень. При вирішенні задачі використовувати наступні змінні t - показник ступеня; x - значення x в ступені n.
АУДИТОРНЕ ЗАНЯТТЯ
ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ
ТЕМА 6.7: НАВІГАЦІЯ ПО НАБОРУ ДАНИХ. МОВА SQL. СТВОРЕННЯ ДОВІДКОВОЇ СИСТЕМИ
Лекція №59 –Звіти
План заняття
1. Поняття звіту
2. Характеристика сторінки QReport
Отчетом называется печатный документ, в котором содержится информация, полученная из некоторого набора данных. Существуют разные возможности создания отчетов, например, публикация данных в виде документа Word или в виде электронной таблицы Excel, но все же более часто для этой цели используются специализированные компоненты. В предыдущих версиях Delphi для построения отчетов применяется генератор отчетов QuickReport, отдельные компоненты которого располагались на странице QReport Палитры компонентов. В Delphi 7 на смену ему пришел новый генератор отчетов - Rave Reports. Компоненты для взаимодействия между наборами данных и генератором отчетов представлены на странице Rave Палитры компонентов, а непосредственно проектирование отчетов ведется с помощью специализированного визуального дизайнера отчетов Rave Visual Designer, который был разработан компанией Nevrona Designes.
Rave Reports используется в приложениях для генерации отчетов, составленных на основе информации, получаемой из базы данных. Это инструментальное средство позволяет создавать текстовые отчеты, а также отчеты в формате PDF, HTML и RTF, в том числе с использованием графики и различных шрифтов. Продемонстрировать работу Rave Reports легче всего на небольшом примере, который показывает, как добавить простой отчет к существующему приложению базы данных.
Пример 14.3. Пусть необходимо создать программу, которая бы генерировала простейший отчет из таблицы БД anim.db(см. пример 14.2).
Решение. Рассмотрим последовательность шагов, которые необходимо сделать для решения поставленной задачи.
1. Вначале нужно создать в Delphi новое приложение и поместить на форму компонент Table, который связать с таблицей БД anim.dbпутем задания соответствующих значений свойствам DatabaseNameи TableName.
2.Затем следует перейти к странице Rave Палитры компонентов, отыскать там компонент RvDataSetConnection '">£"'< и добавить его на форму.
3. После этого в Инспекторе объектов для данного компонента необходимо установить в свойстве DataSetссылку на компонент набора данных Table, который уже определен в приложении.
4.Далее, используя визуальный дизайнер Rave Visual Designer для разработки отчета, надо создать проектный файл отчета (RAV-файл). Это, в свою очередь, требует выполнения следующей последовательности действий:
■ выбрать в Delphi пункт меню Tools \ Rave Designer для вызова Rave Visual Designer, выбрать в Rave Visual Designer пункт меню File | New Data Object для отображения диалогового окна Data Connections;
в списке Data Object Type выбрать Direct Data View и нажать кнопку Next;
■ списке Active Data Connections выбрать RVDataSetCon-nectionlи нажать кнопку Finish, после чего в левой части окна дизайнера отчетов Rave Visual Designer будут показаны свойства компонента DataViewl;
■ выбрать пункт меню Tools | Report Wizards \ Simple Table для отображения мастера отчетов Simple Table;
■ выбрать Data Viewl и нажать кнопку Next;
■ выбрать несколько полей, которые нужно отобразить в отчете, и нажать кнопку Next;
■ следуя указаниям на последующих страницах мастера, установить порядок отображения полей, границы, текст заголовка и шрифты, которые будут использоваться в отчете;
■ на последней странице мастера нажать кнопку Generate для завершения его работы с последующим отображением отчета в дизайнере страниц Page Designer, расположенном в правой части окна;
выбрать пункт меню File \ Save для вывода на экран диалогового окна Save As, после чего перейти в каталог, в котором будет расположено создаваемое приложение Delphi, и сохранить файл проекта Rave, как Project! .rav. В окончательном виде окно Rave Visual Designer будет;
выглядеть, как показано на рис. 14.6.
5.Затем следует выбрать на странице Rave компонент RavefiV проекта RvProject . И добавить его на форму.
6.После этого в Инспекторе объектов нужно установить в свойстве ProjectFileссылку на файл проекта отчета (Рго-jectl.rav), который был создан на предыдущем шаге.
Далее необходимо поместить на форму кнопку Button. В результате выполнения всех вышеперечисленных действий форма на этапе проектирования принимает такой вид, как показано на рис. 14.7.
8.Теперь следует дважды щелкнуть мышью по кнопке Buttonl, в результате чего будет создан обработчик события OnClick.
9.Затем надо написать обработчик событи
Дата добавления: 2014-12-01; просмотров: 1387;