Поделиться Поделиться

If DataModule2.Nakls.Locate("NDate", DateTimePicker.Date, []) then

With Table1 do

Begin

First;

While not EOF do

Begin

{какие-либо действия над очередной записью}

Next;

end ;

end ;

Если использовать repeat…until то:

With Table1 do

Begin

First;

Repeat

{какие-либо действия над очередной записью}

until notFindNext;

end ;

Метод Locate

Метод Locate ищет первую запись, удовлетворяющую критерию поиска, и если такая запись найдена, делает ее текущей. В этом случае в качестве результата возвращается значение True. Если запись не найдена, возвращается значение False и курсор не меняет своего положения.

function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocaleOptions):Boolean

Список KeyFields указывает поле или несколько полей, по которым ведется поиск. В случае нескольких поисковых полей их названия разделяются точкой с запятой. Критерии поиска задаются в вариантном массиве KeyValues так, что i-e значение в KeyValues ставиться в соответствие i-му полю в KeyFields. Параметр Options указывает, необязательные значения режимов поиска.

IoCaseInsensitivite – поиск ведется без учета возможной разницы регистра букв в текстовых полях и в критерии поиска.

IoPartialKey – запись считается удовлетворяющей условию поиска, если она содержит часть поискового контекста; например, удовлетворяющим контексту "Диа" будут признаны записи со значениями в поле поиска "Диалект", "Диалог-МИФИ", "ДиаСофт" и т.д.

Метод Locate производит поиск по любому полю независимо от того входит оно в состав какого-либо индекса или нет. Если поле (поля) поиска входят в какой-либо индекс, Locate автоматически использует его, что существенно увеличивает скорость поиска.

Пример:

  • Добавьте на форму своего проекта элемент управления TDateTimePicker
  • Добавьте этому компоненту обработчик события OnChange и в нем напишите следующие строки

if DataModule2.Nakls.Locate("NDate", DateTimePicker.Date, []) then

DBGrid1.SetFocus;

Теперь при воде в компонент нужной даты программа отыщет в наборе Nakls первую накладную с этой датой

Метод Lookup

Метод Lookup находит запись, удовлетворяющую условию поиска, но не делает ее текущей, а возвращает значения некоторых ее полей. Независимо от результата поиска записи указатель текущей записи в НД не изменяется. В отличие от метода Locate метод Lookup осуществляет поиск только на точное соответствие критерию поиска значения поля поиска записи.

function (const KeyFields: String; const KeyValues: Variant; ResultFields: String): Variant

В параметре KeyFields указывается список полей, по которым необходимо осуществить поиск (если задается значение по нескольким полям, соседние поля разделяются точкой с запятой). Параметр KeyValues определяет поисковые значения полей, список которых содержится в параметре KeyFields. В параметре ResultFields перечисляются поля, значения которых требуется получить в случае спешного поиска. Тип результата поиска – Variant или вариантный массив.

Если имеется несколько поисковых полей, каждому i-му полю в KeyFields ставиться в соответствие i-e значение в KeyValues. Если поиск ведется по одному полю, его поисковое значение можно указывать в качестве KeyValues непосредственно; в случае нескольких полей их необходимо приводить к типу вариантного массива при помощи функции преобразования VarArrayOf.

Как и в методе Locate, в качестве поисковых полей можно указывать поля как входящие в какой-либо индекс, так и не входящие в него. Если в результату поиска запись не найдена, метод Lookup возвращает Null.

Если поиск оказался успешным, Lookup возвращает из найденной записи значения полей, список которых содержит ResultFields. При этом размерность результата зависит от того сколько результирующих полей указано в ResultFields.

Пример:

  • Добавьте следующие компоненты:
    • TSpinEdit – поменяйте имя компонента на seBookID
    • 2 компонента TLabel - поменяйте имена компонентов на lBookName и lBookAuthor соответственно.
    • TButton – в свойстве Caption наберите слово "Искать"
  • Добавьте обработчик события OnClick и напишите в нем следующее:

Var

LookupResult:variant;

Begin

LookupResult := DataModule2.Books.Lookup("BookID",seBookID.Value, "BName;BAuthor");

ifVarType(LookupResult) = varNull then

ShowMessage("Нет накладной с номером " + IntToStr(seBookID.Value))

else ifVarType(LookupResult) = varEmpty then

ShowMessage("Поиск не проведен")

← Предыдущая страница | Следующая страница →