- •Розділ 1. Об’єктно-орієнтоване програмування
- •Тема 1.1. Візуальне програмування.
- •Тема 1.2. Приклади та застосування інкапсуляції, успадкування, поліморфізму.
- •Тема 1.3. Бібліотека візуальних компонентів vcl та її базові класи.
- •1. Клас tWinControl.
- •2. Клас tСustomControl.
- •3. Клас tGraphicControl.
- •Тема 1.4. Обробка виняткових ситуацій.
- •1. Використовування виняткових ситуацій.
- •2. Протоколювання виняткових ситуацій.
- •3. Коди помилок у виняткових ситуаціях.
- •4. Виняткова ситуація eAbort. Функція Assert.
- •Розділ 2. Мова програмування Object Pascal.
- •Тема 2.1. Середовище Delphi.
- •Тема 2.2. Елементи мови Object Pascal.
- •1. Коментарі.
- •2. Логічні вирази.
- •Тема 2.3. Типи даних, процедури та функції.
- •1. Вказівники та динамічна пам'ять. Динамічна пам'ять
- •Вказівники
- •Виділення і звільнення динамічної пам'яті
- •Процедури і функції для роботи з динамічною пам'яттю
- •Тема 2.4. Управляючі структури Object Pascal.
- •Розділ 3. Програмування в середовищі Delphi.
- •Тема 3.1. Застосування списків. Способи запису/читання зі списків.
- •Є списком CheckBox елементів.
- •Тема 3.2. Масиви.
- •1. Пошук мінімального (максимального) елементу масиву.
- •2. Пошук в масиві заданого елементу.
- •Тема 3.3. Робота з файлами.
- •Тема 3.4. Типи даних визначені програмістом.
- •1. Показники.
- •2. Динамічні змінні.
- •Тема 3.5. Графічні програми.
- •1. Бітові образи.
- •2. Мультиплікація.
- •Властивості компоненту Timer
- •Тема 3.6. Приклади застосування анімацій у Delphi.
- •Тема 3.7. Рекурсія.
- •1. Крива Гільберта.
- •2. Пошук шляху.|колії|
- •Значення властивостей компоненту stringGrid1
- •3. Пошук найкоротшого шляху.|колії|
- •Тема 3.8. Компоненти для інтернету. Компонента tSocketConnection
- •Розділ 4. Бази даних.
- •Тема 4.1. Види баз даних. Структура та зв’язки між таблицями. Бази даних
- •Класифікація баз даних
- •Структура бази даних
- •Модель бази даних в Delphi
- •Тема 4.2. Модифікація структури таблиці в bde.
- •1. Зміна структури таблиці.
- •2. Встановлення перевірок правильності даних.
- •3. Завдання вторинних індексів.
- •Тема 4.3. Об’єкти відображення даних бази даних Delphi.
- •1. Класифікація компонентів відображення даних.
- •2. Елемент керування тdbGrid.
- •3. Компонент tdbEdit.
- •4. Компонент tdNavigator.
- •Тема 4.4. Обчислювальні поля і поля підстановки в Delphi.
- •1. Створення поля підстановки (поля синхронного перегляду).
- •2. Обчислювальні поля.
- •Тема 4.5. Компонента tdbEdit.
- •Тема 4.6. Переміщення по записам таблиці. Набір методів і властивостей tDataSet. Огляд
- •Клас tDataSet
- •Відкриття і закриття DataSet
- •Тема 4.7. Налаштування фільтрів.|
- •Тема 4.8. Приклади застосування пошуку.
- •Тема 4.9. Поєднання різних видів пошуку.
- •Тема 4.10. Типи даних та пошук в діапазоні.
- •Список літератури
Тема 4.9. Поєднання різних видів пошуку.
Для виконання пошуку записів в таблиці бібліотека VCL пропонує декілька методів. При роботі з таблицями dBase або Paradox, Delphi пропонує, що використовувані для пошуку поля індексовані. Для SQL-таблиць швидкодія пошуку буде зменшуватися при проведені пошуку по не індексованим полям.
В якості прикладу буде використовувати деяку таблицю, проіндексовану по першому полю з числовому типу і по другому полю з текстовим типом. В тому випадку пошук записів можна буде виконувати одним з двох способів: з а допомогою методу FindKey() або за допомогою пари методів SetKey()..GotoKey().
Метод FindKey().
Метод FindKey() класу TTable дозволяє шукати запис, використовуючи одне або декілька ключових полів при одному виклику функції. В якості параметру методу FindKey() передається масив типу array of const, який містить критерії пошуку. Якщо пошук відбувся успішно, метод повертає значення True. Наприклад, наступний оператор викликає переміщення в наборі даних до запису, де перше поле в індексі має значення 123, а друге містить рядок Hello:
if not Tabel1.FindKey([123,’Hello’]) then MessageBeep(0);
Якщо поле не знайдено, то метод FindKey() повертає значення False і комп’ютер подає звуковий сигнал.
Методи SetKey()..GotoKey().
Виклик методу SetKey() класу TTable переводить таблицю в режим, при якому її поля приготовляються до заповнення значеннями, які представляють собою критерій пошуку. Як тільки критерій пошуку буде встановлений, можна викликати метод GotoKey() для виконання пошуку потрібного запису в напрямку зверху вниз. Описаний вище приклад можна записати за допомогою пари методів SetKey()..GotoKey() наступним чином:
with Tabel1 do begin
SetKey;
Fields[0].AsInteger:=123;
Fields[1].AsString:=’Hello’;
if not GotoKey then MessageBeep(0);
end;
Пошук найближчої відповідності.
Подібним же чином метод FindNearest або пару методів SetKey – GotoNearest можна використати для пошуку в таблиці значення, яке найбільш близько відповідає критерію пошуку (більше або рівне!). Для пошуку першого запису, де значення першого індексованого поля найбільш близьке (більше або рівне) 123, можна використати код:
Table1.FindNearest([123]);
Тут знову в якості параметра методу FindNearest передається масив типу Array of Const, що містить значення полів, по яким проводиться пошук. Методи SetKey – GotoNearest можна використати таким чином:
With Table1 do begin
SetKey;
Fields[0].AsInteger:=123;
GotoNearest;
End;
Якщо пошук завершився успішно і властивість KeyExclusive об’єкта таблиці має значення False, вказівник поточного запису буде встановлено на перший з записів, що відповідають критерію пошуку. Якщо властивість KeyExclusive має значення True, поточним записом можна буде зробити запис, що слідує за останнім з тих записів, що відповідають умові пошуку.
Використання вторинних індексів.
В усіх описаних вище методах пошуку розумілося, що пошук проводиться з використанням первинного індексу таблиці (ключа). Якщо необхідно виконати пошук, використовуючи вторинний індекс, необхідно присвоїти ім’я цього індексу властивості IndexName таблиці. Наприклад, якщо в таблиці існує вторинний індекс по полю Company з іменем ByCompany, то пошук компанії Ford можна провести таким чином:
With Table1 do begin
IndexName:=ByCompany;
SetKey;
FieldByName(‘Company’).AsString:=’Ford’;
GotoKey;
End;
Зауваження. Переключення індексу відкритої таблиці створює значне додаткове навантаження на систему. Тому присвоєння властивості IndexName нового значення буде пов’язано з затримкою в роботі системи (секунда і більше).
Питання для самоконтролю:
Які існуються методи пошуку по індексних полях?
Які методи використовуються для пошуку по вторинних індексах?
