Поиск записи с помощью 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;
beginif 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]