|
|
#1
|
||||
|
||||
Поиск по таблице
Имеется ADOQuery, DBGrig, в общем стандартный набор.
В базе есть какая-то таблица, с какими-то данными - вообще не суть. На форме есть DBGrid, в котором отображается таблица с данными, И имеется Edit, в котором вписываем текст для поиска. Пытаюсь сделать что по мере набора текста в Edit сразу же идет фильтрация. т.е. на обработчике Edit.KeyUP висит SQL отбор: Код:
with Form1.ADOQuery1 do begin SQL.Clear; SQL.Add('SELECT user_name,groups FROM users_list'); SQL.Add('WHERE usr_roles < 5'); SQL.Add('AND (user_name LIKE '+quotedstr('%'+Edit1.text+'%')); SQL.Add('OR groups LIKE '+quotedstr('%'+Edit1.text+'%')+')'); SQL.Add('ORDER BY user_name'); Open; End; Вопрос: Как избавиться от "Мерцания"? DoubleBuffering - не помогает. Или может я изначально не правильно делаю фильтрацию? - Тогда подскажите как это делать правильно. Програмистами не рождаются, ими становятся! |
#2
|
||||
|
||||
Сначала напишешь тему, опубликуешь, потом прочитал что написал, и появляется идея... Легкое гугление и вуаля:
Код:
if Length(Edit1.Text)>0 then begin Form1.ADOQuery1.Filter:='user_name LIKE '+quotedstr('%'+Edit1.text+'%')+ ' OR groups LIKE '+quotedstr('%'+Edit1.text+'%'); Form1.ADOQuery1.Filtered:=true; end else begin Form1.ADOQuery1.Filter:=''; Form1.ADOQuery1.Filtered:=false; end; Програмистами не рождаются, ими становятся! |
#3
|
||||
|
||||
Ну я бы фильтр применял только в том случае, если разница во времени последнего изменения эдита больше секунды, т.о. пока что-то вколачиваешь в эдит -- грид спокойный, оторвал руки от клавы и грид сразу становится буйным.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
M.A.D.M.A.N. Предлагаешь таймер еще повесить?... вроде как не комильфо, хотя идея интересная.
Програмистами не рождаются, ими становятся! |
#5
|
|||
|
|||
поищи в инете, может есть Edit с задержкой вызова OnChange
|
#6
|
||||
|
||||
Еще неплохо бы ограничивать количество результатов при таком запросе. Скажем 100 первых результатов более чем достаточно. Ну а мерцание должно уйти если включить буферизацию.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
gewasop (14.06.2015)
|