ТОП 10:

Етапи створення баз даних в Delphi.



Середовище розробки Delphi орієнтоване на створення самих різноманітних прикладних програм баз даних. Це і невеличкі локальні програми, і багаторівневі розподілені системи, що використовують найновіші технології. Але, не дивлячись на складність програми, в її основі завжди лежить базовий механізм забезпечення доступу до даних. Він створюється тріадою компонентів:

компонент набору даних (TTable, TQuery, TStoredProc);

компонент TDataSource;

один або декілька компонентів відображення даних.

Компоненти доступу до даних розміщені на сторінціBDEта Data AccessПалітри компонентів. Компоненти відображення даних розміщені на сторінціData Controls Палітри компонентів.

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

В програмах баз даних для роботи з набором даних використовуються компоненти TTable і TQuery, які забезпечують створення набору даних для окремої таблиці БД. Компонент TTable частіше використовується в локальних програмах.

Для забезпечення зв’язку набору даних з компонентами відображення даних використовується спеціальний компонент TDataSource. Його роль полягає в керуванні потоками даних між набором даних і пов’язаними з ним компонентами відображення даних.

Компоненти відображення даних розміщені на сторінціData ControlsПалітри компонентів. В більшості вони являють собою модификації стандартних елементів керування, налаштованих для роботи з набором даних.

Таким чином, для створення роботоздатної програми баз даних необхідно перенести в форму і настроїти як мінімум три компоненти:

компонент доступу до даних;

компонент TDataSource;

компонент відображення даних.

Розглянемо схему взаємодії цих компонентів в програмі баз даних.

Безпосередній зв’язок програми і бази даних здійснює BDE. Процесор баз даних повинен мати встановлений драйвер, через який запити передаються в БД. Крім цього, в BDE повинен бути зареєстрований псевдонім, який вказує місцезнаходження файлів БД і тип використовуваного драйвера.

В прикладній програмі з BDE взаємодіє компонент доступу до даних, який інкапсулює набір даних і звертається до функцій API BDE для виконання різних операцій. Компонент доступу до даних являє собою "образ" таблиці бази даних в програмі. Загальне число таких компонентів в програмі не обмежене.

З кожним компонентом доступу до даних повинен бути пов’вязаний як мінімум один компонент TDataSource. В його обов’язки входить з’єднання набору даних з компонентами відображення даних. Він відправляє в ці компоненти поточні значення полів з набору даних і передає назад зроблені зміни.

Ще одна функція компонента TDataSource полягає в синхронізації поведінки компонентів відображення даних з станом набору даних. Наприклад, якщо набір даних не активний, то компонент TDataSource забезпечує вилучення даних з компонентів відображення даних і їх перевід в неактивний стан. Або, якщо набір даних працює в режимі "лише для читання", то компонент TDataSource зобов’язаний передати в компоненти відображення даних заборону на зміну даних.

З одним компонентом TDataSource можуть бути пов’язані кілька візуальних компонентів відображення даних. Ці компоненти являють собою модифіковані елементи керування, які призначені для показу інформації з наборів даних.

При відкритті набору даних BDE забезпечує передачу в набір даних записів з потрібної таблиці БД. Курсор набору даних встановлюється на перший запис. Компонент TDataSource организує передачу в компоненти відображення даних значень необхідних полів з поточного запису.

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

Користувач за допомогою компонентів відображення даних може проглядати і редагувати дані. Змінені значення відразу ж передаються з елемента керування в набір даних за допомогою компонента TDataSource. Потім зміни можуть бути передані в базу даних або відмінені.

Компонент ТТаblе

Компонент TTable є кінцевою ланкою в ієрархії класів доступу до даних, його властивості і методи описують таблицю реляційної бази даних, причому незалежно від типу бази даних. Для доступу до даних компонент використовує функції BDE.

Необхідна для роботи база даних задається властивістю DatabaseName, в якій можна вказати зареєстрований в BDE псевдонім БД або повний шлях до файлів БД.

