Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Проблема с фильтром


Автор: RinOSpro 28.8.2007, 13:05
Доброго времени суток! У меня одна проблемка 

в общем есть таблица в ней есть поле дата

Дата         |
                 |
1.10.2007 |
2.10.2007 |
3.10.2007 |
9.11.2007 |
1.12.2007 |
1.10.2007 |
1.10.2007 |

и .т.д  Как фильтровать таким образом что я ввожу в едит текст и сразу фильтруется как бы по первым символам того что я ввожу.

Работаю c ADO использую dbgrid 


Автор: RinOSpro 28.8.2007, 14:23
Короче чтото получилось глянте но мне не очень нравиться может у кого лучше примеры есть

Код

if length(Edit2.Text) <> 0 then
  begin
    (Form1.DataSourceString.DataSet as TADOTable).Filtered := True;
    (Form1.DataSourceString.DataSet as TADOTable).Filter := ComboBox1.Items[ComboBox1.ItemIndex]+'>='''+Edit2.Text+'''';
  end else
    (Form1.DataSourceString.DataSet as TADOTable).Filtered := False;
if key = #13 then
  begin
  if length(Edit2.Text) <> 0 then
  begin
    (Form1.DataSourceString.DataSet as TADOTable).Filtered := True;
    (Form1.DataSourceString.DataSet as TADOTable).Filter := ComboBox1.Items[ComboBox1.ItemIndex]+'='''+Edit2.Text+'''';
  end else
    (Form1.DataSourceString.DataSet as TADOTable).Filtered := False;
  end;
except
  exit;
  key := #0;
end;
end;



как это работает когда нажимают энтер в фильтре  знак равно  ='''+Edit2.Text+''''; а когда просто печатают строку '>='''+Edit2.Text+''''; вот так

Автор: pseud 28.8.2007, 14:32
интересно бы посмотреть как ето у тебя работает
по-моему должны вылетать сплошные ошибки
может лучше тебе использовать не Edit а DateTimePicker
ну и код громоздок
хотя бы так
Код

tbl := TADOTable(Form1.DataSourceString.DataSet);
if length(Edit2.Text) <> 0 then
  begin
    tbl.Filtered := True;
    tbl.Filter := ComboBox1.Items[ComboBox1.ItemIndex]+'>='''+Edit2.Text+'''';
  end else
    tbl.Filtered := False;
if key = #13 then
  begin
  if length(Edit2.Text) <> 0 then
  begin
    tbl.Filtered := True;
    tbl.Filter := ComboBox1.Items[ComboBox1.ItemIndex]+'='''+Edit2.Text+'''';
  end else
    tbl.Filtered := False;
  end;
except
  exit;
  key := #0;
end;
end;

Автор: RinOSpro 28.8.2007, 14:58
Код громосткий так как я его пытался сделать более универсальным у меня фильтр по нескольким полям

pseud Твое замечание учел.

Что прада что то не работает по Lookup полям можно это исправить????

Автор: pseud 28.8.2007, 16:19
Цитата(RinOSpro @  28.8.2007,  14:58 Найти цитируемый пост)
Что прада что то не работает

ну например в Edit я ввожу 
'1' - ошибка типа '1 - не Date'
'12' - ошибка типа '12 - не Date'
'12.' - ошибка типа '12. - не Date'
'12.1' - вот тут чета начинает работать


Автор: RinOSpro 29.8.2007, 07:10
pseud  try except поможет

А вот Loocup поля так и не работают

Автор: Лиходей 27.5.2008, 14:44
В этом случае лучше применять событие OnFilterRecord вместо фильтра. Удобная вещь. 
Цитата

Как фильтровать таким образом что я ввожу в едит текст и сразу фильтруется как бы по первым символам того что я ввожу.

 Именно такой случай описан здесь http://delphibd.sk6.ru/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)