Использование Delphi для создания приложений баз данных. Устюгова В.Н. - 38 стр.

UptoLike

Составители: 

38
Лабораторная работа 6
Поиск записей в наборах данных по индексированным полям
Для поиска записей в наборах данных в компоненте ТТаble по индексированным полям
применяются следующие методы:
FindKey- ищет запись, точно удовлетворяющую условиям в списке значений. Существует
метод GoToKey, выполняющий аналогичные действия.
FindNearest - ищет запись, наиболее полно удовлетворяющую условиям в списке значений.
Существует метод GoToNearest, выполняющий аналогичные действия.
Установка значений для поиска
Состав полей, используемых для идентификации нужной записи при поиске в наборе
данных, определяется текущим индексом. Поэтому в качестве текущего нужно установить
индекс, построенный по полям, значения которых и будут отыскиваться. Для установки
текущего индекса используют свойства IndexFieldNames или IndexName.
Для индексов, в состав которых входит более одного поля, должны указываться
значения всех полей, входящих в индекс, или значения полей старших уровней вложенности.
Точный поиск
Для точного поиска (поиска на точное соответствие) применяется метод FindKey. Он
пытается отыскать в наборе данных запись, у которой индексные поля соответствуют
значениям, указанным в параметре обращения. Если такая запись найдена, метод FindKey
возвращает True и указатель текущей записи в наборе данных (курсор наборе данных)
устанавливается на эту запись, т.е. она становится текущей. Если найдена группа записей,
отвечающая условию, текущей становится логически первая из них. Если запись не найдена,
курсор набора данных не перемещается и метод возвращает False.
Пример. Пусть имеется набор данных с полями NumGr (номер группы), NN
(номенклатурный номер товара), Tovar (наименование товара);
NumGr NN Tovar
1 10 Макароны
12 1 Вода минеральная
12 4 Кефир
12 26 Груши
100 1 Конфеты «Ласточка»
100 10 Крупа гречневая
Предположим, что поисковое значение NumGr вводится в поле Edit1, а NN – в поле
Edit2. Тогда обработчик нажатия клавиши поиска FindButton может выглядеть так (для
простоты в обработчике не контролируется правильность ввода в компонентах Edit1, Edit2):
procedure TFormA.FindButtonClick (Sender: TObject) ;
var
GrTmp, NNTmp: Integer;
begin
GrTmp:=StrToInt(Editl.Text) ;
NNTmp:=StrToInt(Edit2.Text) ;
// поиск записи
if not Table2.FindKey([GrTmp,NNTmp]) then
ShowMessage('Нет товара с такой группой и номером!');
end;
                              Лабораторная работа № 6

               Поиск записей в наборах данных по индексированным полям

    Для поиска записей в наборах данных в компоненте ТТаble по индексированным полям
применяются следующие методы:
FindKey- ищет запись, точно удовлетворяющую условиям в списке значений. Существует
метод GoToKey, выполняющий аналогичные действия.
FindNearest - ищет запись, наиболее полно удовлетворяющую условиям в списке значений.
Существует метод GoToNearest, выполняющий аналогичные действия.

                  Установка значений для поиска
      Состав полей, используемых для идентификации нужной записи при поиске в наборе
данных, определяется текущим индексом. Поэтому в качестве текущего нужно установить
индекс, построенный по полям, значения которых и будут отыскиваться. Для установки
текущего индекса используют свойства IndexFieldNames или IndexName.
      Для индексов, в состав которых входит более одного поля, должны указываться
значения всех полей, входящих в индекс, или значения полей старших уровней вложенности.

                                    Точный поиск

     Для точного поиска (поиска на точное соответствие) применяется метод FindKey. Он
пытается отыскать в наборе данных запись, у которой индексные поля соответствуют
значениям, указанным в параметре обращения. Если такая запись найдена, метод FindKey
возвращает True и указатель текущей записи в наборе данных (курсор наборе данных)
устанавливается на эту запись, т.е. она становится текущей. Если найдена группа записей,
отвечающая условию, текущей становится логически первая из них. Если запись не найдена,
курсор набора данных не перемещается и метод возвращает False.
     Пример. Пусть имеется набор данных с полями NumGr (номер группы), NN
(номенклатурный номер товара), Tovar (наименование товара);
NumGr        NN    Tovar
1            10    Макароны
12           1     Вода минеральная
12           4     Кефир
12           26    Груши
100          1     Конфеты «Ласточка»
100          10    Крупа гречневая

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

procedure TFormA.FindButtonClick (Sender: TObject) ;
var
GrTmp, NNTmp: Integer;
begin
GrTmp:=StrToInt(Editl.Text) ;
NNTmp:=StrToInt(Edit2.Text) ;
// поиск записи
if not Table2.FindKey([GrTmp,NNTmp]) then
ShowMessage('Нет товара с такой группой и номером!');
end;

                                          38