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

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

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

{/codecitation}

Добавить комментарий