Поочередный поиск заданного значения
Автор: Панасюк Артем
Это поочередный поиск заданого значения (начало, середина, один символ и тд.), при чем регистр не имеет значения. Поиск по больших выборках даных
будет несколько долговат, но наглядный.
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;
|