Передача параметрів через DataSource

(зв’язок один до багатьох)

Об’єкт ADOQuery має властивість DataSource, яка може бути використана для зв’язку з іменем DataSet (ADOTabe або ADOQuery)

Приклад:

Необхідно створити запит для 2-х таблиць ORDERS та CUSTOMERS, таким чином, щоб для конкретного замовника виводились замовлення, пов’язані з ним.

Запит:

Select*from Orders where SustNo=:CustNo

:CustNo – змінна зв’язку, якій слід присвоїти значення з деякого джерела. Для цього використовують властивість ADOQuery.DataSource, щоб вказати інший DataSet (автоматично взяти значення із іншої таблиці).

Delphi завжди спочатку звертається до DataSourсe, щоб заповнити значення параметрів і тільки, якщо їх не знайдено, звертається до властивості Parameters.

Приклад: (вирішення)

1. Помістить на форму ADOTable1, DataSourсe1 і TDBGrid1 і зв’яжіть їх з таблицею CUSTOMERS;

2. Помістить на форму ADOTable2 зв’яжіть з таблицею ORDERS

3. Помістить на форму ADOQuery1, DataSourse2, TDBGrid2 і зв’яжіть компоненти між собою;

4. У властивості ADOQuery1.SQL запишіть:

Select*from Orders where CustNo:CustNo

4 У властивосі DataSourсe2 для ADOQuery1 вкажіть DataSourсe1;

5 Active=True.

 

Вибірка з декількох таблиць

Приклад:

Нехай потрібно виконати вибірку з двох таблиць ORDERS та ITEMS

select

O.CustNo, O.OrderNo, O.SaleDate, I.PartNo, I.Qty

from Orders O, Items I

where O.OrderNo=I.OrderNo

В реченні where організовано зв’язок двох таблиць.

 

Open та Exec SQL

Якщо в результаті запиту необхідно повернути курсор (набір даних), то слід виконати метод Open. Таким чином, як ми бачили вище, забезпечують реалізацію оператора SELECT. Для всіх інших операторів (INSERT, DELETE, UPDATE), слід використати метод ExecSQL.

Приклад:

SQL delete from Country where Name=’Argentina’;

Для параметричного запиту:

Delete from Country where Name=:CountryName

ADOQuery2.Prepare;

ADOQuery2.Parammeters[0]:=’Argentina’;

ADOQuery2.ExecSQL;

Insert into Country(Name):Val(‘Argentina’)

 

Питання для самоперевірки

1. Які компоненти з середовища Delphi дозволяють організувати запити до БД на мові SQL?

2. Як організовано параметричні запити в середовищі Delphi?

3. Як організовано запити зі зв‘язаних таблиць?

4. Як сформувати динамічний запит до БД в середовищі Delphi?

5. Який метод повертає значення курсора?

6. Який метод використовується для запитів на доповнення, редагування та вилучення даних?

 

 

Лабораторна робота №6

Тема:Формування та друк документів.

Мета: Навчитися формувати звіти за встановленою формою та виводити їх на друк.

Завдання:

1. Створити складний звіт, використовуючи компоненти палітри QuickReport.

2. Забезпечити інтерфейс користувача для перегляду та друку документів.

 

Теоретичні положення

Звітність в Quick Reports

Могутнім засобом створення звітів, якbq входить в поставку Delphi – є TQuick Reports. Він не є самим швидким, і в мережі Internet можна знайти безліч швидших, як платних, так і безкоштовних генераторів звітів. Але Quick Reports дуже могутній і вже встановлений в Delphi і готовий до роботи.

Всі компоненти Quick Reports знаходяться на закладці QReport палітри компонентів.

Головний компонент Quick Reports – TQuickRep. Цей компонент – основа будь-якого звіту. Він є полотном листу майбутнього звіту.

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

Давай подивимося на об'єктний інспектор і розберемося з полями нашого звіту:

Bands (смуги) – тут можна вказати, що повинен мати майбутній документ, а він може містити:

HasColumnHeader– Заголовки колонок. Якщо звіт міститиме таблицю, то вона повинна мати шапку, де будуть описані назви колонок. Ось саме цю шапку створюють в цій частині документа. Отже якщо потрібні заголовки колонок таблиці, то цій властивості слід присвоїти значення true.

HasDetail– якщо в звіті є таблиця, то вміст рядків задають в цьому розділі.

