Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фильтрация данных, продолжение темы 
:(
    Опции темы
Sett
  Дата 27.2.2005, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 20.12.2004
Где: Подольск

Репутация: нет
Всего: нет



Всем привет!

У меня вопрос, посмотрел тут тему про фильтрацию, данных в DBGrid'е,
но не понял её, я в деле программирования недавно и не совсем понял, как правильно это сделать.
Попытаюсь описать проблему:

в Table1.OnFilterRecord, я прописываю функцию Acept:= и далее прописываю, по какоуму значению производить фильтр данных, в данном случае по дате, то есть отобразить все строки содержащие чило например 12.12.2004, первое применение фильтра проходит с блеском, но при попытке применить второе фильтрование, то есть показать уже строки с числом 23.01.2005, он нечего не показывает вообще, может быть я что то делаю не так, ну канечно по любому, я делаю что то не так, но ЧТО, изломал всю голову!

Друзья мои, кто знает КАК это сделать, подскажите, дайте пример, если можно по подробней и по возможности несколько.

Заранее всем благодарен!
PM MAIL WWW ICQ   Вверх
Dr.No_xXx
  Дата 27.2.2005, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 215
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



ответить не могу, но могу подсказать где скачать русскую справку по delphi
скачивать здесь
http://delphi-help.chat.ru/download.html
может поможет
PM MAIL   Вверх
Kesh
Дата 27.2.2005, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 3
Всего: 54



Sett AFAIK там подобие SQL дополнительного условия... которое в принципе может быть включено в сам запрос, который QUERY... но TABLE не дает такой возможности... т.к. выбирает всю таблицу... поэтому там и есть такая фильтрация...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Bes
Дата 28.2.2005, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 2
Всего: 7



Похоже на то, что ты хочешь вывести записи с первым фильтром, а потом из получившегося отфильтровать со вторым - ессно там ничего не будет.
PM MAIL   Вверх
Sett
Дата 28.2.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 20.12.2004
Где: Подольск

Репутация: нет
Всего: нет



Bes а как нужно
PM MAIL WWW ICQ   Вверх
Bes
Дата 28.2.2005, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 2
Всего: 7



Смотри, что я пытался тебе сказать:
Предположим есть набор значений.
а
а
а
а
с
с
с
с
ты к ним применяешь фильтр "а", т.е. говоришь мол покажи мне все что РАВНО "а" набор становится следующим
а
а
а
а
потом тыприменяеш фильтр "с" т.е. говоришь мол а теперь из ПОЛУЧИВШЕГОСЯ покажи мне все что равно "с", но т.к. в получившемся наборе эсок не было, то есссно он тебе ничего и не покажет.
Вывод: Надо снять предыдущий фильтр, т.е. типа покажи все.
А потом применять новый.
И показал бы как ты это делаешь - проще бы было, а то может это все зря написано... :-)
PM MAIL   Вверх
Sett
Дата 1.3.2005, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 20.12.2004
Где: Подольск

Репутация: нет
Всего: нет



Цитата(Bes @ 28.2.2005, 16:07)
Смотри, что я пытался тебе сказать:
Предположим есть набор значений.
а
а
а
а
с
с
с
с
ты к ним применяешь фильтр "а", т.е. говоришь мол покажи мне все что РАВНО "а" набор становится следующим
а
а
а
а
потом тыприменяеш фильтр "с" т.е. говоришь мол а теперь из ПОЛУЧИВШЕГОСЯ покажи мне все что равно "с", но т.к. в получившемся наборе эсок не было, то есссно он тебе ничего и не покажет.
Вывод: Надо снять предыдущий фильтр, т.е. типа покажи все.
А потом применять новый.
И показал бы как ты это делаешь - проще бы было, а то может это все зря написано... :-)

Точно именно такой пример, я и имею в виду.

Покажите ктонибудь, работающий исходник, код
PM MAIL WWW ICQ   Вверх
Kesh
Дата 1.3.2005, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 3
Всего: 54



Насколько я знаю фильтрацию в TTable - там одновременно может применяться только один фильтр...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Bes
Дата 2.3.2005, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 2
Всего: 7



Я бы делал через query там эта проблема отпадает сама собой.
А через тэйбл... - дак перед тем как изменить фильтр, просто очищай его... х его з я тэйблами не пользуюсь, поскольку это "кастрация" SQL, но это только мое мнение. :-)
щас мой комп в эксперименте - потом могу дать АДОКвери рабочий пример.
PM MAIL   Вверх
Kesh
Дата 2.3.2005, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 3
Всего: 54



Цитата(Bes @ 2.3.2005, 09:09)
Я бы делал через query там эта проблема отпадает сама собой.

Согласен... Тоже предпочитаю квери...



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Bes
Дата 3.3.2005, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 2
Всего: 7



Вот примерчик, лень делать ему обрезание, лучше сам спрашивай, что не поймешь.

Код

procedure TForm2.SetFilter;
Var
    SelectString,S,ss:string;
    i:integer;
    S1,S2,S3,U:string;
    r:real;
