Как мне найти запись (осуществить '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 dobegin
CurrentPos := Query1.GetBookmark;
Query1.DisableControls;
found := false;
if searchtype <> 'prev' then{ первый или следующий }beginif searchtype = 'first' then
Query1.First
elseifnot Query1.EOF then
Query1.Next;
while (not Query1.EOF) and (not found) dobeginif LookForString(StringToFind, MemberName) <> 0 then
found := true;
ifnot found then
Query1.Next;
end;
endelsebegin{ prev }ifnot Query1.BOF then
Query1.Prior;
while (not Query1.BOF) and (not found) dobeginif LookForString(StringToFind, MemberName) <> 0 then
found := true;
ifnot found then
Query1.Prior;
end;
end;
Screen.Cursor := OldCursor;
if found thenbegin
FindSearch := false;
ChangeFindCaption;
UpdateStatusLabel;
endelsebegin
MessageDlg('Больше ничего не найдено.', mtInformation,
[mbOK], 0);
Query1.GotoBookmark(CurrentPos);
end;
Query1.EnableControls;
Query1.FreeBookmark(CurrentPos);
end; { конец работы с Form1 }end;
procedure TForm1.FindButtonClick(Sender: TObject);
beginif FindSearch then
SearchName('first', Page0Edit.Text)
else
SearchName('next', Page0Edit.Text);
end;
В статье описывается способ поиска записи в TQuery с помощью процедуры SearchName, которая выполняет поиск в направлении "первого" или "следующего" элемента, соответствующего введенному строковому параметру.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.