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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2012, 01:41   #1
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
По умолчанию Фильтрация по CheckListBox

Здравствуйте товарищи программисты и любители у меня к вам вопрос ?
Хочу реализовать фильтрацию данных в базе данных как в экселе или в аксесе то есть выпадающий список с чекбоксами внутри по ним кликаеш то есть выбираешь два три четыре короче сколько нужно и потом жмешь кнопку и происходит фильтрация данных
Эту задачу я лично начел решать так :
Дополнительно на форму добавил ADOQuery2 в нем указал запрос : select имя from t
group by имя
Получившиеся сгруппированный список (это для того чтобы избежать дублирующие строки) я подгружаю в компонент CheckListBox1с помощью кода :
#
begin
while not ADOQuery2.Recordset.EOF do
begin
CheckListBox1.Items.Add(ADOQuery2.R ecordset.Fields[0].Value);
ADOQuery2.Recordset.MoveNext;
end;
#
Вот в дальнейшем я пытаюсь это дело отфильтровать ну по выбранным позициям там где чекеды стоят с помошью кода:
#
ADOQuery1.filtered:=false;
ADOQuery1.Filter := 'имя LIKE ' + '=''' + CheckListBox1.Items.Text + '''';
ADOQuery1.filtered:=true;
#
Но вы тоге либо отображается пустой дБ грид либо ошибка

Как мне быть не знаю ? мне бы хотя бы подсказать код который фильтровал ?? по нажатию на кнопку и выбранной строке в CheckListBox1

в вложенных файлах исходник на дэлфи 2010 и ошибка !
Возможно я надеюсь вы мне подскажите какое ни будь более красивое концептуально иное решение ??
Изображения
Тип файла: jpg Безымянный.jpg (19.8 Кб, 122 просмотров)
Вложения
Тип файла: rar Новая папка.rar (748.8 Кб, 8 просмотров)
reihtmonbern вне форума Ответить с цитированием
Старый 12.01.2012, 02:10   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Код:
procedure TForm1.Button6Click(Sender: TObject);
var
  I : Integer;
  S : string;
begin
  ADOQuery1.filtered:=false;
  S := '';
  for I := 0 to CheckListBox1.Items.Count - 1 do
    if CheckListBox1.Checked[I] then
      S := S + 'имя = ' + QuotedStr(CheckListBox1.Items[I])+' or ';

  if S <> '' then
    S := Copy(S, 1, Length(S)-4);
  ADOQuery1.Filter := S;
  ADOQuery1.filtered:=true;
end;
Так фильтр работает.
Вместо group by корректнее для указанной цели применить distinct:
Код:
select distinct имя from t

Последний раз редактировалось Прик; 12.01.2012 в 02:16. Причина: поправка
Прик вне форума Ответить с цитированием
Старый 12.01.2012, 03:02   #3
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
По умолчанию Блин Офигительно

СПАСИБО ОГРОМНЕЙШЕЕ ПРИ ОГРОМНЕЙШЕЕ СУПЕР ОТВЕТ И МОЛНИЕНОСНЫЙ ВСЁ РАБОТАЕТ НА УРААА!! :
reihtmonbern вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CheckListBox teres Общие вопросы Delphi 0 10.10.2011 18:08
CheckListBox BALLIN Помощь студентам 4 14.04.2010 11:37
CheckListBox jahongir007 Общие вопросы Delphi 4 07.06.2009 12:10
Checklistbox RealSHELS Общие вопросы Delphi 3 30.07.2008 22:40
CheckListBox ivp88 Компоненты Delphi 4 12.05.2007 15:49