Сделай Сам Свою Работу на 5

Table1.Locate('Фамилия;Имя',





Лабораторная работа №11

Тема: «Создание псевдонима базы данных. Работа с полями набора данных».

Цель: Приобретение практических навыков создания программных приложений с использованием баз данных.

Задание к работе:

  1. Разработать интерфейс.
  2. Разработать алгоритм решения задачи.
  3. Проверить работоспособность.
  4. Оформить отчет и сдать работу.

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

Ход работы

  1. Создать в базе данных MS Access следующие таблицы. Таблица 1 - LichData
Поле Идентификатор Тип данных Дополнительные характеристики
Идентификационный номер ID числовой Ключевое поле
Фамилия Fam текстовый 25 символов, индексированное (совпадения допускаются)
Имя Im текстовый 25 символов, индексированное (совпадения допускаются)
Отчество Ot текстовый 25 символов.
Пол Pol текстовый 3 символа, формат «муж/жен»
Семейное положение Sem_p логический Формат «да/нет»
Дети Deti числовой Байт
Дата рождения Dtr дата/время Краткая форма даты, маска «00.00.0000»
Дата поступления Dtp дата/время Краткая форма даты, маска «00.00.0000»
Стаж Stag числовой Байт
Образование Obraz текстовый 30 символов
Военнообязанный VOb логический Формат «Да/Нет»

Таблица 2 – Telephones



Поле Идентификатор Тип данных Дополнительные характеристики
Сотрудник Sotr числовой Длинное целое. Не ключевое
Телефон Tel текстовый 17 символов, маска #(###)-###-##-##,
Примечание Prim текстовый 10 символов, формат «Рабочий/домашний/мобильный»

Таблица 3 – Doljnost

Поле Идентификатор Тип данных Дополнительные характеристики
Сотрудник Sotr числовой Длинное целое. Не ключевое
Отдел Otdel текстовый 15 символов
Должность Doljn текстовый 20 символов

Таблица 4 – Adres



Поле Идентификатор Тип данных Дополнительные характеристики
Сотрудник Sotr числовой Длинное целое. Не ключевое
Страна Strana текстовый 15 символов
Город Gorod текстовый 20 символов
Домашний адрес Dom_adr текстовый 100 символов
  1. Создаем псевдоним базы данных

Открываем Пуск-Все программы-Borland Delphi 7-BDE Administrator

В меню Object выбираем ODBC Administrator

В открывшемся окне нажимаем на кнопку «Добавить» и выбираем драйвер

В открывшемся окне в «Имя источника данных» указать псевдоним, далее добавить базу данных нажатием кнопки «Добавить». После этого нажать «OK».

  1. Запустите Delphi 7
  2. Создайте модуль данных( File-New-Data Module). Переименуйте его в DM.
  3. В модуль данных добавьте c вкладки BDE: компонент DataBase и 4 компонента Table; с вкладки Data Access: 4 компонента DataSource.
  4. Подключим базу данных к приложению. Для этого изменим свойства у компонента DataBase1.

В AliasName выберите из списка псевдоним вашей БД. В DataBaseName укажите Otdel (Это имя будет использовать приложение для обращения к бд). Установите False в Login Prompt, чтобы приложение не запрашивало пароль при подключении БД. Далее установите True в свойстве Connected.

  1. Далее выделите 4 компонента Table и в свойстве DateBaseName выберете Otdel
  2. Выберете компонент Table1. Переименуйте его, указав в свойстве Name TLichData. В свойстве TableName выберете из списка таблицу LichData.
  3. Проделайте те же действия с 3 другими компонентами Table.
  4. Далее выберете компонент DataSource1. Переименуйте в DSLichData и в свойстве DataSet выберете TLichData.
  5. Выполните те же действия с 3 другими компонентами Data Source.
  6. Теперь между таблицами установим связь.
  7. Выделите модуль данных. Щелкните дважды по первой таблице, чтобы открыть редактор полей. Правой кнопкой щелкните по этому редактору и выберете команду Add all fields. В редакторе полей появятся все поля таблицы. Редактор полей предназначен для настройки параметров каждого поля, для добавления новых полей или удаления имеющихся. В редакторе для каждого поля мы можем изменить различные параметры.
  8. В таблице LichData скроем поле ID для этого выделите это поле, и в свойстве Visible установите False. Теперь для пользователя это поле будет невидимым. Выберете поле Sem_p, в свойстве DisplayValues присвойте значение «Женат; холост». Для поля VOb в этом же свойстве укажите «Да;Нет». Для полей типа Дата в свойстве MaskEdit введите маску «##.##.####».
  9. Таким же образом добавьте поля в остальные 3 таблицы. У них невидимым следует сделать поле «Sotr». Для поля «Tel» таблицы Telephones следует изменить свойство EditMask. Открыв редактор маски введите маску «#(###)-###-##-##» и сохраните ее.
  10. Далее кнопкой F12 перейдите в редактор кода. Перейдите на вкладку Diagram, расположенную в нижней части окна. Для начала в окно диаграмм нужно добавить наши таблицы. Перетащите их в окно диаграмм из Object TreeView. Таблицы вместе с полями должны отобразиться в окне. Установим связи. Для этого нажмите кнопку Master/Detail Connector, расположенную в верхней части окна. Подведите указатель мыши к боковой границе главной таблицы, нажмите левую кнопку и, удерживая ее, проведите линию к боковой границе другой таблицы. Как только вы отпустите кнопку, появится окно связей. В поле Detail Fields выберете поле по которому осуществляется связь (поле «Sotr»). В поле Master Fields выбираем ключевое поле (ID). Затем нажимаем кнопку ADD и кнопку OK. Связь установлена. Установите связи со всеми таблицами.

Содержание отчета:



1. Номер, тема, цель лабораторной работы.

2. Задание к работе.

3. Вывод о проделанной работе.

 

Лабораторная работа №12

Тема: « Работа с таблицами. Навигация по набору данных».

Цель: Приобретение практических навыков создания программных приложений с использованием баз данных.

Задание к работе:

1. Создайте форму следующего вида.

2. Поместите три обычных панели. Свойству Align верхней панели присвойте значение alTop (весь верх). Затем свойству Align нижней панели присвойте значение alBottom. Затем поместите компонент Splitter с вкладки Additional панели инструментов, и его свойству Align также присвойте alBottom, после чего он прижмется к нижней панели. Splitter - это разделитель между панелями. С его помощью пользователь мышью сможет передвигать нижнюю панель, меняя ее размеры. И, наконец, свойству Align средней панели присвойте значение alClient, чтобы она заняла все оставшееся место на форме. Не забудьте очистить свойство Caption всех трех панелей.

Далее на верхнюю панель поместите три компонента RadioButton с вкладки Standard палитры компонентов. В их свойствах Caption напишите, соответственно, "Адрес", "Телефоны" и "Должность". Переключаясь между ними, пользователь сможет выводить в нижнюю, подчиненную сетку DBGrid нужные данные. Свойству Checked первой радиокнопки присвойте значение True, чтобы включить ее. Раздел с переключателями разделите компонентом Bevel с вкладки Additional палитры компонентов. Его ширину (свойство Width) сделайте равным 2 пикселям, превратив его в вертикальную разделительную полосу.

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

В последнем разделе верхней панели находятся еще две кнопки BitBtn. Одна из них предназначена для редактирования текущей записи, другая - для добавления новой.

Вторая и третья панели содержат только по одному компоненту DBGrid из вкладки DataControls палитры компонентов, свойствам Align которых присвоено значение alClient.

3. Подключите модуль данных нажатием File-Use Unit.

4. Во всех таблицах в свойстве Active установите True.

5. Выделите верхнюю сетку DBGrid, в ее свойстве DataSource выберите DM.DSLichData. В таком же свойстве нижней сетки выберите DM.DSAdres. Сетки среагировали, и вы можете видеть названия полей. Разумеется, таблица еще пуста, данных пока нет. Кстати, выделите обе сетки, и установите в True их свойства ReadOnly - только чтение. Таблицы ведь будут связаны, и нам не нужно, чтобы пользователь вводил данные фрагментарно. Мы для этого сделаем отдельную форму, а эти сетки нужны только для просмотра.

6. Теперь нужно сделать окно редактора данных. Создайте новую форму (File -> New -> Form). Ее свойство. Командой File -> Use Unit подключите к форме модуль данных DM. Теперь нам нужно установить на форму такие компоненты:

Установите на форму четыре панели GroupBox с вкладки Standard, на каждую таблицу свой GroupBox.

Для таблицы LichData: в свойстве Caption компонента GroupBox1 впишите "Личные данные", это название отразится в заголовке панели. Далее на эту панель следует установить девять компонентов DBEdit с вкладки DataControls палитры компонентов, два DBCheckBox для редактирования логических данных, и один компонент DBComboBox для списка. Поясняющие компоненты Label установите и настройте самостоятельно. DBComboBox. Щелкните дважды по свойству Items компонента DBComboBox, открыв редактор. В нем введите две строки:

муж

жен

Сохраните текст, нажав кнопку ОК. Теперь пользователь сможет указать пол сотрудника, выбрав нужную строку из списка.

Для таблицы Doljnost: на панели GroupBox установите два компонента DBEdit и два поясняющих Label.

Для таблицы Adres используйте три DBEdit.

А для таблицы Telephones понадобится один DBEdit, один DBComboBox, сетка DBGrid и кнопка BitBtn. Сетка нужна для контроля введенных телефонов, ведь здесь связь один-ко-многим, и телефонов может быть несколько. В редакторе Items компонента DBComboBox введите три строки:

Рабочий

Домашний

Мобильный

7. Теперь займемся подключением компонентов контроля. Удерживая <Shift>, выделите все компоненты контроля на первой панели (все компоненты, кроме Label). В их свойстве DataSource выберите DM.DSLichData, подключив компоненты к нужному набору данных (таблице). Снимите общее выделение, и выделите первый DBEdit. В его свойстве DataField выберите поле "Фамилия". Это свойство подключает выбранный компонент к определенному полю таблицы. Таким же образом подключите к соответствующим полям остальные компоненты. Затем подключайте компоненты других таблиц, каждое к своей таблице и к соответствующему полю. Сетка DBGrid подключается к DM.DSTelephones, она отображает все видимые поля таблицы.

8. В правой нижней части для удобства пользователя установите навигационный компонент DBNavigator с вкладки Data Controls. В его свойстве DataSource установите DM.DSLichData, чтобы подключить компонент к главной таблице. В свойстве VisibleButtons переведите в False все кнопки, кроме nbFirst, nbPrior, nbNext и nbLast. Нажатие на эти кнопки приведет к вызову соответствующих методов компонента.

9. Для сохранения информации после ввода информации в первой таблице при переходе к следующей необходимо прописать процедуру. Для этого выделите первый GroupBox, и дважды щелкните по событию onExit на вкладке Events инспектора объектов. Это событие происходит всякий раз, когда пользователь перейдет к другой панели GroupBox, либо к кнопкам, расположенным в нижней части окна. В сгенерированной процедуре впишите код:

10. Сгенерируйте событие onExit для оставшихся панелей GroupBox и таким же образом сохраните изменения записей в соответствующих таблицах.

11. Далее сгенерируйте событие нажатия на кнопку "Добавить" в GroupBox с телефонными данными. Этой кнопкой мы будем добавлять новые записи в таблицу, ведь один сотрудник может иметь более одного телефона. Код в процедуре будет такой:

Вначале мы сохраняем измененные значения, если они были. Затем методом Append мы добавляем в таблицу новую запись.

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

12. В процедуре нажатия на кнопку "Сохранить и выйти" код простой:

13. Здесь мы лишь сохраняем изменения во всех таблицах, если они были, и закрываем окно. Напоследок у нас осталась кнопка "Добавить сотрудника". Добавить новую запись в каждую таблицу и перевести курсор в первый DBEdit, в котором редактируется фамилия. Это и делаем:

14. Откройте предыдущую форму и пропишите процедуру нажатия на кнопку "Новый сотрудник". Как и в предыдущем примере, нам потребуется добавить новую запись в каждую таблицу, после чего открыть окно редактора:

15. Сгенерируйте процедуру onClick для кнопки "Редактировать". Тут будет лишь одна строчка кода:

Form3.ShowModal;

16. Пропишем также редактирование информации на двойной щелчок по записи в верхней сетке DBGrid. Поэтому выделите сетку с главной таблицей и сгенерируйте для нее событие onDBLClick. Там введите такую же строчку кода как и в 15 пункте.

17. По нашему замыслу, при открытии программы в верхней сетке DBGrid будут отображаться данные из главной таблицы, а в нижней - из таблицы Adres. Также будет выделена радиокнопка с надписью "Адрес". Если пользователю захочется посмотреть должность или телефоны текущего сотрудника, он будет щелкать соответствующую радиокнопку, и эти данные должны быть отображены в нижней DBGrid. Выделите первую радиокнопку с надписью "Адрес" и сгенерируйте для нее событие onClick, которое будет возникать, когда пользователь щелкнет по ней. В процедуре этого события впишите следующий код:

Для события onClick радиокнопки с надписью "Телефоны" код будет таким:

А для события onClick радиокнопки с надписью "Должность", соответственно, код будет следующим:

Содержание отчета:

1. Номер, тема, цель лабораторной работы.

2. Задание к работе.

3. Текст программы.

4. Вывод о проделанной работе.

 

Лабораторная работа №13

Тема: «Осуществление поиска и фильтрации набора данных».

Цель: Ознакомление с механизмами поиска данных, фильтрации записей.

Теоретическая часть

Метод Locate

Метод Locate ищет первую запись, удовлетворяющую условию поиска. Если запись найдена, метод делает ее текущей и возвращает True. В противном случае метод возвращает False и курсор не меняет положения. Поле, по которому ведется поиск, не обязательно должно быть индексировано. Однако если поле индексировано, то метод ищет запись по индексу, что значительно ускоряет поиск. Поиск может вестись как по одному полю, так и по нескольким полям. Метод имеет три параметра:

function Locate (const KeyFields: String; const KeyValues: Variant;

Options: TLocateOptions) : Boolean;

Параметр KeyFields задает поле или список полей, по которым ведется поиск. Если имеется несколько полей, их разделяют точкой с запятой.

Параметр KeyValues является вариантным массивом, в котором задаются критерии поиска. При этом первое значение KeyValues ставится в соответствие с первым полем, указанным в KeyFields. Второе - со вторым, и так далее.

Третий параметр Options позволяет задать некоторые опции поиска:

loCaseInsensitive - поиск ведется без учета высоты букв, то есть, считаются одинаковыми строки "строка", "Строка" или "СТРОКА".

loPartialKey - запись будет удовлетворять условию, если ее часть содержит искомый текст. То есть, если мы ищем "ст", то удовлетворять условию будут "строка", "станция", "стажер" и т.п.

Пустой набор [] указывает, что настройки поиска игнорируются. То есть, строка ищется "как есть".

Примеры использования метода Locate:

Table1.Locate('Фамилия', Edit1.Text, []);

Table1.Locate('Фамилия;Имя',

VarArrayOf(['Иванов', 'Иван']), [loCaseInsensitive]);

Метод Lookup

Метод Lookup, в отличие от Locate, не меняет положение курсора в таблице. Вместо этого он возвращает значения некоторых ее полей. Причем в отличие от Locate, этот метод осуществляет поиск лишь на точное соответствие. Такой способ поиска востребован реже, однако в иных случаях этим методом очень удобно пользоваться. Рассмотрим синтаксис этого метода.

function Lookup (const KeyFields: String;

const KeyValues: Variant;

const ResultFields: String) : Variant;

Как вы видите, первые два параметра такие же, как у Locate. А вот третий параметр и возвращаемое значение отличаются. В строке ResultFields через точку с запятой перечисляются поля таблицы, значения которых метод должен вернуть. Возвращаются эти значения в виде вариантного массива. Проблема в том, что вернуться может значение Null, то есть, ничего, или Empty (пустой) и это нужно проверять.

Фильтрация данных

Фильтрацию данных применяют не реже а, пожалуй, даже чаще, чем поиск. Разница в том, что при поиске данных пользователь видит все записи таблицы, при этом курсор либо переходит к искомой записи, либо он получает данные этой записи в виде результата работы функции. При фильтрации дело обстоит иначе. Пользователь в результате видит только те записи, которые удовлетворяют условиям фильтра, остальные записи становятся скрытыми. Конечно, таким образом искать нужные данные проще. Можно указать в условиях фильтра, что требуется вывести всех сотрудников, чья фамилия начинается на "И". Пользователь увидит только их. Воспользуемся событием onFilterRecord

Это событие возникает при установке значения True в свойстве Filtered. Применение этого способа имеет большой плюс, и большой минус. Плюс в том что, сгенерировав это событие, программист получает возможность задать гораздо более сложные условия фильтрации. Минус же заключается в том, что проверка заключается перебором всех записей таблицы. Если таблица содержит очень много записей, процесс фильтрации может затянуться.

В событие передаются два параметра. Первый параметр - набор данных DataSet. С ним можно обращаться, как с именем фильтруемой таблицы. Второй параметр - логическая переменная Accept. Этой переменной нужно передавать результат условия фильтра. Если условие возвращает False, то запись не принимается, и не будет отображаться. Соответственно, если возвращается True, то запись принимается.

Задание к работе:

  1. Откройте проект. Перейдите на модуль DM, где хранятся компоненты доступа к базе данных. Процедуру поиска реализуем в этом модуле, а чтобы с ней можно было работать из других форм, опишем ее в разделе public:

  1. В процедуру передается параметр - строка. В ней мы будем передавать искомую фамилию.

В процедуру пропишите следующий код:

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

  1. На главной форме выделите компонент Edit, предназначенный для поиска по фамилии. Создайте для него событие onChange, которое наступает при изменении текста в поле компонента. В созданной процедуре пропишите вызов поиска:

  1. Далее организуем поиск методом Lookup.
  2. Для поиска воспользуемся кнопкой с надписью "Найти", расположенной в верхней части главной формы. Идея такова: пользователь вводит в поле Edit1 какую то фамилию и нажимает кнопку "Найти". Событие onClick этой кнопки собирает в строковую переменную значения четырех указанных полей найденной записи. Причем после каждого значения в строку добавляется символ "#13" (переход на новую строку), формируя многострочный отчет. Затем эту строку мы выведем на экран функцией ShowMessage().
  3. Для этого сгенерируем событие onClick по кнопке «Найти».

Помимо поиска организуем фильтрацию.

  1. Добавьте компонент Edit2 на главную форму.
  2. Перейдите к модулю данных и создайте глобальную переменную Ed.

var

DM: TDM;

ed:string;

  1. Далее выделите TLichData. На вкладке Events (События) инспектора объектов найдите событие onFilterRecord и дважды щелкните по нему, сгенерировав процедуру.
  2. В процедуре запишите следующий код:

 

  1. Перейдите на главную форму и сгенерируйте событие onChange компонента Edit2

Содержание отчета:

1. Номер, тема, цель лабораторной работы.

2. Задание к работе. Интерфейс приложения

3. Текст программы.

4. Вывод о проделанной работе.

 

Лабораторная работа №14

Тема: «Поиск данных с помощью статических и динамических запросов».

 

Цель:приобретение практических навыков создания программ, позволяющих выполнять поиск записей в базе данных с помощью компонента TQuery.

Задание к работе:

  1. Откройте проект. Создайте 4 форму. На первой форме создайте кнопку «Расширенный поиск», открывающую форму 4.
  2. Осуществим поиск адреса сотрудников по введенному городу. Для этого на форму 4 поместим компоненты 2 Label,Edit, Button, DBGrid

  1. Перейдите на модуль DM, где хранятся компоненты доступа к базе данных. Добавьте в модуль компонент Query и DataSource.
  2. Переименуйте их в QAdres и DSQAdres соответственно.
  3. У компонента QAdres выберете псевдоним Otdel в свойстве DataBase Name и DSLichData в свойстве DataSource (ссылается на компонент TDataSource, из набора данных которого задаются значения параметров).
  4. У компонента DSQAdres в свойстве Data Set QAdres.
  5. У компонента DBGrid в свойстве DataSource укажите DM.DSQAdres.
  6. Далее пропишите процедуру нажатия кнопки
  7. Осуществим расчет среднего стажа всех сотрудников и разобьем эти данные по отделам. Для этого будем использовать агрегатную функцию AVG.
  8. На форму 4 добавим компоненты label, button, DBGrid.

  1. Перейдите на модуль DM, где хранятся компоненты доступа к базе данных. Добавьте в модуль компонент Query и DataSource.
  2. Переименуйте их в QStag и DSQStag соответственно.
  3. У компонента QStag выберете псевдоним Otdel в свойстве DataBase Name и DSLichData в свойстве DataSource. В свойстве SQL укажите следующие команды

  1. У компонента DSQStag в свойстве Data Set QStag.
  2. У компонента DBGrid в свойстве DataSource укажите DM.DSQStag.
  3. Далее пропишите процедуру нажатия кнопки

procedure TForm4.Button2Click(Sender: TObject);

begin

DM.QStag.Close;

DM.QStag.Open;

end;

  1. Осуществим поиск сотрудников по введенной должности и стаж работы которых находится введенных пределах.
  2. Для этого на форму 4 добавим 3 компонента Edit, 1 Button, 5 Label b 1 DBGrid

  1. Перейдите на модуль DM. Добавьте в модуль компонент Query и DataSource.
  2. Переименуйте их в QDoljn и DSQDoljn соответственно.
  3. У компонента QDoljn выберете псевдоним Otdel в свойстве DataBase Name и DSLichData в свойстве DataSource.
  4. У компонента DSQDoljn в свойстве Data Set QDoljn.
  5. У компонента DBGrid в свойстве DataSource укажите DM.DSQDoljn.
  6. Далее пропишите процедуру нажатия кнопки

Создайте еще один динамический или статический запрос на ваше усмотрение

Содержание отчета:

1. Номер, тема, цель лабораторной работы.

2. Задание к работе.

3. Интерфейс приложения

4. Текст программы.

5. Вывод о проделанной работе.

 

Лабораторная работа №15

Тема: «Создание отчета».

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

Задание к работе:

  1. Откройте проект. Если пакет Quick Report еще не установлен (на палитре компонентов отсутствует вкладка QReport), то загрузите Delphi и закройте все открытые проекты (File -> Close All).
  2. Выбрерите пункт меню "Component -> Install Packages".
  3. Нажмите кнопку "Add" и выберите пакет "dclqrt70.bpl", который по умолчанию устанавливается по адресу: c:\Program Files\Borland\Delphi7\bin\dclqrt70.bpl
  4. Нажмите кнопку "Открыть". Далее, нажмите кнопку "ОК" - пакет компонентов Quick Report установится, и его вкладка будет самой последней на Палитре компонентов. При желании можно перетащить ее мышью на другое место, поближе к началу.
  5. На главной форме установите компонент Main Menu и создайте разделы
Раздел Подраздел
Файл Выход
Отчеты Кадры, по телефонам, по адресам
  1. Создайте новую форму и подключите к ней модуль данных.
  2. Установите QuickRep на новую форму, и он примет вид разлинованного листа.
  3. Выделите QuickRep и обратите внимание на его свойства. В самом верху находится свойство Bands (Ленты, полосы - англ.). Это раскрывающееся свойство, оно содержит шесть параметров. Щелкните по плюсу слева от свойства, чтобы раскрыть его. По умолчанию, все параметры имеют значение False, то есть, не установлены. Если какой-либо параметр перевести в значение True, на холсте появится соответствующая полоса. Попробуйте установить все параметры. Разберемся с их назначением.

HasColumnHeader - Заголовки колонок. Здесь мы будем вписывать названия колонок таблицы.

HasDetail - Детальная информация. На этой ленте формируются строки таблицы.

HasPageFooter - Подвал (нижний колонтитул). Здесь можно установить информацию, которая будет появляться в нижней части каждой страницы.

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

HasSummary - Суммарная информация. Содержимое этой полосы печатается один раз в самом конце отчета.

HasTitle - Заголовок отчета.

  1. Переведите в True полосы HasPageHeader, HasTitle, HasColumnHeader, HasDetail и HasPageFooter. Не установленной останется только полоса HasSummary. Если вы дважды щелкните мышью по свободному месту холста, появится настроечное окно:

  1. В этом окне можно выполнить большинство настроек, причем в Инспекторе объектов соответствующие свойства будут изменены автоматически. Как видите, установленные нами полосы отмечены "галочкой" в разделе Bands окна. Выше располагается раздел Page frame, в котором можно задать обрамление для верхней (Top), нижней (Bottom), левой (Left) и правой (Right) границ холста, а также изменить цвет и ширину обрамления. Те же действия можно выполнить в Инспекторе объектов с помощью параметров раскрывающегося свойства Frame(пока открыто окно настроек, менять свойства в Инспекторе Объектов не получится).

Еще выше располагается раздел Other, где можно установить общие данные для холста - шрифт, размер шрифта и единицы измерения (по умолчанию mm - миллиметры). В Инспекторе объектов за это отвечают свойства Font и Units.

Далее находится раздел Margins (Границы, края), где можно задать расстояния от краев листа до рабочей части холста. На самом верху окна располагается раздел Paper size (Размер бумаги), где задаются тип листа и его размеры. Данные этих двух разделов можно изменить в Инспекторе объектов в раскрывающем свойстве Page.

Еще следует обратить внимание на свойство Options, которое имеет три параметра:

FirstPageHeader - Разрешает печать заголовков (шапку) первой страницы, если равно True.

LastPageFooter - Разрешает печать подвала последней страницы, если равно True.

Compression - Разрешает сжатие отчета при формировании из него метафайла (отчет представляет собой изображение), если равно True.

Свойство PrintIfEmpty разрешает (True) или запрещает (False) печатать отчет, если в нем нет никаких данных.

Свойство ShowProgress разрешает или запрещает показывать индикатор процесса печати отчета. По умолчанию индикатор разрешен.

Свойство SnapToGrid разрешает или запрещает привязывание компонентов к сетке. По умолчанию привязка разрешена.

Свойство Zoom имеет тип Integer и позволяет изменить масштаб отображения отчета при его разработке. Значение 100 указывает, что отчет показывается в 100% от листа бумаги. Изменение этого свойства не влияет на масштаб печати отчета или его предварительного просмотра.

  1. Теперь приступим к формированию отчета. На холсте у нас уже должны быть расположены пять полос. Теперь мы можем на эти полосы устанавливать другие компоненты. На самом верху холста находится полоса Page Header, которая, как мы уже знаем, является верхним колонтитулом. Установите в левой части этой полосы компонент QRSysData - компонент с различного рода системной информацией. Нас интересует свойство Data этого компонента. Data содержит несколько свойств, формирующих отображаемую информацию. Разберем эти свойства.

qrsDate (Вывод текущей даты)

qrsDateTime (Вывод текущих даты и времени)

qrsDetailCount (Количество строк формируемой таблицы)

qrsDetailNo (Номер текущей строки таблицы)

qrsPageNumber (Номер текущей страницы отчета)

qrsReportTitle (Заголовок отчета)

qrsTime (Вывод текущего времени)

  1. Установим для этого свойства значение qrsDateTime, чтобы пользователь мог видеть, когда был сформирован отчет. Далее выделим всю полосу Page Header и в свойстве Frame переведем в True параметр DrawBottom. Это свойство позволяет задать обрамление выделенной полосе, а параметр DrawBottom рисует линию в нижней части полосы. То есть, мы визуально отделили колонтитул от данных листа.
  2. В нижней части холста располагается полоса Page Footer (подвал). Здесь желательно установить верхнюю линию в свойстве Frame, отделив от данных нижний колонтитул. А по центру полосы установить еще один компонент QRSysData, установив свойство Data в значение qrsPageNumber. Этот компонент будет выводить номер текущей страницы в нижней части листа.
  3. Напишем заголовок отчета. Для этого установите компонент QRLabel в центре полосы Title. В его свойстве Caption напишите "Отчет по кадрам". Чтобы заголовок был красивым, щелкните дважды по свойству Font, чтобы открылось окно шрифта. Здесь установите шрифт Times New Roman, начертание выберите жирное, а размер шрифта пусть будет 18.
  4. Далее займемся полосой Column Header (Заголовки колонок). Здесь установите рядом пять компонентов QRLabel, в свойстве Caption которых напишите

Фамилия

Имя

Отчество

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

Образование

  1. Это будут названия колонок таблицы. Шрифт этих компонентов также желательно сделать крупнее, но не больше заголовка.
  2. Далее займемся полосой Detail, на которой, собственно, и будет формироваться таблица. Здесь нам нужно будет в самом крайнем положении слева установить компонент QRSysData, в свойстве Data которого выбрать qrsDetailNo - перед каждой строкой будет выходить ее номер. Далее установите пять компонентов QRDBText, в которых будут отражаться данные из соответствующих полей таблицы. Эти компоненты соответствуют обычному DBText, с которым мы неоднократно сталкивались. Расположите их точно под названиями столбцов, чтобы таблица была красивой. При этом может оказаться, что компонент QRSysData "наплывает" на QRDBText - ничего страшного, данные все равно не будут мешать друг другу. Выделите все QRDBText, и в их свойстве DataSet выберите нашу таблицу fDM.TLichData, затем поочередно в свойстве DataField этих компонентов выберите соответствующие поля таблицы:

Fam

Im

Ot

Dtr

Obraz

  1. Кроме того, сам компонент QuickRep1, который является "холстом" отчета, также должен знать, из какой таблицы ему нужно брать данные. Поэтому выделите его, и в свойстве DataSet также выберите нашу таблицу DM.TLichData. Если этого не сделать, то в отчете будет выходить лишь текущая запись таблицы, а не все ее записи.
  2. Вернитесь в главное окно проекта и сгенерируйте обработку команды меню "Отчеты - Кадры".

procedure TForm1.N5Click(Sender: TObject);

begin

form5.QuickRep1.PreviewModal;

end;

  1. На вкладке QReport имеется компонент QRShape, который позволяет рисовать простейшие линии и фигуры. Он имеет свойство Shape, в котором можно задать нужную фигуру. Возможные значения этого свойства:

qrsCircle (Круг)

qrsHorLine (Горизонтальная линия)

qrsRectangle (Прямоугольник)

qrsRightAndLeft (Прямоугольник с очерченными левым и правым краями)

qrsTopAndBottom (Прямоугольник с очерченными верхним и нижним краями)

qrsVertLine (Вертикальная линия)

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.