HasSubDetail – в цьому розділі можна вивести дані зі зв‘язаної таблиці.

HasPageFooter– в цьому розділі створють нижній колонтитул.

HasPageHeader– тут створють заголовок документа.

HasSummary– вміст цього розділу друкується один раз в кінці звіту (на останній сторінці).

HasTitle– в цьому розділі формують заголовок звіту.

Спробуємо створити новий проект помістивши, для цього, на форму один компонент QuickRep1. Будь-яку область (смугу) можна виділити і розтягнути або зменшити (Рис.8).

Рис. 8. Вид компоненту QuickRep з включеними смугами

 

DataSet – тут вказують набір даних (таблиця) з якої звіт братиме

дані.

Font – шрифт, який використовуватиметься за замовчуванням.

Frame – параметри рамки.

Options – тут доступні три параметри. Якщо FirstPageHeader дорівнює true, то заголовок друкується тільки на першій сторінці звіту. Якщо LastPageFooter дорівнює true, то нижній колонтитул друкується тільки на останній сторінці звіту. Якщо встановити властивість Compression в true, то звіт зберігатиметься в стислому вигляді.

Page – тут доступні всі необхідні опції для контролю над папером

звіту. Можна встановити його розміри, відступи і орієнтацію.

PrinterSettings – тут знаходяться настройки принтера.

ReportTitle – тут знаходиться заголовок друкованого документа.

ShowProgress – якщо цей параметр дорівнює true , то під час друку буде доступний індикатор ходу виконання друку.

SnapToGrid –вирівнювання компоненти по встановленій сітці.

Zoom – масштаб відображення даних.

Якщо двічі клацнути по компоненті QuickRep, то відкриється вікно, в якому всі ці настройки представлені разом і в дуже зручному вигляді. Вони достатньо зрозумілі і легко розібратися зі всім самостійно.

Для побудови звіту на форму необхідно помістити компонент QuickRep1, його властивості HasPageHeader та HasDetail ставимо в true, а у властивості DataSet вибираємо необхідну для нас таблицю ADOTable1.

В HasPageHeader розміщуємо об‘єкти QRLabel1, QRLabel2, QRLabel3, QRLabel4, та в їх властивостях Caption відповідно ставимо ПІБ, ВІК, ДАТА, НАЗВА.

В HasDetail вставляємо об‘єкти QRDBText1, QRDBText2, QRDBText3, QRDBText4, які під¢єднуємо до полів нашої таблиці. Для цього у властивості DataSet цих компонентів ставимо ADOTable1, DataFields заповнюємо відповідно полям таблиці .(Рис.9).

 

Рисунок 9. Вигляд звіту в режимі проектування

Для перегляду звіту слід клацнути по ньому лівою клавішею мишки, та обрати пункт меню Preview.

 

 

Рисунок 9.Звіт в режимі перегляду

Також для перегляду можна використовувати кнопку, на яку необхідно написати подію form2.QuickRep1.Preview, а для друку form2.QuickRep1.Prіnt.

Питання для самоперевірки

1. Які компоненти з середовища Delphi використовуються для швидкого формування звіту ?

2. Які компоненти слугують для відображення даних у звіті ?

3. Який механізм забезпечує використання у звіті даних зі зв‘язаних таблиць?

4. Яким чином забезпечується перегляд сформованого звіту разом із даними в режимі проектування?

5. За допомогою якої компоненти можна розкреслити звіт?

6. Які дві можливості виведення звіту Ви знаєте?

Література

1. Кенту М. Delphi7: Для профессионалов. – СПб.: Питер, 2005. – 1101с.

2. Маклаков С.В. –Создание информационных систем с ALLFusion Modeling Suite. – М. : Диалог – МИФИ, 2005 – 432 с.

3. М’якшило О.М. , Загоровська Л.Г. – Основи автоматизованого проектування складних об‘єктів і систем: Лабораторний практикум для студентів спеціальності 6.080400 «Інформаційні управляючі системи і технології» денної форми навчання К.НУХТ, 2002. – 15 с.

4. М‘якшило О.М. Конспект лекцій з дисципліни “Автоматизоване проектування комп‘ютерних систем” для студентів спеціальності 7.080401 – напряму підготовки 0804 “Комп‘ютерні науки” денної та заочної форм навчання. Київ : НУХТ, 2007. – 67с.

5. Фаронов В.В. Delphi 6. Учебний курс. М.: Нолидж , 2002, - 464 с., ил.