Таблиця БД, на основі якої створюється набір даних, визначається властивістю TableName. При необхідності тип таблиці задається властивістю TableType, хоча звичайно ця властивість має значення ttDefault, яке включає автоматичне визначення типу таблиці по розширенню файлу.

Властивість TableType працює лише в локальних БД. Зверніть увагу, що можливі значення властивості відповідають основним типам локальних драйверів BDE.

За допомогою методів Open і Сlose набір даних відкривається і закривається. Про його стан можна судити по значенню властивості Active.

Відривати і закривати набір даних можна і простим присвоюванням значення властивості Active. Але, згідно правилам ООП, довільні дії повинні виконуватися методами.

Записи в набір даних можна відбирати за допомогою властивостей Filter, Filtered, FilterOptions, що створюють фільтр, який обмежує набір даних за значеннями даних в одному або декількох полях.

Модуль даних

Для розміщення компонентів доступу до даних в програмі баз даних можна використати спеціальну форму – модуль даних. В ньому можна розміщувати лише невізуальні компоненти. Модуль даних доступний розробнику, як і кожен інший модуль проекту. Користувач програми не може побачити модуль даних під час виконання. Модуль являє собою сховище об’єктів, яке дозволяє централізовано керувати їх роботою і відділяє програмну логіку, пов’язану з базами даних від програмного коду, який виконує обчислювальні дії і відображення даних на формі. Насправді, модуль даних має мало спільного з стандартною формою хоча б тому, що клас TDataModule походить безпосередньо від класу TComponent. У нього майже повністю відсутні властивості і методы-обробники подій, але так як його основне призначення — збереження інших невізуальних компонентів, то цього мінімуму властивостей цілком достатньо.


Питання для самоконтролю:

1. Що таке аліас бази даних?

2. Які утиліти можна використати для створення аліасу?

3. Які властивості потрібно задати, щоб створити аліас?

4. Для чого призначений модуль даних?

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

6. Які властисвотсі потрібно налаштувати щоб підв’язати TТable?

7. Які типи даних полів таблиць формату Paradox ?

8. Як створити таблицю за допомогою утиліти Database Desktop?

9. Як переключити таблицю в режим редагування?

10. Як задати вторинний індекс для таблиці?

11. Як задати паролі для таблиць?

12. Як задати максимальне та ммінімальне значення для полів таблиці?

13. Які компоненти можна використати для відображення набору даних?

14. Які властивості компонент TDBGrid та TDBNavigator потрібно налаштувати для перегляду таблиць?


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

Тема: Поля таблиць в Delphi.

Мета роботи: Навчити використовувати редактор полів.

 

Завдання

Створити проект для роботи з редактором полів в Delphi.

ХІД РОБОТИ

  1. Запустіть проект Торгівля на виконання.
  2. В модулі даних виділіть елемент першої таблиці.
  3. Натисніть на ньому правою кнопкою миші і виберіть елемент Fields Editor. У вікні редактора натисніть праву кнопку миші і виберіть команду Add All Fields, після чого всі поля таблиці стануть статичними.
  4. Використовуючи інспектор об’єктів присвойте властивостям Display Label об’єктів Field українські назви полів.
  5. Задайте властивість Visible = False поля, яке ви не хочете висвітлювати.
  6. Виконайте вказані операції для всіх таблиць бази даних.
  7. Перегляньте вміст всієї таблиць через відповідне використання елементів відображення.
  8. За допомогою програми DataBase Desktop доповніть таблицю Покупців до 15 покупців та таблицю Товарів до 20 товарів.
  9. Встановіть в таблиці Замовлення три нові поля підстановки – Прізвище покупця, Товар та Cina_odynyci.
  10. Задайте властивість DisplayLabel поля в Cina_odynyci в Ціна одиниці.
  11. Встановіть в таблиці Замовлення обчислювальне поле Vartist і запишіть код для його обробника повідомлень.
  12. Задайте властивість DisplayLabel цього поля в Вартість.
  13. Встановіть на формі компоненті TDBGrid та TDBNavigator і підключіть їх до таблиці Замовлення.
  14. Відредагуйте стовпці Columns компонента TDBGrid так, щоб виводилися лише поля Прізвище покупця, Товар, Дата замовлення, Замовлена кількість Ціна одиниці Вартість.

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

 

 

