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

       

Точный поиск


Для точного поиска (поиска на точное соответствие) применяется метод function FindKey( [список значений]): Boolean;

При поиске на точное соответствие предпринимается попытка отыскать в НД запись, у которой индексные поля соответствуют значениям, указанным в списке значений. Если такая запись найдена, метод FindKey возвращает True и указатель текущей записи в НД (курсор НД) устанавливается на эту запись, т.е. она делается текущей. Если найдена группа записей, отвечающая условию, текущей становится логически первая из них. Если запись не найдена, курсор НД не перемещается и метод FindKey возвращает False.

Пример. Пусть имеется НД с полями GrNum (номер группы), NN (номенклатурный номер товара), Tovar (наименование товара):

Предположим, что поисковое значение GrNum вводится в Edit1, a NN - в Edit2 (рис.8.4). Тогда обработчик нажатия клавиши поиска FindButton может выглядеть так (для простоты в обработчике не контролируется правильность ввода в компонентах Edit1, Edit2):

procedure TForm1.FindButtonClick(Sender: T0b]ect);

var GrTmp, NNTmp : Longint;

begin

GrTmp := StrToInt(Edit1.Text);

NNTmp := StrToInt(Edit2.Text);

// поиск записи

IF not Table1.FindKey([GrTmp,NNTmp]) then ShowMessage ('Нет товара с такой группой и номером!');

end;

Пусть в Edit1 введено "12" и в Edit2 - "4". Тогда указатель переместится на запись, у которой значение GrNum равно 12 и значение поля NN равно 4 (рис. 8.5):

Пусть в Editi введено "12" и в Edit2 введено "О". Тогда указатель не переместится с текущей записи и будет выдано сообщение 'Нет товара с такой группой и номером!'.

Для неточного поиска в Delphi имеется группа методов SetKey, EditKey, GotoKey, которые должны выполняться вместе и которые по функциональности аналогичны методу FindKey. Использование их является менее удобным. Сначала нужно перевести НД в состояние dsSetKey (методом SetKey или, если он уже применялся для данного индекса, EditKey), затем присвоить поисковые значения полям и выполнить метод GoToKey. После этого НД переходит в состояние dsBrowse. Результат выполнения аналогичен результату, возвращаемому методом FindKey. Например, код

IF not Table1.FindKey([GrTmp,NNTmp]) then ShowMessage('Нет товара с такой группой и номером!');

эквивалентен более громоздкому коду с применением GotoKey.

Table1.SetKey;

Table1GrNum.Value := GrTmp;

Table1NN.Value := NNTmp;

IF not Table1.GoToKey then

ShowMessage('Нет товара с такой группой и номером! ');



Содержание раздела