Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.02.2012, 15:05
scroyler scroyler вне форума
Активный
 
Регистрация: 01.08.2011
Адрес: ЧЕбоксары
Сообщения: 248
Версия Delphi: XE
Репутация: -615
По умолчанию Фильтрация базы данных

Здравствуйте, подскажите плз. как в dbgrideh (access) сделать фильтрацию (комбобокс) по табличке Категории, например есть таблица из 3 столбцов название,товар,категория.
название товар категория
Сони мобила телефоны
Сони приставка приставки
Сони фотик фотики
самсунг мобила телефоны
сименс мобила телефоны

выбираю в комбобоксе телефоны и отсаются только тел записи у которых категория телефоны
__________________
Ставь спасибо за спасибо!
Помог?Ставь спасибо!Увидел пост? Поставь спасибо!
Ответить с цитированием
  #2  
Старый 05.02.2012, 22:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Смотрим, например, в сторону обработчика OnFilterRecord.
Ответить с цитированием
  #3  
Старый 06.02.2012, 07:54
scroyler scroyler вне форума
Активный
 
Регистрация: 01.08.2011
Адрес: ЧЕбоксары
Сообщения: 248
Версия Delphi: XE
Репутация: -615
По умолчанию

все сам решил проблему,спасибо
__________________
Ставь спасибо за спасибо!
Помог?Ставь спасибо!Увидел пост? Поставь спасибо!
Ответить с цитированием
  #4  
Старый 14.02.2012, 01:37
cookies cookies вне форума
Прохожий
 
Регистрация: 14.02.2012
Сообщения: 1
Репутация: 10
По умолчанию

Дабы не плодить топик, напишу свое сюда

Доброго времени суток, делфи кодеры)

есть код

Код:
procedure TForm3.ADOQuery1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
 var FieldVal:string;
begin
FieldVal:=DataSet['Фамилия'];
 Accept:=copy(AnsiUpperCase(FieldVal),1, length(Sedit1.text))= AnsiUpperCase(Sedit1.Text);
end;

ввожу фамилию, все нормально фильтрует и отображает.. как сделать чтоб в едит можно было ввести фамилию и через пробел имя - и в соответствии все фильтровалось и выводилось ?
Ответить с цитированием
  #5  
Старый 14.02.2012, 03:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Pos, Copy и немного мозга.
Просто строку для поиска надо разделить на 2. Разделитель у тебя пробел. Далее включаем мозг и пишем простой код.
Ответить с цитированием
  #6  
Старый 25.02.2012, 14:00
gabiboi gabiboi вне форума
Прохожий
 
Регистрация: 18.06.2011
Сообщения: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от scroyler
все сам решил проблему,спасибо
Как решил код скажи мне очень нужен
Ответить с цитированием
  #7  
Старый 26.02.2012, 14:22
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

На мой взгляд чем возится с PosEx,Copy проще воспользоваться сразу классовыми методами:
Код:
Var
  SL: TStringList;
begin
 SL := TStringList.Create;
 SL.Delimiter := #32;
 SL.DelimitedText := Edit1.Text;
...
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #8  
Старый 13.10.2012, 10:44
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

На форумах нашел вот такой код
Код:
procedure Tf_Main.Grid_MainApplyFilter(Sender: TObject);
var
s: string;
cond: variant;
i: integer;
begin
cond := '';
s := '';
Datamodule1.T_Dogovor_View.filtered:=false;
 with TDBGridEh(Sender) do begin
    if (not DataSource.DataSet.Active) or (DataSource.DataSet.RecordCount = 0) then exit;
     for i := 0 to TDBGridEh(Sender).Columns.Count - 1 do
    begin
      cond := TDBGridEh(Sender).Columns[i].STFilter.ExpressionStr;
      if cond <> '' then begin
           s := s + '['+TDBGridEh(Sender).Columns[i].FieldName + '] LIKE ''%'+ cond + '%'' AND ';
      end;
    end; Delete(s, Length(s) - 3, 4);
       Datamodule1.T_Dogovor_View.Filter := s;
   end;
Datamodule1.T_Dogovor_View.filtered:=true;
end;
Когда фильтрация происходит по полю (формат стринг) все хорошо, но если поле Дата или Логическое, соответственно не работает, кто нибудь сможет поправить код, что не зависеть от от формата поля.
Ответить с цитированием
  #9  
Старый 13.10.2012, 10:53
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от DOR
На форумах нашел вот такой код
Код:
procedure Tf_Main.Grid_MainApplyFilter(Sender: TObject);
var
s: string;
cond: variant;
i: integer;
begin
cond := '';
s := '';
Datamodule1.T_Dogovor_View.filtered:=false;
 with TDBGridEh(Sender) do begin
    if (not DataSource.DataSet.Active) or (DataSource.DataSet.RecordCount = 0) then exit;
     for i := 0 to TDBGridEh(Sender).Columns.Count - 1 do
    begin
      cond := TDBGridEh(Sender).Columns[i].STFilter.ExpressionStr;
      if cond <> '' then begin
           s := s + '['+TDBGridEh(Sender).Columns[i].FieldName + '] LIKE ''%'+ cond + '%'' AND ';
      end;
    end; Delete(s, Length(s) - 3, 4);
       Datamodule1.T_Dogovor_View.Filter := s;
   end;
Datamodule1.T_Dogovor_View.filtered:=true;
end;
Когда фильтрация происходит по полю (формат стринг) все хорошо, но если поле Дата или Логическое, соответственно не работает, кто нибудь сможет поправить код, что не зависеть от от формата поля.
В фильтре можно использовать частичное совпадение только для строковых типов. Т.е. если убрать в этом коде значок процента, то должно работать для любых типов, но с полным совпадением, а не частичным.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
DOR (15.10.2012)
  #10  
Старый 15.10.2012, 18:41
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Проценты убрал, помогло, но логическое поле не работает. Пишу в фильтре "да" или "нет", может быть нужно как то по другому? (true / false работает).

Последний раз редактировалось DOR, 15.10.2012 в 18:43.
Ответить с цитированием
  #11  
Старый 18.10.2012, 19:42
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Так же не работает, если тип поля денежный.
Ответить с цитированием
  #12  
Старый 19.10.2012, 08:01
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

может тебе вот это поможет? http://devel.comeze.com/index.php?action=filter
__________________
Код сырец
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter