Лабораторные работы по базам данных в Delphi. Лабораторная работа 1 Цель работы Ознакомить с утилитой Database Desktop
Скачать 1.29 Mb.
|
Лабораторная работа № 3 Цели работы: Ознакомиться с сортировкой записей в базе данных. Поиск полей с помощью методов Locate и Lookup; Сортировка: Порядок расположения записей в таблице БД может быть неопределенным. По умолчанию записи не отсортированы или сортируются, например, для таблиц Paradox по ключевым полям, а для таблиц dBase в порядке их поступления в файл таблицы. С отсортированными записями набора данных работать более удобно. Сортировка заключается в упорядочивании записей по определенному полю в порядке возрастания или убывания содержащихся в нем записей. Сортировка набора данных TTable выполняется автоматически по текущему индексу. При смене индекса происходит переупорядочивание записей. Таким образом, возможна по полям, для которых создан индекс. Для сортировки по нескольким полям нужно создать индекс, включающий эти поля. Задать индекс, по которому выполняется сортировка записей, можно с помощью свойств: IndexName – указывается имя индекса, установленное при его создании; IndexFieldName – указываются имена полей, образующий соответствующий индекс. Откроем приложение. Добавим на форму компоненты ComboBox и Button. В свойстве Items компоненты ComboBox запишем параметры сортировки: Фамилия, Специальность, Курс, Дата рождения, Номер зачетки. Условия сортировки задаются вторичными индексами. То есть сортировка по фамилии происходит по вторичному ключу IDFio так как в него первым входит поле SFio. Для того, чтобы сортировка проходила по выбранным параметрам необходимо вхождение соответствующих полей в разные вторичные ключи. Текст процедуры для события OnClick при нажатии кнопки «Сортировка» на форме Студенты: begin Case ComboBox1.ItemIndex of 0: Table1.IndexFieldNames:='SFio'; //привыборестроки «Фамилия» //сортировка идет по вторичному индексу IDFio 1: Table1.IndexFieldNames:='SSpec'; 2: Table1.IndexFieldNames:='SKurs'; 3: Table1.IndexFieldNames:='SData'; 4: Table1.IndexFieldNames:='SNom'; end; end; Замечание: во вторичный индекс IDFioвходят поля: SFio, SKurs, SSpec. То есть при совпадении фамилии сортировка идет уже по курсу и т.д. Пример: Поиск: Метод Locate ищет первую запись, удовлетворяющую критерию поиска, и если такая запись найдена, делает ее текущей. В этом случае в качестве результата возвращается значение True. Если запись не найдена, возвращается значение False и курсор не меняет своего положения. function Locate (const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean; Список полей, по которым ведется поиск, задается в параметре KeyFields, поля разделяются точкой с запятой. ПараметрKeyValues типа Variant указывает значение полей для поиска. Если поиск ведется по одному полю, то параметр содержит одно значение, соответствующие типу поля, заданного для поиска. Параметр Options позволяет задать значение, которое обычно используется при поиске строк. Этот параметр принадлежит к множественному типу TLocateOptions и принимает комбинации следующих значений: LoCaseInsensitive –регистр букв не учитывается; LoPartialKey – допускается частичное совпадение. На форму добавить компоненту Edit. Текст процедуры для события OnChange компоненты Edit на форме Студенты: begin table1.Locate('SFio',Edit1.Text,[loPartialKey]); end; Поиск записи по фамилии организован. Регистр букв не учитывается. Метод Lookup находит запись, удовлетворяющую условию поиска, но не делает ее текущей, а возвращает значения некоторых ее полей. Независимо от результата поиска записи указатель текущей записи в НД не изменяется. В отличие от метода Locate, метод Lookup осуществляет поиск только на точное соответствие критерию поиска значения поля поиска записи. function Lookup (const KeyFields: String; const KeyValues: Variant; const ResultFields: String): Variant; В параметре ResultFields перечисляются поля, значения которых требуется получить в случае успешного поиска. Тип результата – Variant или вариантный массив. Добавить на главную форму новую кнопку «Поиск». Открыть новую форму и ввести компоненты как показано на рисунке. Эта форма вызывается нажатием кнопки поиска на главной форме. Поиск будет происходить по фамилии введенной в компоненте Edit1 после нажатия кнопки на форме «Поиск методом Lookup». procedure TForm5.Button1Click(Sender: TObject); var LookupResult: Variant; begin LookupResult:=Form1.Table1.Lookup('SFio', Edit1.Text, 'SData; SOsn; SNom; SSpec; SKurs'); //ищемполя 'Датарождения' //’Основание’, ’Номерзачетки’, ’Специальность’, ’Курс’ if VarIsArray (LookupResult) then begin Edit2.Text:=LookupResult[0]; //записываетзначения Edit3.Text:=LookupResult[1]; // вискомыхполяхв Edit4.Text:=LookupResult[2]; //соответствующие Edit5.Text:=LookupResult[3]; //компоненты if Edit5.Text='False' then Edit5.Text:='Физика' //поискполейлогическоготипа else Edit5.Text:='Математика'; Edit6.Text:=LookupResult[4]; end; end; Лабораторная работа № 4 Цели: Ознакомиться с фильтрацией записей. Фильтрацию можно отнести к одному из методов поиска. Потому что фильтрация – выбор из набора данных только тех записей, которые удовлетворяют конкретным условиям. Например, можно указать отображение только записей, в которых поле «Фамилия» содержит значение «Иванов». Применение фильтра к набору данных определяется свойством Filtered логического типа. Значение True определяет применение в качестве фильтра выражения, указанного в свойстве Filter: Поле [Оператор сравнения] ‘Значение’ Например, если отобразить все записи, в которых поле «Фамилия» равно значению «Сидоров», то нужно указать: Table1.Filter:=’Фамилия=’’Сидоров’’’; Фильтрация записей: Открыть приложение. Добавить на форму компоненту TEdit. Текст процедуры для события OnChange: begin Table1.Filtered:=true; //включениефильтрации Table1.Filter:='SNom = ‘+Edit2.Text; //задаеткритерийфильтрации end; Этот способ фильтрации пригоден только для числовых полей. При применении фильтра можно указать свойства: foCaseInsensitive – нечувствительность к регистру букв; foNoPartialCompare – поиск на точное соответствие. Для фильтрации текстовых полей, например по полю «Фамилия» необходимо изменить текст процедуры. procedure TForm1.Edit2Change(Sender: TObject); begin Table1.Filtered:=true; Table1.Filter:='SFio='+#39+Edit2.Text+'*'+#39; end; В этом случае фильтрация проходит по текстовому полю. Знак «#39» означает знак апострофа, так как ввод фамилии при использовании фильтра происходит в апострофах. А символ «*» означает любые символы, то есть при вводе только одной буквы на экране появятся все фамилии начинающиеся на букву. Лабораторная работа № 5 Цели: Усвоить возможность связи таблицам. Установка связи между таблицами: Для демонстрации связи между таблицами необходимо создать еще одну таблицу. Создайте таблицу успеваемости студентов. В нее войдут поля: учебный год, сессия (зима или лето), предмет, ФИО преподавателя, дата аттестации по предмету, дата сдачи, оценка. Эта таблица будет дочерней для таблицы Студенты. В таблице Успеваемость надо ввести дополнительно числовое поле и определить его вторичным ключом. Разместите таблицу успеваемости на форме Студенты. В свойстве компоненты Table2 Master Source написать Data Source1. Это означает, что вторая таблица станет дочерней для первой. Двойным щелчком по свойству Master Fields вызовем окно Field Link Designer (Дизайнер поля связи): Выбрать в списке Available Index (Доступные индексы)изокна Field Link Designer индекс IDGod(это вторичный индекс второй таблицы). В левом списке Detail Field выделить IdU, а в правом списке Master Field (Основа) выделить Ind. Нажать на кнопку Add (Добавить) и закрыть окно. Таким образом между таблицами установилась связь. Она называется связь один ко многим. К дочерней таблице добавить кнопки для ввода и редактирования данных также как и для таблицы Студенты. Лабораторная работа № 6 Цели работы: Ознакомиться с возможностью создания отчета. Создание отчетов: Отчет — это печатный документ, содержащий записи БД. В Delphi для создания отчетов служит генератор отчетов QuickReport, содержащий обширный набор компонентов. Компоненты, предназначенные для создания отчетов, находятся на закладке QReportпалитры компонентов. Главным элементом отчета является компонент-отчет QuickRep, представляющий собой основу, на которой размещаются другие компоненты. Компонент QuickRep обычно размещается на отдельной форме, предназначенной для создания отчета. Свойства компоненты QuickRep: Bands– здесь указываются компоненты размещаемые в QuickRep. DataSet– здесь указывается набор данных из которой отчет будет брать данные. Frame– здесь указывается параметры рамки. Options– здесь доступны три параметра. Если FirstPageHeaderравно true, то заголовок печатается только на первой странице отчета. Если LastPageFooterравен true, то нижний колонтитул печатается только на последней странице отчета. Если установить свойство Compressionв true, то отчет будет сохраняться в сжатом виде. ReportTitle– здесь находится заголовок печатаемого документа. SnapToGrid– нужно ли выравнивать компоненты по установленной сетке. Zoom– масштаб отображения данных. Настройку параметров отчета можно выполнить с помощью окна Report Settings, вызываемый двойным щелчком мыши по компоненте QuckRep. Предпочтительно пользоваться именно этим окном, так как здесь всегда можно просмотреть будущий результат. Открыть приложение «Студенты». Добавить на главную форму кнопку «Создание отчета». Создать новую форму «Отчет», которая будет вызываться нажатием на кнопку «Создание отчета». На форму установить компоненту QuickRep с закладки QReport. Выделить этот компонент и в объектном инспекторе включить параметры HasTitleи HasDetailсвойства Bands. Расположим компоненты в секциях QuickRep1, которые будут отображать нужную информацию отчета. На закладке QReportпалитры компонентов доступны следующие компоненты, которые можно расположить в этих разделах: QRLabel– надпись. Этот компонент похож на стандартный компонент TLabelи просто отображает нужные данные. QRDBText– данные. Этот компонент тоже похож на TLabel, только он предназначен для отображения значения какого либо поля из базы данных. QRSysData– системная информация. Это опять копия TLabelтолько с возможностью отображать системную информацию – дату, время, номер страницы, номер строки в таблицы, общее количество страниц и т.д. QRImage– картинка. Компонент схожий с TImage. Увеличить область заголовка Title. В верхний угол поместите один компонент QRSysData. Выделить его и в свойстве Data выбрать значение qrsDateTime. Теперь этот компонент будет отображать в правом, верхнем углу дату распечатки документа. В центре области Tittle установить компонент QRLabel, увеличь шрифт в свойстве Fontи написать в свойстве Captionтекст «Студенты». Расположить в области Tittle компоненты QRLabelи дать им заголовки: ФИО, Дата рождения, Номер зачетки, Специальность, Курс. Перейти к области Detail. Под заголовками поставить пять компонентов QRDBText. Установить в свойстве DataSet компонентов QRDBText набор данных - Form1.Table1, а в свойстве DataField для QRDBText1указать SFio. У всех остальных компонентов QRDBText указать соответствующие имена полей. Перейти в главный модуль и по нажатию кнопки “Печать” написать следующий код. procedure TForm1.SpeedButton5Click(Sender: TObject); begin Form4.QuickRep1.Preview; //вызываетсяметодPreview //компонента QuickRep. Этот метод показывает окно //предварительного просмотра созданного документа. еnd; Запустить программу, выделить какую-нибудь строку и нажать кнопку печати. Откроется окно предварительного просмотра. Выделить компонент QuickRep1и в свойстве DataSetуказать таблицу Form1.Table1. Если сделать это, то компонент QuickRep1автоматически будет перебирать все записи из этой таблицы и использовать их в компонентах, которые стоят в блоке DetailBand1. После этого в отчете появятся все записи таблицы: Установить на форму отчета компонент – QRSubDetailс закладки QReport. Этот компонент предназначен для перебора данных относящихся к подчиненным таблицам. Установить следующие свойства: DataSet– Form1.Table2, чтобы связать блок с таблицей Uspevaemost.db, которая является подчиненной к основной Studenti.db. В свойстве Master нужно указать главный компонент с основными данными. Выбрать в этом свойстве QuickRep1. Расположить на компоненте QRSubDetail компоненты QRDBTextв свойстве указав, к каким полям подчиненной таблицы они обращаются. Получится следующий вид отчета: |