|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Фильтрация в BDGrid
Всем приветик. Помогите плизззз....
На форме BDGrid и 2 ComboBox ComboBox1 - специальность (spec) ComboBox2 - год (year) При компиляции в таблице полный список студентов. При необходимости пользователь может отфильтровать список либо по специальности, либо по году выпуска по отдельности фильтрация у меня получается, но я не понимаю как сделать если будет необходимо отфильтровать по обоим полям. Код для фильтра по специальности: Код:
procedure TMainForm.ComboBox1Change(Sender: TObject); begin DataModule2.StudentQuery.Active:=false; DataModule2.StudentQuery.SQL.Clear; DataModule2.StudentQuery.SQL.Add('Select *'); DataModule2.StudentQuery.SQL.Add('From vipusk'); DataModule2.StudentQuery.SQL.Add('where spec LIKE '''+'%'+Combobox1.text+'%'+''''); DataModule2.StudentQuery.Active:=true; end; Может нужно было сделать по другому но я не знаю как. Может кто поможет ??? Последний раз редактировалось Admin, 05.04.2009 в 13:08. |
#2
|
||||
|
||||
Если по одному из вариантов то так:
Код:
DataModule2.StudentQuery.SQL.Add(Format('where spec LIKE %s OR spec LIKE %s',[Combobox1.text,Combobox2.text])); Код:
DataModule2.StudentQuery.SQL.Add(Format('where spec LIKE %s AND spec LIKE %s',[Combobox1.text,Combobox2.text])); Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
создала еще кнопку для фильтрации и прописала вышеуказанный код, но он ошибку выдает =(
|
#4
|
|||
|
|||
написала код на кнопку:
Код:
procedure TMainForm.BitBtn2Click(Sender: TObject); var filtr, // формируемая строка фильтра add: string; begin DataModule2.StudentQuery.filtered:=true; filtr:=''; if length(Combobox1.text) > 0 then filtr:= 'spec LIKE '+ #39 + Combobox1.Text + '%' + #39; if length(Combobox2.text) > 0 then begin if length(filtr) > 0 then add:= ' and ' else add:=''; filtr:=filtr + add + 'year LIKE '+ #39 + Combobox2.Text + '%' + #39; end; if length(filtr) > 0 then begin DataModule2.StudentQuery.Filter:= filtr; DataModule2.StudentQuery.filtered:=true; end else Showmessage('Все поля пусты!'); end; lmikle: Хде теги??? если combobox пусты то при нажатии на кнопку выходит сообщение, а если я выбираю что-либо из выпадающего списка и нажимаю на кнопку то таблица просто пустеет и не фильтрует. В чем м.б. ошибка ?? |
#5
|
|||
|
|||
Ну, формально, на первый взгляд все правильно.
Только вот интересный вопрос: А в свойстве Filter конструкция LIKE работает? Лично я думаю, что нет. Хотя чем черт не шутит. На самом деле попробуй написать обработчик события OnFilterRecord у источника данных. По мне, так это более "железобетонный" вариант. Ну и как вариант, дописывание условия в сам запрос и его переоткрытие. |
#6
|
|||
|
|||
Я не умею использовать FilterRecord. Может подскажешь на примере ??
|
#7
|
|||
|
|||
Ну на вскидку я не помню, но там смысл такой - у этого обработчика есть var-параметр типа Boolean. Если не ошибаюсь, то для записи, которая удовлетворяет условию в этом параметре надо вернуть True (запись будет показана), иначе - False.
|