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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.10.2006, 16:11
pro100irk pro100irk вне форума
Прохожий
 
Регистрация: 24.10.2006
Сообщения: 6
Репутация: 10
По умолчанию Фильтрация записей в DBGrid по двум и более ComboBox

Подскажите плиз, как осуществить фильтрацию записей в DBGrid по двум и более ComboBox.
Когда он один - проблем нет:
TableWERS.Filter := 'Name=''' + ComboBox12.Text+'''';
Пробовал разные варианты "по аналогии" с SQL - не получется
В DBGrid должна быть именно таблица, запросы не прокатят...

Помогите, плиз!!!!
Ответить с цитированием
  #2  
Старый 25.10.2006, 05:28
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Используй событие OnFilterRecord. В справке про него довольно подробно написано.
Ответить с цитированием
  #3  
Старый 25.10.2006, 17:15
pro100irk pro100irk вне форума
Прохожий
 
Регистрация: 24.10.2006
Сообщения: 6
Репутация: 10
По умолчанию

Сам нашел.
Вот пример:

//Первый фильтр
procedure TFinanse2.ComboBox5Change(Sender: TObject);
begin
ComboBox6.Text := '';
Table4.Filtered := False;
Table4.Filtered := True;
if (ComboBox5.Text = '') and (Table4.Active = True) then Table4.Active := False;
if (ComboBox5.Text <> '') and (Table4.Active = False) then Table4.Active := True;
Table4.Filter := 'Kontragent=''' + ComboBox5.Text+'''';
end;

//второй фильтр
procedure TFinanse2.ComboBox6Change(Sender: TObject);
begin
if ComboBox5.Text = '' then Exit;
if Combobox6.Text = 'Только готовые' then Label33.Caption := 'Готов';
if Combobox6.Text = 'Только "В работе"' then Label33.Caption := 'В работе';
with Table4 do begin
Filtered := False;
Filter := 'Gotov=''' + Label33.Caption+'''';
Filtered := True;
end;

Можно добавлять следующие фильтры по тому же алгоритму, что и второй фильтр.
Ответить с цитированием
  #4  
Старый 26.10.2006, 17:28
pro100irk pro100irk вне форума
Прохожий
 
Регистрация: 24.10.2006
Сообщения: 6
Репутация: 10
По умолчанию

Нет, не получилось...
Такой вариант отменяет первый фильтр и активирует второй

Так что вопрос остается открытым.

Подскажите!! Как все же сделать двойной фильтр, лучше в виде примера кода, а то я чайник, могу не понять объяснения...
Ответить с цитированием
  #5  
Старый 27.10.2006, 05:18
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Для тех кто в танке. OnFilterRecord
Ответить с цитированием
  #6  
Старый 27.10.2006, 15:24
pro100irk pro100irk вне форума
Прохожий
 
Регистрация: 24.10.2006
Сообщения: 6
Репутация: 10
По умолчанию

Видимо я не в танке, а под ним...

Вот код:

procedure TFinanse2.Table4FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
if ComboBox5.Text = '' then Exit;
Table4.Filter := 'Kontragent=''' + ComboBox5.Text+'''';
Accept := DataSet['Gotov'].AsString = 'Ãîòîâ';
end;


НЕ РАБОТАЕТ
И не могу разобраться, почему
Ответить с цитированием
  #7  
Старый 30.10.2006, 07:50
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

пример:
на форме Edit1, Table1, Button1
заполняем Edit1 и жмем на батон
всего две процедуры
1:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Table1.Filtered:=not(Table1.Filtered);
  if Table1.Filtered then
    Button1.Caption:='Filtered'
  else
    Button1.Caption:='not filtered';
end;
2:
Код:
procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
  if Length(Edit1.Text)<1 then
    Exit;
  Accept:=
    UpperCase(DataSet.FieldByName('FAM').AsString)=UpperCase(Edit1.Text);
end;
Все работает.
Ответить с цитированием
  #8  
Старый 31.10.2006, 14:53
pro100irk pro100irk вне форума
Прохожий
 
Регистрация: 24.10.2006
Сообщения: 6
Репутация: 10
По умолчанию

Aristarh Dark

Вот спасибо
Малость передалал и все заработало!!!
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter