Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2011, 08:42   #11
Aleks_www
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Surgeon Посмотреть сообщение
Есть такой вариант:
ловим клик по сетке - определяем активный столбец
определяем его размеры и позицию
динамически создаем edit над первой строкой сетки
прицепляем процедуру к этому edit'у на нажатие ентера (подтверждение ввода)
на основе полученных данных (текст в едите) делаем запрос/заполняем параметры запроса

я сделал по другому:
над сеткой поставил панель со скроллом (т.к. при горизнтальном скроле сетки сбиваются координаты столбцов)
там динамически генерились то ли едиты, то ли лукапбоксы для каждого поля и чекбоксы (для вкл/выкл фильтрации по данному полю)
потом циклом обходились все элементы, проверялось что включено, какое значение задано, определялся тип поля ( подстановочное/вычисляемое/с данными) - генерился запрос
Можно ваш вариант попробовать, но мне бы не хотелось с циклом связываться. Если записей будет допустим 100 000 или больше может потребоваться больше времени для такого поиска и результаты будут тогда показываться не сразу после набора очередного символа. Мне еще в голову пришла мысль кинуть на форму edit(ы) по количеству столбцов для поиска, установить их visible в false и при щелчке по сетке в зависимости от того какой столбец выбран передавать фокус тому или дугому edit(у), а уже из него символы в запрос select * where like "тест"+'%'
Aleks_www вне форума Ответить с цитированием
Старый 21.01.2011, 10:20   #12
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Я бы сделал так... (похожее есть в 1С).
При OnKeyPress в ячейке грида динамически создаю Edit и располагаю его либо в заголовке грида, либо внизу на месте футера и передаю ему фокус. Ширина Edit-а равна ширине столбца... Ну, чтобы получилось что-то наподобие как комбобокс фильтра в DBGridEh. И к созданному Edit-у прикручиваю событие OnChange. Наименование нужного поля мы знаем. По нему и делаем запрос. А в событии Edita OnExit уничтожаем сам Edit.
Но это так... размышления вслух...

Дописано... ой, я не прочитал весь топик... такое уже, кажется, предлагали

Последний раз редактировалось _SERGEYX_; 21.01.2011 в 10:22.
_SERGEYX_ вне форума Ответить с цитированием
Старый 21.01.2011, 13:02   #13
Aleks_www
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 39
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Я бы сделал так... (похожее есть в 1С).
При OnKeyPress в ячейке грида динамически создаю Edit и располагаю его либо в заголовке грида, либо внизу на месте футера и передаю ему фокус. Ширина Edit-а равна ширине столбца... Ну, чтобы получилось что-то наподобие как комбобокс фильтра в DBGridEh. И к созданному Edit-у прикручиваю событие OnChange. Наименование нужного поля мы знаем. По нему и делаем запрос. А в событии Edita OnExit уничтожаем сам Edit.
Но это так... размышления вслух...

Дописано... ой, я не прочитал весь топик... такое уже, кажется, предлагали
Я вот думал думал и додумал). Нормальные варианты с edit. Как бы еще отловить первый вводимый символ после KeyPress, чтобы он сразу в этот созданный edit и попадал.
Aleks_www вне форума Ответить с цитированием
Старый 21.01.2011, 13:13   #14
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Код:
procedure TForm1.DBGridEh5KeyPress(Sender: TObject; var Key: Char);
var e: TEdit;
begin
  e:= TEdit.Create(Self);
  e.Parent:= DBGridEh5;
 // e.Top:= ;
 // e.Left:= ;
  e.Visible:= True;
 e.Text:= Key;
 e.SetFocus;
end;
Типа того...
_SERGEYX_ вне форума Ответить с цитированием
Старый 21.01.2011, 14:03   #15
Aleks_www
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 39
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Код:
procedure TForm1.DBGridEh5KeyPress(Sender: TObject; var Key: Char);
var e: TEdit;
begin
  e:= TEdit.Create(Self);
  e.Parent:= DBGridEh5;
 // e.Top:= ;
 // e.Left:= ;
  e.Visible:= True;
 e.Text:= Key;
 e.SetFocus;
end;
Типа того...
Точно!
Edit.Text:= Key;
Спасибо.

Еще вот это туда же чтобы курсор встал в конец текста и сразу событие изменения текста.
Edit.SelStart:=1;
Edit.OnChange(self);

а дальше уже стандартный запрос в событии Edit.OnChange.
Aleks_www вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм поиска текста Рабина на Delphi 7 выходит ошибка Des Общие вопросы Delphi 14 15.05.2012 11:14
Интерфейс поиска и замены текста в richTextBox delias Общие вопросы .NET 4 29.10.2010 18:36
Макрос поиска текста на листе Movled Microsoft Office Excel 11 29.07.2010 11:59
Как сделать чтобы во время поиска по таблице не было видно перемещения по dbgrid? alxsev БД в Delphi 4 10.04.2009 19:03
программа поиска и замены+копирования текста 666dvg999 Общие вопросы C/C++ 4 05.10.2008 20:01