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