begin
    S1:='SELECT имя, Серия, Номер, Группа, Название, ЦенаРоз, ЦенЗак, Остат, НаличВр, Колво, Ключ, Код';
    S1:=S1+' FROM каттбл LEFT JOIN заказы ON каттбл.ключ = заказы.код ';
    U:='';
    S2:=' Order by Группа, Серия, Номер, Название UNION ';
     S2:=S2+' SELECT имя, Серия, Номер, Групп as Группа, Назван as Название, ЦенаРоз, ЦенЗак, Остат, НаличВр, Колво, Ключ, Код ';
    S2:=S2+' FROM каттбл RIGHT JOIN заказы ON каттбл.ключ = заказы.код ';
    S3:=' Order by Группа, Серия, Номер, Название ';

    ss:=LabeledEdit1.Text;
    //LabeledEdit5.Text:='';

    Repeat
          i:=pos('"',SelectString);
          if i>0 then Delete(SelectString,i,1);
    Until i=0;

    if ss<>'' then
    begin
         LabeledEdit5.Text:='';
         //if s=SelectString then SelectString:=SelectString+'where ( Название like "*'+StrToRus(ss)+'*" or Название like "*'+StrToEng(ss)+'*" ) '
         //else
         //U:=' Where ( Название like "*'+StrToRus(ss)+'*" or Название like "*'+StrToEng(ss)+'*" ) ';
         U:=' Where ( Название like "*'+ss+'*" or Название like "*'+StrToRus(ss)+'*" or Название like "*'+StrToEng(ss)+'*" or Назван like "*'+ss+'*" or Назван like "*'+StrToRus(ss)+'*" or Назван like "*'+StrToEng(ss)+'*" ) ';
    end;
    if LabeledEdit2.Text<>'' then
    begin
         LabeledEdit5.Text:='';
         if U='' then U:=' where ( Группа like "*'+LabeledEdit2.Text+'*" or Групп like "*'+LabeledEdit2.Text+'*" )'
         else
         U:=U+' and ( Группа like "*'+LabeledEdit2.Text+'*" or Групп like "*'+LabeledEdit2.Text+'*" )';
    end;
    if LabeledEdit3.Text<>'' then
    begin
         LabeledEdit5.Text:='';
         if U='' then U:=' where Прим like "*'+LabeledEdit3.Text+'*" '
         else
         U:=U+' and Прим like "*'+LabeledEdit3.Text+'*" ';
    end;
    if LabeledEdit4.Text<>'' then
    try
         LabeledEdit5.Text:='';
         try
              r:=StrToFloat(LabeledEdit4.Text);
              if r>0 then
              begin
                   if U='' then U:=' where ценароз = '+LabeledEdit4.Text+' '
                   else U:=U+' and ценароз = '+LabeledEdit4.Text+' ';
              end;
         except
         end;
    except
    end;
    if LabeledEdit5.Text<>'' then
    try
         r:=StrToInt(LabeledEdit5.Text);
         U:=' where ключ = '+LabeledEdit5.Text+' ';
         {if U='' then U:=' where ключ = '+LabeledEdit4.Text+' '
         else
         U:=U+' and ценароз = '+LabeledEdit4.Text+' '; }
    except
    end;

    Form1.LogToFile('TForm2.SetFilter',u);

    SelectString:=S1+U+S2+U+S3;

    Repeat
          i:=pos('[',SelectString);
          if i>0 then Delete(SelectString,i,1);
    Until i=0;

    Repeat
          i:=pos('{',SelectString);
          if i>0 then Delete(SelectString,i,1);
    Until i=0;

    QueryGrid.Active:=false;
    QueryGrid.SQL.Clear;
    QueryGrid.SQL.Text:=SelectString;
    QueryGrid.Active:=true;

    if LabeledEdit5.Text<>'' then Step1TrySale;
    {try
         if U='' then
         if QueryGrid.BookmarkValid(mbm) then
         begin
              QueryGrid.GotoBookmark(mbm);
              QueryGrid.FreeBookmark(mbm)
         end;
    except
    end;       }

end;

PM MAIL   Вверх
Sett
Дата 6.3.2005, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 20.12.2004
Где: Подольск

Репутация: нет
Всего: нет



А есть какой нибудь способ обновить фильтр в Table1.OnFilterRecord
как я понял, что при первом использовании фильтра с помощью Table1, фильтр запоминается и его надо сбросить, то есть удалить из памяти, так. Если есть способ его сбросить то как?
smile
PM MAIL WWW ICQ   Вверх
Sett
Дата 6.3.2005, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 20.12.2004
Где: Подольск

Репутация: нет
Всего: нет



Ну не ушто не кто не знает как обновить фильтр, для повторного его использования!?

ПОМОГИТЕ!!!
PM MAIL WWW ICQ   Вверх
Sett
  Дата 7.3.2005, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 20.12.2004
Где: Подольск

Репутация: нет
Всего: нет



Цитата(Sett @ 6.3.2005, 12:11)
А есть какой нибудь способ обновить фильтр в Table1.OnFilterRecord
как я понял, что при первом использовании фильтра с помощью Table1, фильтр запоминается и его надо сбросить, то есть удалить из памяти, так. Если есть способ его сбросить то как?
smile

!!?!
PM MAIL WWW ICQ   Вверх
Bes
Дата 8.3.2005, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 2
Всего: 7



Просто странный вопрос. Давай свой исходник - я посмотрю в чем косяк, все равно пока делать нечего. А то я так чувствую мы просто друг друга не понимаем... :-)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1855 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.