Метод Locate шукає перший запис, що задовольняє умовам пошуку. Якщо запис знайдений, метод робить її поточної і повертає True. В іншому випадку метод повертає False і курсор не змінює положення. Поле, по якому ведеться пошук, не обов'язково має бути індексовано. Однак якщо поле індексовано, то метод шукає запис за індексом, що значно прискорює пошук. Пошук може вестися як по одному полю, так і по декількох полях. Метод має три параметри:
function Locate (const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions). Boolean;
Параметр KeyFields задає поле або список полів, за якими ведеться пошук. За наявності кількох полів, їх розділяють крапкою з комою.
Параметр KeyValues є варіантним масивом, в якому задаються критерії пошуку. При цьому перше значення KeyValues ставиться у відповідність з першим полем, зазначеним в KeyFields. Друге - з другим, і так далі.
Третій параметр Options дозволяє задати деякі опції пошуку:
• loCaseInsensitive - пошук ведеться без урахування висоти букв, тобто, вважаються однаковими рядки "рядок", "Рядок" або "СТРОКА".
• loPartialKey - запис буде задовольняти умові, якщо її частина містить шуканий текст. Тобто, якщо ми шукаємо "ст", то задовольняти умові будуть "рядок", "станція", "стажер" і т.п.
• Порожній набір [] вказує, що налаштування пошуку ігноруються. Тобто, рядок шукається "як є".
Приклади використання методу Locate:
Table1.Locate ( 'aMmraH ^ MH ', VarArrayOf ([' Іванов '.' Іван ']), [loCaseInsensitive]);
Як видно з прикладу, якщо для пошуку ви використовуєте одне поле, то значення може передаватися безпосередньо з компонента Edit. Якщо ж ви використовуєте список полів, то повинні передати в метод масив варіантів, в яких містяться шукані значення, по одному на кожне поле. При установці компонента ADOTable в розділ uses прописується модуль ADODB, який містить опису всіх властивостей, методів і подій компонента. Бажано використовувати метод в тому модулі, де встановлений цей компонент.
Розглянемо застосування цього методу на прикладі. Відкрийте проект. Перейдіть на модуль DM, де у нас зберігаються компоненти доступу до бази даних. Процедуру пошуку реалізуємо в цьому модулі, а щоб з нею можна було працювати з інших форм, опишемо її в розділі public:
Як бачите, в процедуру передається параметр - рядок. У ній ми будемо передавати шукану прізвище. Якщо курсор знаходиться на описі нашої процедури, то натисніть
procedure TfDM.MyLocate (s: String); begin
TLichData.Locate ( 'прізвищ', s, [loPartialKey]); end;
Таким чином, при знаходженні відповідного запису курсор буде переміщатися до неї.
На головній формі виділіть компонент Edit, призначений для пошуку на прізвище. Створіть для нього подія onChange, яке настає при зміні тексту в поле компонента. У створеній процедурі пропишіть виклик пошуку:
Збережіть приклад, скомпілюйте і випробуйте результати пошуку. Метод Locate рекомендується використовувати всюди, де це можливо, оскільки він завжди намагається застосувати найбільш швидкий пошук. Якщо поле індексовано, і використання індексу прискорить процес пошуку, Locate використовує індекс. Якщо поле не має індексу, Locate все одно шукає дані найбільш швидким способом. Це робить вашу програму незалежної від індексів.