Delphi 3 и создание приложений баз данных


7.7.3. Метод Lookup


function Lookup(const KeyFields: string; const Key Values: Variant;

const ResultFields: string): Variant;

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

Lookup осуществляет поиск только на точное соответствие критерия поиска и значения полей записи. Такой режим, как loPartialKey метода Locate (поиск по частичному соответствию значений), отсутствует.

Параметры:

В KeyFields указывается список полей, по которым необходимо осуществить поиск. При наличии в этом списке более чем одного поля, соседние поля разделяются точкой с запятой.

Key Values

указывает поисковые значения полей, список которых содержится в KeyFields. Если имеется несколько поисковых полей каждому i-му полю в списке KeyFields ставится в соответствие i-oe значение в списке Key Values. При наличии одного поля, его поисковое значение можно указывать в качестве Key Values непосредственно; в случае нескольких полей - их необходимо приводить к типу вариантного массива при помощи Var-Array'Of.

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

Если запись в результате поиска не найдена, метод Lookup возвращает Null, что выявляется при помощи предложения

IF VarType(LookupResults) = varNull THEN ...

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

• указано одно поле - результатом будет значение соответствующего типа или Null, если поле в найденной записи содержит пустое значение;

указано несколько полей - результатом будет вариантный массив, число элементов в котором меньше или равно числу результирующих полей;

меньше потому, что некоторые поля найденной записи могут содержать пустые значения. Рассмотрим несколько вариантов.

Пример

А. Одно результирующее поле (результат - значение типа Variant) Будем осуществлять поиск в ТБД "Сотрудники" по полю 'FIO'. Поисковое значение будем вводить в Edit I. В качестве результата будем выдавать значение поля "UchStepen' (ученая степень) найденной записи.

procedure TFormX.LookuplButtonClick(Sender: TObject);

var

LookupResults : Variant; // результат

begin

// осуществить поиск

LookupResults := Tablel.Lookup('FIO', Editl.Text, 'UchStepen') ;

Label 1.Caption := ";

// содержит ли результат пустое значение или Null?

CASE VarType(LookupResults) OF

varEmpt : Labell.Caption := 'Пустой результат';

varNull : Labell.Caption := 'Запись не найдена';

ELSE

// нет, результат содержит какое-то значение

Labell.Caption := LookupResults;

END; //case

end;

Заметим,что в присваивании

Labell.Caption := LookupResults;

имеет место приведение вариантного типа к строковому. Более подробно о приведении вариантных типов см. описание вариантного типа в документации и встроенной системе помощи Delphi.

Пример Б.

Несколько результирующих полей (результат - вариантный массив)

Некоторые сведения по использованию вариантного массива:

Если переменная типа Variant является вариантным массивом, функция VarIsArray(LookupResults) возвращает True.

При работе с переменным числом возвращаемых полей, в конкретном случае верхнюю и нижнюю границы массива LookupResults можно определить при помощи функций VarArrayLowBound(LookupResults, 1) и VarArrayHigh-Bound( LookupResults, 1).

Тип i-го элемента вариантного массива можно определить как VarType (LookupResults [ i]).

Будем осуществлять поиск в ТБД "Сотрудники" по полю 'FIO\ Поисковое значение будем вводить в Editi. В качестве результата будем выдавать значения полей "TabNum,DolJnost,UchStepen' найденной записи (табельный номер, должность, ученая степень).

procedure TFormX.LookupButtonClick(Sender: TObject) ;

var

LookupResults : Variant; // результат

begin

// осуществить поиск

LookupResults := Tablel.Lookup('FIO', Editl.Text, '' TabNum;Doljnost;UchStepen') ;

// будем показывать значения результирующих полей в TLabel

Labell.Caption := ";

Label2.Caption := ";

Label3.Caption := ";

// результат - вариантный массив ?

IF VarIsArray(LookupResults) THEN

begin

Labell.Caption := LookupResults[0];

IF LookupResults[1] 0 Null THEN

Label2.Caption := LookupResults [1];

IF LookupResults[2] о Null THEN

Label3.Caption := LookupResults [2];

end // then

ELSE

// результат - не вариантный массив, а единичное значение

CASE VarType(LookupResults) OF

varEmpty : Labell.Caption := 'Пустой результат';

varNull : Labell.Caption := 'Запись не найдена';

END; //case

end;

Если запись не найдена, VarType (LookupResults) возвращает значение varNull; если поиск по какой-либо причине не был произведен, VarType (LookupResults) возвращает значение varEmpty. Если какое-либо из полей, чьи значения возвращаются в результате поиска в вариантном массиве, содержит пустое значение, соответствующий элемент вариантного массива также будет содержать пустое значение (Null). В этом случае обращение к нему возбудит исключительную ситуацию, поэтому нужна предварительная проверка.




Начало  Назад  Вперед



Книжный магазин