ТЕОРЕТИЧНІ ВІДОМОСТІ

Поля таблиць в Delphi.

Кожна таблиця БД і, відповідно, кожний набір даних програми має власну структуру, яка визначається сукупністю полів. Кожне поле являє собою опис типу даних, якому повинно відповідати значення, що знаходиться в запису на певному місці. Інакше, полем можна назвати сукупність комірок з даними певного типу, розміщені в одному і тому ж місті в кожному запису набору даних, або простіше — це стовпець в таблиці.

В наборі даних програми баз даних Delphi кожному полю відповідає власний об’єкт. Основою об’єктів полів є клас TField, який інкапсулює основні властивості абстрактного поля, що не залежать від типу даних. Від цього базового класу породжені інші класи, що забезпечують функціонування реальних об’єктів полів, що залежать від типу даних.

Клас TField має набір дуже зручних властивостей, що дозволяють звертатися до кожного поля в залежності від його реального типу в базі даних. Наприклад, властивість AsString дозволяє одержати доступ до значення поля в текстовому форматі. Крім того є властивості AsBoolean, AsDataTime, AsFloat, AsInteger.

Кожне поле відображується в наборі даних не як тип TField, а як один із його нащадків в залежності від типу цього поля. Наприклад стрінгове поле відображується в виді TStringField, поле з автозаповненням – TАutoIncField.

Об’єкти полів.

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

Editl.Text := Tablе1.Fields[0].AsString;

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

Кожний об’єкт поля зберігає ряд параметрів, що визначають поле. Наприклад, в наборі даних до об’єкту поля можно звернутися, знаючи лише назву поля:

Editl.Text := Tablel.FieldByName('SomeField').AsString;

Серед властивостей TTables, що пов’язані з TField особливо можна виділити property FieldValues [Сonst FieldName: string]: Variant, яка дає доступ на читання і запис до значень всіх полів поточного запису набору даних. Ідентифікація поля здійснюється за його іменем, що передається в параметрі FieldName:

Tablel.FieldValues['SomeField'] := Edit1.Text;

В основі класів, що описують ієрархію типізованих полів, лежить клас TField. Від нього породжені інші класи, що забезпечують роботу цілих груп полів, об’єднаних за типами даних. Що таке об’єкт поля, і які можливості він надає програмісту?

По-перше, призначення класу TField як базового класу поля полягає в умінні взаємодіяти з компонентом відображення даних для забезпечення правильної візуалізації даних. Наприклад, об’єкт поля зберігає спосіб вирівнювання, параметри шрифту, текст заголовка і т. д.

По-друге, з точки зору набору даних, об’єкт поля є сховищем поточного значення цього поля (а не всього стовпця даних, як це можна собі уявити за назвою).

Компоненти відображення даних при роботі с набором даних взаємодіють саме з полями. Колонки компонента TDBGrid при відсутності додаткових настройок відповідає розміщенню об’єктів полів в зв’язаному наборі даних.

В Delphi передбачено два способи створення об’єктів полів. Динамічні поля використовуються програмою у випадку, коли розробник не створив для них об’єкти явним чином на етапі розробки. Кожний не заданий явно об’єкт поля автоматично створюється при відкритті набору даних у відповідності із структурою зв’язаної таблиці БД. Довільний об’єкт поля є прямим наслідником класу TField, а його конкретний тип залежить від типу даних поля таблиці. При цьому властивості динамічного поля встановлюються у відповідності з параметрами поля таблиці бази даних.

Компонент доступу до даних після підключення до таблиці БД без додаткових настроювань використовують лише динамічні поля. До властивостей і методів динамічних полів можна звернутися програмно, для цього слід використовувати індексовану властивість Fields компонента доступу до даним, яке об’єднує всі поля набору даних.

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

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

Створюються статичні об’єкти полів за допомогою спеціалізованого Редактора полів, який викликається подвійним клацанням на компоненті набору даних на формі або командоюFields Editor із контекстного меню цього компонента.

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

Добавити до списку статичних полів нове поле можна за допомогою командиAdd Fields із контекстного меню Редактора. Вилучення елемента із списку здійснюється клавішею Delete. Перетаскуванням елементів списку за допомогою миші можна змінити їх розміщення. Таким чином, можна створювати довільні комбінації статичних полів.

Як тільки для набору даних створений хоча б один статичний об’єкт поля, вважається, що набір даних містить лише ті поля, які є в списку статичних полів. Цю особливість можна використати для штучного обмеження структури даних таблиць. Всі поля набору даних розміщені в тому порядку, як це вказано в списку Редактора полів, незалежно від їх реального розміщення в таблиці бази даних.

Як вже говорилося вище, в великій ієрархії класів для полів різних типів даних клас TField є базовим, він інкапсулює властивості і методи абстрактного поля даних. Саме від нього походять всі класи типізованих полів. В реальній роботі клас TField не використовується, але його значення важко переоцінити. Практично всі основні властивості класів типізованих полів успадковані від класу TField без будь-яких змін, а додаткові властивості і методи забезпечують роботу конкретного типу даних.

Властивість DisplayLabel дає можливість встановлювати ім’я поля, від яким воно виводиться в елементах відображення. Властивість Visible дозволяє робити це поле невидимим в елементі відображення.

 

Питання для самоконтролю:

  1. Для чого призначений редактор полів?
  2. Як зробити поля таблиці статичними?
  3. Як призначити українські назви полів?
  4. Які поля називають обчислювальними?
  5. Які поля називають підстановчими?
  6. Як створти для таблиці обчислювальне поле?
  7. Як створити для таблиці підстановче поле?
  8. Для чого призначений редактор полів?

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

Тема: Елемент керування DBLookupComboBox.

Мета роботи: Навчити використовувати елемент керування DBLookupComboBox при розробці інтерфейсу бази даних.

Завдання

Створити інтерфейс бази даних Торгівля з використанням компоненти DBLookupComboBox.

ХІД РОБОТИ

1. Створіть новий проект. Розмістіть на формі згідно рисунку всі вищевказані компонента та компонент TDBNavigator, пов’язаний з джерелом таблиці Замовлення.

2. Ліквідуйте в модулі даних всі зв’язки, які ви раніше встановили між таблицями.

3. Налаштуйте основні властивості встановлених компонентів.

 

 

 

В ньому для виведення значень полів з даними про Прізвище покупця, Ім’я покупця, Область, Місто, Куплений товар, Ціна одиниці використано компоненти DBLookupComboBox. Для висвітлення значень полів Замовлена кількість та Вартість покупки використовуються компоненти TDBEdit. Для висвітлення поля Номер замовлення, яке не підлягає редагуванню, використовується компонент TDBText.

Налаштуйте основні властивості компонента DBLookupComboBox, за допомогою якого вводиться та відображується поле, пов’язане з прізвищем покупця:

DataField = Kod_Pocupcja – поле, в якому буде збережене код покупця, що відповідає вибраному в ComboBox значенню.

DataSource = DataModule2.DataSourceZamov– набір даних, що містить це поле.

ListSource = DataModule2.DataSourcePocup – на об’єкт, що містить дані підстановки.

ListField = Prizv – поле, що містить елементи даних, які будуть відображуватися в відкритому списку ComboBox.

KeyField =Kod_Pocupcja– значення, які будуть скопійовані в поле, що відображене у властивості DataField.

Таким чином, переміщуючись по записам таблиці Замовлення, ми маємо можливість переглядати поля з таблиць Покупець та Товар, які пов’язуються з основною таблицею через пару DataField – KeyField.

 

4. Запустіть проект на виконання.

5. Доповніть таблицю Замовлення, інтерфейс доступу до якої ви розробили, ще трьома записами.

6.Запишіть проект на диск.

 


ТЕОРЕТИЧНІ ВІДОМОСТІ

Компонент DBLookupComboBox– комбінований список, набір допустимих елементів якого задається з іншої таблиці (це нагадує використання поля підстановки). Розглянемо основні властивості цього компонента:

