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