Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Поиск записи с помощью TQuery

Как мне найти запись (осуществить 'Find') в TQuery?

Я привел ниже код, который я использую в своей работе, правда, в нем еще необходимо организовать обработку исключительных ситуаций, но это дело времени. Когда пользователь нажимает кнопку "Найти", обработчик события OnClick вызывает процедуру SearchName.

Объявляем: FindSearch : Boolean и инициализируем значением True.


 function LookForString(target, source: string): boolean;
 { в случае игнорирования перед вызовом pos необходимо
 преобразовать source и target в верхний регистр }
 begin
   LookForString := pos(target, source);
 end;
 
 procedure SearchName(searchtype: string; stringtofind: string);
 var
   OldCursor: TCursor;
   CurrentPos: TBookmark;
   found: boolean;
 begin
   if Form1.Query1.State = dsEdit then
     Form1.Query1.Post;
   if StringToFind = '' then
     exit;
   OldCursor := Screen.Cursor;
   Screen.Cursor := crHourGlass;
   with Form1 do
   begin
     CurrentPos := Query1.GetBookmark;
     Query1.DisableControls;
     found := false;
     if searchtype <> 'prev' then { первый или следующий }
     begin
       if searchtype = 'first' then
         Query1.First
       else if not Query1.EOF then
         Query1.Next;
       while (not Query1.EOF) and (not found) do
       begin
         if LookForString(StringToFind, MemberName) <> 0 then
           found := true;
         if not found then
           Query1.Next;
       end;
     end
     else
     begin { prev }
       if not Query1.BOF then
         Query1.Prior;
       while (not Query1.BOF) and (not found) do
       begin
         if LookForString(StringToFind, MemberName) <> 0 then
           found := true;
         if not found then
           Query1.Prior;
       end;
     end;
     Screen.Cursor := OldCursor;
     if found then
     begin
       FindSearch := false;
       ChangeFindCaption;
       UpdateStatusLabel;
     end
     else
     begin
       MessageDlg('Больше ничего не найдено.', mtInformation,
         [mbOK], 0);
       Query1.GotoBookmark(CurrentPos);
     end;
     Query1.EnableControls;
     Query1.FreeBookmark(CurrentPos);
   end; { конец работы с Form1 }
 end;
 
 procedure TForm1.FindButtonClick(Sender: TObject);
 begin
   if FindSearch then
     SearchName('first', Page0Edit.Text)
   else
     SearchName('next', Page0Edit.Text);
 end;
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS