Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_самостійне_опрацюв.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1 Мб
Скачать
☆

Тема 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 нового значення буде пов’язано з затримкою в роботі системи (секунда і більше).

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

  1. Які існуються методи пошуку по індексних полях?

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]