DataField – поле, в якому буде збережене вибране в ComboBox значення.

DataSource – набір даних, що містить це поле.

ListSource – посилається на об’єкт типу TDataSource, що містить дані підстановки.

ListField – поле, що містить елементи даних, які будуть відображуватися в відкритому списку.

KeyField– значення, які будуть скопійовані в поле, що відображене у властивості DataField.

Властивості ListField і KeyField можуть вказувати як на одне і те ж поле, так і на різні поля. Назви полів KeyField і DataField не обов’язково повинні бути однаковими, але в них повинні співпадати типи даних. Однак бажано, щоб ці поля мали однакову назву.

 

Питання для самоконтролю:

1. Як налаштувати компоненту DBLookupComboBox на відображення поля?

2. Як налаштувати компоненту TDBEdit?

3. Як налаштувати компоненту TDBText?

 


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

Тема: Робота з фільтрами в базах даних Delphi.

Мета роботи: Навчити вибирати набори даних за допомогою фільтрів.

 

Завдання

Створити програму для фільтрації даних.

 

ХІД РОБОТИ

1. Відкрийте попередній проект і доповніть інтерфейс ще однієї формою і пунктом меню Фільтр, який робить видимою цю форму. На новій формі розмістіть компоненти, як показано на рисунку.

3. В ролі компонентів, що висвітлюють Прізвище, Код Покупця, Товар та Код товару використовуються компоненти TDBText, компоненти TBDNavigation приєднуються до наборів даних Покупець та Товар.

4. Запишіть коди для обробників натискування на обидві кнопки Фільтація, за допомогою яких здійснюється фільтрація набору Замовлення за заданими значеннями Код Покупця або Код товару.

5. Перевірте роботу програми.

6. Запишіть код для обробки натискування на кнопку Відміна, який дозволяє ліквідувати заданe фільтрацію.

7. Реалізуйте обробник події OnFilterRecord для таблиці Замовлення, який дозволить відфільтрувати всі записи, в яких покупки здійснювалися після 1.01.2003 в кількості більше 5 (Властивість Filtered при цьому повинна бути встановлена в True).

8. Перевірте роботу програми.

9. Запишіть проект на диск.

ТЕОРЕТИЧНІ ВІДОМОСТІ

Найбільш ефективним способом відбору записів до набору даних (особливо з великих таблиць) є створення і виконання відповідного запиту SQL. Але для цього необхідно використовувати компоненти TQuery. Якщо ж набір даних функціонує на базі компонента TТable, використовується вбудований в набір даних механізм фільтрації даних. Використання фільтру базується всього на двох основних властивостях і одній допоміжній. Текст фільтру повинен міститися у властивості Filter, a властивість Filtered включає і відключає фільтр. Параметри фільтру визначаються властивістю FilterOptions. При використанні фільтра його текст транслюється BDE в синтаксис SQL і передається для виконання на сервер або через відповідний драйвер в локальну СУБД.

Фільтри можна створювати двома способами:

за допомогою властивості Filter створюються досить прості фільтри, для яких досить надаваного механізмом фільтрації синтаксису;

для створення більш складних фільтрів з використанням всіх можливих засобів мови програмування використовується метод-обробник набору даних OnFiiterRecord.

Фільтри можна поділити на статичні і динамічні. Статичні фільтри створюються під час розробки програми и можуть використовувати як властивість Filter, так і метод OnFiiterRecord. Динамічні фільтри можна створювати і редагувати під час виконання програми, для них використовується лише властивість Filter. При створенні тексту фільтра для властивості Filter використовуються імена полів відповідної таблиці БД, а для завдання відношень використовуються всі оператори порівняння (>, >=, <, <=, =, <>) і логічні оператора AND, OR, NOT: (Fieldl>100) AND (Field2=20)

Порівнювати між собою два поля не можна. Такий фільтр викличе помилку при спробі використання: (ItemCount – Balance) AND (InputPrice>OutputPrice)

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

procedure TFormI.EditlChange(Sender: TObject);

begin with Tablel do begin

Filtered := False;

