Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];

Вниз

Фильтр в ADOQuery   Найти похожие ветки 

 
Иксик   (2003-01-17 13:15) [0]

Почему этот фильтр не работает?
"(Year >= "+ MBYear1 + " AND Year <= " + MBYear2 +")"
+ " AND ( (year > "+MBYear1+") OR (month >= "+MBMonth1+") )"

MBYear1, MBYear2, MBMonth1, MBMonth2 - переменные соответствующего типа.


 
Delirium^.Tremens   (2003-01-17 13:27) [1]

"(Year >= "+ QuotedStr(MBYear1) + ...
&
Не TAdoDataSet.Filter+= ...
А TAdoDataSet.Filter := TAdoDataSet.Filter + ...


 
Иксик   (2003-01-17 13:31) [2]

Нет,
MbYear1,... они уже обработаны QuotedStr, я просто отдельно это сделал, чтобы не усложнять вид.

Если я просто делаю "(Year >= "+ MBYear1 + " AND Year <= " + MBYear2 +")" - работает
даже работает
"(Year >= "+ MBYear1 + " AND Year <= " + MBYear2 +")"
+ " AND ( (year > "+MBYear1+") AND (month >= "+MBMonth1+") )"

А когда вместо последнего AND ставишь OR, не получается.



 
Иксик   (2003-01-17 13:44) [3]

Народ, ну подскажите...


 
stone   (2003-01-17 14:08) [4]

Какая строка в Filter получается во время работы?


 
Иксик   (2003-01-17 14:12) [5]

(Year >= "2000" AND Year <= "2010") AND ((Year > "2000") OR (Month >= "10"))


 
Delirium^.Tremens   (2003-01-17 14:20) [6]


> Почему этот фильтр не работает?

Что ж, осталось выяснить, как выглядит Year и ... в базе (тип), кто придумал их так назвать, и в чем выражается неработа фильтра.
>>Anatoly Podgoretsky ©
Думаю в час уложимся :-)


 
Иксик   (2003-01-17 14:26) [7]

В смысле так все правильно?


 
sniknik   (2003-01-17 14:27) [8]

приведи к виду без двойных кавычек
() and () or () - так можно

() and (() or ()) - так нельзя

а твое рабочее
() and (() and ()) - просто частный случай (если подумаеш то понятно что ини убираются или игнорируются)


 
sniknik   (2003-01-17 14:31) [9]

Иксик (17.01.03 14:26)
что правильно?

Delirium^.Tremens © (17.01.03 14:20)
выражает сарказм твоей манере задавать вопросы ничего не обьясняя и не расказывая, я его полностью поддерживаю, т.к. знаю твой стиль (сталкивался). (я бы уже подумал о смене ника и стиля вопросов на твоем месте :о))


 
Иксик   (2003-01-17 14:33) [10]

Спасибо!
А разве можно этот запрос привести к такому простому виду. Это я только часть его привел, полностью запрос выглядит так:

"(Year >= "+ MBYear1 + " AND Year <= " + MBYear2 +")"
+ " AND ( (Year > "+MBYear1+") OR (Month >= "+MBMonth1+") )"
+ " AND ( (Year < "+MBYear2+") OR (Month <= "+MBMonth2+") )";

Он отлично работал под таблицы BDE, но перестал работать когда я перешел на ADO.


 
sniknik   (2003-01-17 14:40) [11]

не знаю может глюк компонента толи так было задумано но он точно не делает вложенный расчет уславий. (рекурсии на условия нет)

переделать наверняка можно если знать чего ты хочеш этим добится. но это ты обычно оставляеш на последок. подождем.


 
Иксик   (2003-01-17 14:45) [12]

Пользователь вводит начальную и конечную дату,
мне нужно отфильтровать записи, чтобы они лежали в диапазоне этих дат, причем в фильтруемой таблице нет поле дата, а только поля месяц и год (этот результирующий запрос по месяцам).

В переменных MBYear1... из дат выделяются года и месяца


 
stone   (2003-01-17 14:56) [13]


> (Year >= "2000" AND Year <= "2010") AND ((Year > "2000")
> OR (Month >= "10"))

Во-первых тут возможна логическая ошибка. Первая часть конструкции может противоречить второй.
Во-вторых
(Year >= "+ MBYear1 + " AND Year <= " + MBYear2 +")"
+ " AND ( (year > "+MBYear1+") OR (month >= "+MBMonth1+") )
создаст строку типа:
(Year >= 2000 AND Year <= 2010) AND ( (year > 2000) OR (month >= 10)
Как видно значения тут уже не заключены в апострофы


 
Иксик   (2003-01-17 15:01) [14]


> Во-первых тут возможна логическая ошибка.

Нет, под BDE все отлично работало

> Как видно значения тут уже не заключены в апострофы

(Year >= "2000" AND Year <= "2010") AND ((Year > "2000") OR (Month >= "10")) - я это вывел в showmessage и переписал результат. Я же говорю, переменные MBYear1... обрабатываются.

Sniknik прав, просто я не знаю как изменить этот запрос, чтобы привести к нормальному виду.
Формирование SQL запроса не подходит, т.к. он и так генерируется динамически и тогда вообще получится что-то страшное.


 
sniknik   (2003-01-17 15:28) [15]

с запросом наоборот проще получается WHERE DateSerial(FieldYear,FieldMonth,0) BETWEEN DateSerial(:Year1,:Month1,0) AND DateSerial(:Year2,:Month2,0)
(насколько помню у тебя Access)

А вот привести надо вспоминать логические операции скобки раскрыть и все, вроде. Не помню уже. Склероз? :-)) надо к Зотову на курсы записыватся.


 
sniknik   (2003-01-17 15:31) [16]

а кстати может и не получится, счас попробовал он NOT не воспринимает, наверняка вылезет при разложении. :-(


 
Иксик   (2003-01-17 15:32) [17]

У меня было временное помутнение -
"(Year >= "+ MBYear1 + " AND Month >= " + MBMonth1 +" AND Year <= "+MBYear2+ " AND Month <= "+MBMonth2+ ")"
+ " OR ( Year > "+MBYear1+ " AND Year < "+MBYear2+")"

Работает!!!

Sniknik, спасибо тебе огромное, ты всегда навеваешь мне творческие мысли!

Я тоже мат. логику забыл уже. А Зотов это кто?


 
sniknik   (2003-01-17 15:35) [18]

Просто хороший человек, этого мало? Поиши в ветке "потрепатся" он курсы открыл по программированию. Правда не знаю живы ли они до сих пор.


 
Иксик   (2003-01-17 15:37) [19]

Ок, спасибо большое за помощь. Я не мог понять в чем дело, почему одни сложные запросы берет, а др. - нет.
Удачи.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.01 c
1-4917
Checist [root]
2003-01-26 00:46
2003.02.03
Нажатие клавиши


14-5235
SVM (Perm)
2003-01-16 10:40
2003.02.03
Профайлер


1-4886
Fill
2003-01-24 21:43
2003.02.03
StatusBar-Image


3-4779
Дима
2003-01-16 17:42
2003.02.03
EmptyTable для DBF


8-5076
AM
2002-10-10 10:45
2003.02.03
Есть ли обратный алгоритм





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский