Главная » Delphi » Поиск в наборе данных

1

Наборы обеспечивают несколько вариантов поиска  данных.  Здесь рассматривают ся методы  поиска, не применяющиеся для SQL. Методы  поиска  SQL рассматриваются в главе 29, "Разработка приложений архитектуры клиент/сервер", предыдущего изда ния, Delphi 5 Руководство разработчика, содержащегося на прилагаемом CD.

Методы FindFirst и FindNext

Класс TDataSet обладает методами FindFirst(), FindNext(), FindPrior() и FindLast(),  которые  используют фильтр  для  поиска   записей,  отвечающих его критерию поиска.  Все эти  функции работают на неотфильтрованных наборах дан ных,  вызывая обработчик события OnFilterRecord. На  основании критерия по иска  в обработчике события эти  функции способны найти соответственно первую(first), следующую (next), предыдущую  (previous)  или  последнюю (last)  запись.  Эти функции не имеют  параметров и возвращают значение Boolean, сигнализирующее о том, что текущая запись  отвечает условию поиска.

Поиск записи с помощью метода Locate()

Фильтры эффективны не только  при  определении просматриваемого подмноже ства  записей набора данных, они  также  могут использоваться для поиска  записей в наборе данных  по значению одного  или нескольких полей.  Для этого  класс TDataSet содержит метод Locate(). Обратите внимание: функция Locate() выполняет поиск с помощью средств  фильтрации и работает независимо от каких либо  индексов, соз данных для набора данных. Метод Locate() определен следующим образом:

function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean;

Первый параметр, KeyFields, содержит имя поля  (или  полей), по которому прово дится  поиск.  Второй параметр, KeyValues, содержит искомое значение (или  значения) поля.  Третий параметр, Options, позволяет задать  необходимый тип поиска.  Этот пара метр имеет тип TLocateOptions, который представляет собой множество, определенное в модуле DB следующим образом:

type

TLocateOption = (loCaseInsensitive, loPartialKey);

TLocateOptions = set of TLocateOption;

Если задан параметр loCaseInsensitive, то поиск будет выполняться без учета реги стра. Если задан параметр loPartialKey, то значения, содержащиеся в KeyValues, будут считаться удовлетворяющими критерию, даже если  они  являются подстрокой искомого значения.

Метод  Locate() возвращает значение True, если  искомая запись  найдена. На пример, для поиска  первого вхождения значения 1356 в поле CustNo набора данных Table1 можно использовать следующий оператор:

Table1.Locate(‘CustNo’, 1356, []);

CОВЕТ

Везде, где только это возможно, используйте для поиска записей метод Locate(), по- скольку он всегда пытается применить самый быстрый из возможных методов поиска элемента, в случае необходимости временно переключаясь на индексный метод поиска. Это сделает программу независимой от индексов. Кроме того, если выяснится, что ин- декс по некоторому из полей больше не потребуется или, напротив, что добавление ин- декса увеличит производительность приложения, то можно будет изменить только дан- ные, не изменяя при этом код приложения.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии

1 комментарий

  1. unReal says:

    TLocateOptions Options;
    Options.Clear();
    Options << loPartialKey <Locate(ComboBox1->Text, “*” + Edit3->Text, Options );

    Будет искать и часть текста (подстроку), т.е. поиск по подстроке, а так же искать и в середине текста