Delphi World - Поочередный поиск заданного значения
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Поочередный поиск заданного значения

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

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

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;
Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования