Locate

Цей універсальний метод пошуку встановлює поточний запис як першу рядок, що задовольняє набору критеріїв пошуку. Використовуючи метод ми можемо шукати значення одного або більше полів, розташованих у масиві змінних. В наведеному нижче коді, метод шукає перший запис, що містить рядок “Zoom” в полі “Name”. Якщо виклик повертає True – то запис знайдений і встановлена ​​як поточна.

AdoTable1.(“Name”,”Zoom”,[]);{… Або …}
var ffield, fvalue: string;
opts : TOptions;

ffield := “Name”;
fvalue := “zoom”;
opts := [loCaseInsensitive];
if not AdoTable1.(ffield, fvalue, opts) then
ShowMessage(fvalue + ” not found in ” + ffield);


Lookup


Метод Lookup не переміщує курсор у відповідний рядок, а тільки повертає її значення. Lookup повертає масив змінних, що містять значення з полів, зазначених у розділеному крапкою з комою списку імен, значення яких повинні бути повернуті з цікавої для нас рядки. Якщо відповідних нашому запиту рядків не знайдено, то Lookup поверне порожню (Null) змінну.

Наступний приклад заповнює заповнює масив змінних LookupRes

var LookupRes: Variant;
LookupRes := ADOTable1.Lookup
(“Name”, “Zoom”, “Author; Description”);
if not VarIsNull(LookupRes) thenShowMessage (VarToStr (LookupRes [0])) / / ім’я автора

Одна з переваг методів і Lookup, полягає в тому, що вони не вимагають, щоб таблиця була проіндексована. Однак, функція буде працювати набагато швидше, якщо таблиця буде проіндексована.

Індексування


Індексування допомагає знаходити і сортувати записи набагато швидше. Ви можете створювати індекси засновані на одному полі або на декількох полях. Індексування декількох полів дозволяє Вам розрізняти записи, в яких перше поле може мати те ж саме значення. У більшості випадків при частому пошуку / сортуванні бажано індексувати поля. Наприклад, якщо Ви шукаєте певний тип додатка в поле Type, то Ви можете створити індекс на це поле для прискорення пошуку за типом. Слід згадати, що первинний ключ таблиці автоматично проіндексовані, а так само Ви не можете індексувати поля з типом даних OLE Object. І ще, зверніть увагу, що якщо багато хто з значень в полі ті ж самі, то індексування в даному випадку не прискорить процес одержання даних з БД.

BDE (не ADO) Delphi надає нам певні функції для роботи з таблицями бази даних, які дозволяють нам проводити пошук необхідних значень. Ось деякі з них Goto, GoToKey, GoToNearest, Find, FindKey, Find Nearest, і т.д. Для більш повної довідки по цих методів, Вам слід подивитися в довідці Delphi, в розділі: Searching for records based on indexed fields. ADO навпроти не підтримує ці методи. Замість цього він представляє метод Seek.

Seek


У ADO метод Seek використовує індекс для пошуку даних. Наприклад, при пошуку в базі даних Access, якщо не задати індекс, то база даних буде використовувати Первинний індексний ключ.

Seek використовується для пошуку записів з вказаним значенням (або значеннями) в поле (або полях) на яких заснований поточний індекс. Якщо Seek не знаходить бажану рядок, то ніякої помилки не видається, а курсор встановлюється в кінець даних. Seek повертає значення boolean, вказує на успішність пошуку: True якщо запис була знайдена або False якщо записів задовольняють нашим вимог не було знайдено.

Метод GetIndexNames в компоненті TADOTable повертає список (наприклад: осередків combo box) доступних індексів для таблиці.

ADOTable1.GetIndexNames(ComboBox1.Items);

Цей же список доступний в режимі розробки у властивості IndexName компонента TADOTable. Властивість IndexFieldNames може використовуватися як альтернативний метод для визначення індексу використовуваного в таблиці. У IndexFieldNames, ми вказуємо ім’я кожного поля для використання в таблиці.

Метод Seek має наступне визначення:

function Seek(const KeyValues: Variant; SeekOption: TSeekOption = soFirstEQ): Boolean;



Примітка 1: метод Seek підтримує курсори тільки на стороні сервера (Server-side). Seek не працюватиме, якщо значення властивості CursorLocation одно clUseClient. Для цього використовується метод Supports для визначення основного провайдера, підтримуючого Seek.

Примітка 2: коли Ви використовуйте метод Seek для декількох полів, то Seek поля повинні бути в тому ж самому порядку як поля в основній таблиці. Якщо це не так, то метод Seek видасть помилку.

Примітка 3: Ви не зможете використовувати метод Seek в компоненті TADOQuery.

Щоб визначати, чи була відповідна запис знайдено, ми використовуємо властивості BOF або EOF (залежно від напрямку пошуку). Наступний код використовує індекс, вказаний у ComboBox, щоб знайти значення, що міститься в вікні редагування Edit1.

var strIndex: string;strIndex: = ComboBox1.Text; / / з прикладу вище
if ADOTable1.Supports(coSeek) then begin
with ADOTable1 do begin
Close;
IndexName := strIndex;
CursorLocation := clUseServer;
Open;
Seek (Edit1.Text, soFirstEQ);
end;
if ADOTable1.EOF then
ShowMessage (“Record value NOT found”);
end

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*