Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2010, 23:29   #1
$T@LKER
Форумчанин
 
Аватар для $T@LKER
 
Регистрация: 28.03.2009
Сообщений: 393
Восклицание Фильтрация данных по 2 и больше параметрам!!!

Вот использую код для фильтрации даных которые получены врезультате выборки:

Код:
procedure TAReview.Edit5Change(Sender: TObject);
begin
if length(Edit5.Text) > 0 then
begin
  DataModule2.DataQuery.Filtered := true;
end
else
begin
  Edit5.Text := '0';
  DataModule2.DataQuery.Filtered := false;
end;

DataModule2.DataQuery.Filter := 'планировка = ''' + Edit5.Text + '''';
end;

У меня на форме около 10 разных полей куда вводяться те или иные данные!!! но проблема в том что фильтрации может осуществляться тока по одному полю из тех что получились после выборки даных!!! Вопросо в том как осуществить фильтрацию по нескольким полям!!!
Пример как должно быть: в результате выборки получаме 100 запесей! вильтруем скажем по полю планировка остаёться 30 запесей! Но! Если скажем от фильтровать по полю скажем цена то получеться фильтрация будет происходит по тому что мы получили врезультате выборки - 100 запесей!! А не по тому что осталось после фильтрации по полю планировка!!! Как зделать что бы фильтрация сохранялась?!
""Сериалы и компьютерные игры это словно вторая жизнь, которою ты проживаешь, во главе главного героя или персонажа, параллельно своей!""

Последний раз редактировалось Stilet; 19.04.2010 в 09:00.
$T@LKER вне форума Ответить с цитированием
Старый 17.04.2010, 23:58   #2
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

проверяй эдиты и дописывай фильтр
то есть если эдит не пустой, то фильтр := фильтр + новое знаечение
Код:
dataQuery.Filter := DataQuery.Filter + ' and ' +QuotedStr(edit1.text);
примерно так
maLoy*508 вне форума Ответить с цитированием
Старый 18.04.2010, 00:29   #3
$T@LKER
Форумчанин
 
Аватар для $T@LKER
 
Регистрация: 28.03.2009
Сообщений: 393
По умолчанию

Цитата:
Сообщение от maLoy*508 Посмотреть сообщение
проверяй эдиты и дописывай фильтр
то есть если эдит не пустой, то фильтр := фильтр + новое знаечение
Код:
dataQuery.Filter := DataQuery.Filter + ' and ' +QuotedStr(edit1.text);
примерно так
Спасибо!!! Буду побывать!!! Тока есть вопрос что делает эта функция что вы написали: QuotedStr()?!
""Сериалы и компьютерные игры это словно вторая жизнь, которою ты проживаешь, во главе главного героя или персонажа, параллельно своей!""
$T@LKER вне форума Ответить с цитированием
Старый 18.04.2010, 01:43   #4
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

обрамляет ковычками...
Код:
DataModule2.DataQuery.Filter := 'планировка = ''' + Edit5.Text + '''';
//равносильно
DataModule2.DataQuery.Filter := 'планировка = ' + QuotedStr( Edit5.Text);
maLoy*508 вне форума Ответить с цитированием
Старый 18.04.2010, 01:51   #5
$T@LKER
Форумчанин
 
Аватар для $T@LKER
 
Регистрация: 28.03.2009
Сообщений: 393
По умолчанию

Спасибо! Удобная вещь!

Код:
проверяй эдиты и дописывай фильтр
то есть если эдит не пустой, то фильтр := фильтр + новое знаечение
Код:


dataQuery.Filter := DataQuery.Filter + ' and ' +QuotedStr(edit1.text);

примерно так
Спасибо! Я пробывал раньше что-то похожое но не получалось! Теперь работает! Но опять появилась проблемка! Вот у меня код который фильтрует:

Код:
DataModule2.DataQuery.Filter := DataModule2.DataQuery.Filter + 'and планировка = ''' + Edit5.Text + '''';
Нюанс в том что программа выдёт ошибку если я приминяю этот фильтр до того как был применьон этот:


Код:
DataModule2.DataQuery.Filter := 'планировка = ''' + Edit5.Text + '''';
Тоесть я так понимаю что нужно сначала установить какойто первоначальный фильтр а потом уже к нему добавлять остальные?! Пытался как придумать условие на проверку того был ли применьо фильтр к DataModule2.DataQuery но так и не получилось! Я типо хотел что при вводе скажем в поле эдит какогото значение проверяралось условие типа был ли применьо уже фильтр или нет и в зависимости от этого использовать один из выше указаных кодов! И таким образом избежать возникновения ошибки! Вот тока незнаю тока как это проверить! Думал что-то типа

Код:
if (DataModule2.DataQuery.Filtered = true)
then begin
DataModule2.DataQuery.Filter := DataModule2.DataQuery.Filter + 'and комнат = ''' + SpinEdit6.Text + ''''
end
else
DataModule2.DataQuery.Filter := 'комнат = ''' + SpinEdit6.Text + '''';
ну толку никакого! Подскажите что делать?!
""Сериалы и компьютерные игры это словно вторая жизнь, которою ты проживаешь, во главе главного героя или персонажа, параллельно своей!""

Последний раз редактировалось Stilet; 19.04.2010 в 11:38.
$T@LKER вне форума Ответить с цитированием
Старый 19.04.2010, 06:14   #6
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

пробуй проверять его длину, то есть
Код:
if length(DataModule2.DataQuery.Filter) > 0 then
.....
else
.....
maLoy*508 вне форума Ответить с цитированием
Старый 19.04.2010, 11:00   #7
$T@LKER
Форумчанин
 
Аватар для $T@LKER
 
Регистрация: 28.03.2009
Сообщений: 393
По умолчанию

Код:
пробуй проверять его длину
Хм....попробую!

Код:
пробуй проверять его длину, то есть
Код:


if length(DataModule2.DataQuery.Filter) > 0 then
.....
else
.....
Работает огромное спосибо!!!
А можете обяснить каким образом здесь проверяеться длинна фильтра?!
Я понимаю что єто вот здесь

if length(DataModule2.DataQuery.Filter ) > 0

Тока непойму как єто возможно!? С єдитом понятно как! А здесь?!
""Сериалы и компьютерные игры это словно вторая жизнь, которою ты проживаешь, во главе главного героя или персонажа, параллельно своей!""

Последний раз редактировалось Stilet; 19.04.2010 в 12:36.
$T@LKER вне форума Ответить с цитированием
Старый 19.04.2010, 12:36   #8
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

таким же как и эдит...
DataModule2.DataQuery.Filter - строка(тип стринг)
команда length возвращает длину переданной ей строки
вроде бы все просто
maLoy*508 вне форума Ответить с цитированием
Старый 19.04.2010, 12:38   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Фильт это свойство типа Строка. А длину строки проверяют функцией Length
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.04.2010, 15:26   #10
$T@LKER
Форумчанин
 
Аватар для $T@LKER
 
Регистрация: 28.03.2009
Сообщений: 393
По умолчанию

А! Я просто незнал что фильтр тоже строка! Хотя в принцыпе логично ведь фильтруються то строковые даные! Спасибо!
""Сериалы и компьютерные игры это словно вторая жизнь, которою ты проживаешь, во главе главного героя или персонажа, параллельно своей!""
$T@LKER вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтрация данных по запросу из БД ozarnik585 Помощь студентам 0 15.03.2010 18:10
Фильтрация данных skiffter Помощь студентам 10 17.11.2009 16:44
фильтрация данных elen1khp БД в Delphi 6 28.09.2009 20:01
Фильтрация данных Gladiator БД в Delphi 4 23.05.2009 12:37
Фильтрация данных в delphi7 @Akulina21 Компоненты Delphi 1 31.03.2009 16:30