Filter := 'Fieldl>=' + (Sender as TEdit).Text;

Filtered := True;

end;

end;

В фільтрах можна проводити відбір по частинам рядків для рядкових полів, для цього використовується символ зірочки (*): ItemName = 'A*'

Фільтр починає працювати лише після того, як властивості Filtered присвоюється істинне значення. Перед зміною тексту динамічного фільтра або для відключення фільтра властивості Filtered присвоюється значення False.

Параметри фільтра визначаються властивістю FilterOptions:

property FilterOptions: TFilterOptions;

TFilterOption – (foCaseInsensitive, foNoPartialCompare);

TFilterOptions = set of TFilterOption;

Параметр foCaseInsensitive, будучи включеним, відключає порівняння рядкових значень з урахуванням регістра символів. Параметр foNoPartialCompare відключає відбір строкових значень по частині рядка.

Метод-обробник ОnFilterRecord має таку декларацію:

type TFilterRecordEvent = procedure(DataSet: TDataSet; var Accept: Boolean) of object;

property OnFilterRecord: TFilterRecordEvent;

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

procedure TFormI.TablelFilterRecord(DataSet: TDataSet; var Accept: Boolean);

begin

Accept := ArchOrdersArchDat.AsString >= DateEditI.Text;

end;

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

Обробник подій доповнює, а не заміщує властивість Filter, тобто якщо включено фільтрацію (Filtered := True) і властивість фільтр містить значення фільтра, то дія в обробнику подій і фільтр пов’язані логічним відношенням "AND".

Питання для самоконтролю:

1. Що таке фільтрація даних?

2. Які методи можна використати для фільтрації даних?

3. Яка властивість визначає параметри фільтру?


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

Тема: Пошук в діапазоні значень в базах даних Delphi.

Мета роботи: Навчити використовувати функції SetRangeStart, SetRangeEnd, ApplyRange.

 

Завдання

Створити програму для пошуку в діапазоні значень.

 

ХІД РОБОТИ

1. Відкрийте попередній проект і доповніть інтерфейс форми 2, як показано на рисунку 1.

2. Запишіть коди для обробника натискування на кнопку Locate, за допомогою яких здійснюється пошук запису в наборі Замовлення за заданими значеннями Дата замовлення та Замовлена кількість (при цьому необхідно перетворбвати дані задані в рядковому редакторі до типу, який присвоєний відповідному полю).

3. Доповніть інтерфейс форми 2, як показано на рисунку 2.

4. Запишіть коди для обробника натискування на кнопку FindKey, за допомогою яких здійснюється пошук запису в наборі Замовлення за заданими його номером.

5. Запишіть коди для обробника натискування на кнопку FindNearest, за допомогою яких здійснюється приблизний пошук запису в наборі Замовлення за заданими його номером.

6. Перевірте роботу програми.

 

Рис 1. Рис 2.

 

7. За допомогою програми Database Desctop встановіть в таблиці замовлення вторинний індекс по полю Data_zamov.

8. Запишіть коди для обробника натискування на кнопку SetKeyGotoKey, за допомогою яких здійснюється пошук запису в наборі Замовлення за вказаною датою замовлення (використавши вторинний індекс Data_zamov).

9. Запишіть коди для обробника натискування на кнопку GotoNearestet, за допомогою яких здійснюється наближений пошук запису в наборі Замовлення за вказаною датою замовлення (використавши вторинний індекс Data_zamov).

10. Доповніть інтерфейс форми 2, як показано на рисунку.

 

 

11. Запишіть коди для обробника натискування на кнопку Пошук в діапазоні, за допомогою яких здійснюється пошук набору записів в наборі Замовлення за заданими початковою і кінцевою датою замовлення.

 

ТЕОРЕТИЧНІ ВІДОМОСТІ

В наборі даних, окрім фільтрів, є ще один засіб відбору записів. Група методів дозволяє на основі використання індексів відбирати до набору даних тільки ті записи, значення індексованих полів яких (для поточного індексу) відповідають діапазону заданих величин.

Діапазони працюють швидше фільтрів, але менш гнучкі і не так зручні в роботі. При використанні діапазонів набір даних обов’язково повинен знаходитися в стані dsSetKey.

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

Всі методи роботи з діапазонами використовують ті поля, які задані в поточному індексі. Для таблиць Paradox і dBASE це властивість IndexName. Для таблиць серверів SQL це властивість indexFieldNames.

Метод SetRangeStart переводить набір даних в режим dsSetKey, наступні за цим присвоювання ключовим полям означає завдання початкової межі діапазону.

Метод SetRangeEnd також переводить набір даних в режим dsSetKey, наступне за цим присвоювання ключовим полям означає завдання кінцевої межі діапазону.

Після цього необхідно використати метод ApplyRange, який застосовує створений діапазон до набору даних:

with Tablel do begin

SetRangeStart;

Fields[0].Value := '439';

SetRangeEnd;

Fields[1].Value := '522';

ApplyRange;

end;

Працюючий діапазон можна модифікувати аналогічним чином: після виклику методів EditRangeStart і EditRangeEnd необхідно задати нові межі для ключових полів і знову викликати метод ApplyRange:

with Tablel do begin

EditRangeStart;

Fields [0] .Value := '500';

EditRangeEnd;

Fields[1].Value := '522';

ApplyRange;

end;

Відміна діапазону здійснюється методом CancelRange.

Якщо індекс містить декілька полів, то перед викликом методу ApplyRange необхідно задати значення для всіх ключових полів.

Для одночасного завдання верхньої і нижньої межі діапазону можна використати методSetRange.

with Tablel do begin

SetRange(['500'], ['522']);

ApplyRange;

end;

Тим, яка границя буде у діапазону – відкрита чи закрита, керує властивість KeyExclusive. Якщо вона має значення True, граничні значення в діапазон не включаються, в противному випадку – включаються.

Зауваження. Значення кінцевих величин діапазону повинні бути реальними даними для заданого поля в наборі записів.

 

Питання для самоконтролю:

  1. Які методи можна використати для пошуку по довільній виборці полів?
  2. Яке призначення закладок у таблицях?
  3. Які методи використовуються для роботи із закладками в наборі даних?
  4. Які існуються методи пошуку по індексних полях?
  5. Які методи використовуються для пошуку по вторинних індексах?
  6. Які методи використовуються для пошуку у діапазоні даних?
  7. Які переметри потрібно передати для пошуку у діапазоні даних?
  8. Які методи використовуються для відміни діапазону і для застосування діапазону?

СПИСОК ЛІТЕРАТУРИ


  1. Александровский А., Шубин В., Delphi для профессионалов. – Питер: 2003р.
  2. Буга Г. Объектно-ориентированное програмирование с примерами применения. – М. – Конкорд,
  3. Вирт Н. Алгоритмы и структуры данных / Пер. с англ. – М.: Мир, 1989. - 360 с., ил.
  4. Гаевский А.Разработка программных приложений на Delphi 6 – М.: Киев, 2000.
  5. Гринзоу Лу. Философия программирования для Windows 95/NT / Пер. с англ. – СПб.: Символ-Плюс, 1997. – 640 с., ил.
  6. Джон Матчо, Дэвид Р.Фолкнер. «Delphi» – пер. с англ. – М.:Бином.
  7. Зелковиц М., Шоу А., Гэннон Дж. Принципы разработки программного обеспечения / Пер. с англ. – М.: Мир, 1982. – 386 с., ил.
  8. Практическое руководство по программированию / Пер. с англ. Б. Мик, П. Хит, Н. Рашби и др.; под ред. Б. Мика, П. Хит, Н. Рашби. – М.: Радио и связь, 1996. – 168 с., ил.
  9. Фокс Дж. Программное обеспечение и его разработка / Пер. с англ. – М.: Мир, 1995. - 368 с., ил.
  10. Язык компьютера. Пер. с англ, под ред. и с предисл. В. М. Курочки-на. – М.: Мир, 1999. - 240 с., ил.

 







Последнее изменение этой страницы: 2016-04-18; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.233.215.196 (0.034 с.)