Поочередный поиск заданного значения

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

Автор: Панасюк Артем

Это поочередный поиск заданого значения (начало, середина, один символ и тд.), при чем регистр не имеет значения. Поиск по больших выборках даных будет несколько долговат, но наглядный.

procedure SearchValue(AQuery: TADOQuery; AField, AValue: string);

var

i: integer;

NoRec: integer;

begin

with AQuery do

begin

First;

for i := 0 to RecordCount — 1 do

begin

if (not Eof) and (Pos(AnsiLowerCase(AValue),

AnsiLowerCase(FieldByName(AField).AsString)) 0) then

begin

if MessageBox(HWND_DESKTOP, PChar(‘Заданое значение найдено!’ #10#13

‘ Продолжать поиск’), ‘Поиск’, MB_YESNO

MB_ICONINFORMATION MB_DEFBUTTON1) = IDYES then

begin

NoRec := RecNo;

Next;

end

else

Break;

end

else

Next;

end;

MoveBy(NoRec — RecordCount);

MessageBox(HWND_DESKTOP, PChar(‘Поиск завершен!’), ‘Поиск’, MB_OK

MB_ICONINFORMATION MB_DEFBUTTON1);

end;

end;

// А это пример того, как я вызывал

// процедуру поиска через TActionList

procedure TfmMain.acSearchExecute(Sender: TObject);

var

S: string;

begin

S := »;

S := InputBox(‘Поиск’, ‘Введите значение для поиска:’, S);

if S » then

SearchValue(((Screen.ActiveControl as TDBGridEh).DataSource.DataSet as

TADOQuery), (Screen.ActiveControl as

TDBGridEh).SelectedField.FieldName, S);

end;

procedure TfmMain.acSearchUpdate(Sender: TObject);

begin

(Sender as TAction).Enabled :=

Assigned(Screen.ActiveControl) and

(Screen.ActiveControl is TDBGridEh);

end;

{/codecitation}

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