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