Как мне найти запись (осуществить '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;
|
|