Идёт загрузка страницы...

htp://aptem.net.ru





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

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