Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.30;
Скачать: CL | DM;

Вниз

ADODataSet.Filter   Найти похожие ветки 

 
Kooler   (2006-05-24 22:42) [0]

Такая проблемма. В свойства ADODataSet Filter пишу такую строку  

Год = "2005" AND Факультет = "Биологический" OR Факультет = "Филологический" OR Факультет = "ФЭТ" AND Должность = "ассистент" OR Должность = "профессор"

после ADODataSet.Filtered := True , возникает ошибка Project IQ.exe rised an exception class OleException with message "Аргументы имеют невреный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом". Непонимаю в чем проблемма. Что делать?


 
Kooler   (2006-05-24 22:48) [1]

Пробовал еще вот так:

(Год = "2005") AND (Факультет = "Биологический") OR (Факультет = "Филологический") OR (Факультет = "ФЭТ") AND (Должность = "ассистент") OR (Должность = "профессор")

и вот так

((Год = "2005")) AND ((Факультет = "Биологический") OR (Факультет = "Филологический") OR (Факультет = "ФЭТ")) AND ((Должность = "ассистент") OR (Должность = "профессор"))

Все равно тоже самое. В чем может быть проблемма?


 
Johnmen ©   (2006-05-24 23:00) [2]

Проблема в русских наименованиях полей.


 
Kooler   (2006-05-24 23:15) [3]

Вот это работает

Год = "2005" AND Факультет = "ФЭТ" OR Факультет = "Биологический"

и это тоже работает

Год = "2005" AND Факультет = "СИС" AND Кафедра = "ПЭ" AND Должность = "ассистент"


 
danilov_vo ©   (2006-05-25 08:19) [4]

Год = "2005" AND (Факультет = "Биологический" OR Факультет = "Филологический" OR Факультет = "ФЭТ") AND (Должность = "ассистент" OR Должность = "профессор")

попробуй так


 
danilov_vo ©   (2006-05-25 08:21) [5]

зы: а русские имена в названиях полей таблиц БД и вправду не стоит использовать...


 
sniknik ©   (2006-05-25 08:29) [6]

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

пройдет так (есстественно оригинальной логике тут тоже кранты)

(Год = "2005" AND Факультет = "Биологический") OR Факультет = "Филологический" OR (Факультет = "ФЭТ" AND Должность = "ассистент") OR Должность = "профессор"


 
Kooler   (2006-05-25 12:29) [7]

Вообщем идея данного фильтра была в выорке данных по таблице, ПРИМЕР:
Выбираем требуемые года : 2005 2003 и 2007
Выбираем из них факультеты: ФЭТ, ССК, Биологический
Из этого всего надо выделить только ассистентов и профессоров.
Вот так вот. Сразу говорю что все это выделяется динамически и SQL сдесь не катит.


 
Desdechado ©   (2006-05-25 12:46) [8]

> все это выделяется динамически и SQL сдесь не катит
я всегда думал, что именно для этого SQL и придумали

а если умеешь на лету лепить фильтры, то что мешает просто добавлять это в WHERE-часть SQL"я ?


 
Kooler   (2006-05-25 14:10) [9]

Вот блин, как раз на лету SQL лепить и не получается, не помню точно почему(давно попытки были), но кароче он мне не подходит. Просто не понятно почему эту строку ADODataSet.Filter не переваривает.


 
Smith ©   (2006-05-25 14:11) [10]

>> все это выделяется динамически и SQL сдесь не катит

Гыыыы :-)

>я всегда думал, что именно для этого SQL и придумали

>а если умеешь на лету лепить фильтры, то что мешает просто добавлять >это в WHERE-часть SQL"я ?

Мешает видимо полное незнание того что такое SQL вобще.


 
MsGuns ©   (2006-05-25 14:16) [11]

>Smith ©   (25.05.06 14:11) [10]
>Мешает видимо полное незнание того что такое SQL вобще

.. и полная несведущность в таких вещах, как типы данных, нормализация и т.д. в частности, и в проектировании баз данных в целом


 
Smith ©   (2006-05-25 14:26) [12]

>Вот блин, как раз на лету SQL лепить и не получается, не помню точно >почему(давно попытки были), но кароче он мне не подходит.

И боязнь в этом признаться :-)


 
sniknik ©   (2006-05-25 15:01) [13]

> Просто не понятно почему эту строку ADODataSet.Filter не переваривает.
потому что ты ее неправильно составляеш, для фильтра ADO, мой же вариант ([6]) сработал, не так ли?
кстати не только для фильтра, логика в [0], совсем с описаным в [7] не совпадает...
написано
если Год и Факультет - "2005"/"Биологический", или Факультет "Филологический", или Факультет и Должность - "ФЭТ"/"ассистент", или Должность "профессор"
т.е. для Факультета "Филологический" неважны ни год ни должность, выдаст все. тоже для должности если она "профессор" то на все остальное тоже плевать... а в [7] вроде прослеживается желание сделать взаимосвязанное условие.

и, при твоих условиях ([7]) правильная строка будет слишком громоздка, и составлять ее тоже будет затруднительно. используй событие (onFilterRecord) вместо этого, раз уж с SQL не дружиш.


 
Kooler   (2006-05-25 15:04) [14]

Некоторым ботаникам знающим умные слова типа "нормализация" или глубокое понимание сущности SQL. Ваши комментарии БЕСПОЛЕЗНЫ как и вы сами. Если есть что посоветовать то пишите буду очень благодарен.Если нет, то пукайте мозгом в другом месте!


 
Johnmen ©   (2006-05-25 15:15) [15]


> Kooler   (25.05.06 15:04) [14]


Вообще-то, в твоих советах здесь никто не нуждается. И не стОит учить отвечающих, как им отвечать.
А, поскольку, в совете нуждаешься ты, то будь готов получать ЛЮБЫЕ советы.
Кстати, вполне справедливые...


 
Kooler   (2006-05-25 18:35) [16]

to Johnmen:
Ладно может и погорячился. Просто очень неприятно когда некоторые шибко умные начинают писать о "нормализации"  вместо того, чтобы просто зактрыть страницу.


 
Desdechado ©   (2006-05-25 18:44) [17]

> вместо того, чтобы просто зактрыть страницу
душа болит за начинающих, идущих своим неверным путем


 
Kooler   (2006-05-25 18:53) [18]

to
> sniknik ©   (25.05.06 15:01) [13]

Поробовал ваш вариант. Ругается в процессе компиляции. Приходится расставлять доп. скобки а там уже вся логика едет:(
А чем мой вариант плох? Вроде все нормально.
Выбираем год(а):
((Год = "2005"))
Выбираем в оставшемся список факультетов:
AND ((Факультет = "Биологический") OR (Факультет = "Филологический") OR (Факультет = "ФЭТ"))
Если есть совпадения, то переходим к фильтру должностей
AND ((Должность = "ассистент") OR (Должность = "профессор"))
Если нет то выводим пустую табличку.
Свиду все просто:), а все равно вылетает ошибка.


 
sniknik ©   (2006-05-25 20:46) [19]

> Ругается в процессе компиляции.
не изза фильтра который дал в [6], уверяю... и вообще, принято приводить выдаваемую ошибку.
> Приходится расставлять доп. скобки
????
после единственной скобки сдвинутой на единственный символ вариант перестал быть моим... можеш забыть что я его тебе давал. (меняеш не понимая!)  

> А чем мой вариант плох?
первое лишние скобки, второе оператор AND между логическими блоками, в фильтре (это же не SQL), один уровень вложенности, и между блоками должен быть OR, т.е. надо "раскрыть скобки" и переделать твой [18] в такой (не проверял т.что...)

(Год = "2005" AND Факультет = "Биологический" AND Должность = "ассистент") OR
(Год = "2005" AND Факультет = "Филологический" AND Должность = "ассистент") OR
(Год = "2005" AND Факультет = "ФЭТ" AND Должность = "ассистент") OR
(Год = "2005" AND Факультет = "Биологический" AND Должность = "профессор") OR
(Год = "2005" AND Факультет = "Филологический" AND Должность = "профессор") OR
(Год = "2005" AND Факультет = "ФЭТ" AND Должность = "профессор")

предупреждал, будет громоздко... ;)


 
Johnmen ©   (2006-05-25 21:08) [20]

Я вот вспоминаю, что в парсере строки фильта в АДО был очень похожий глюк, связанный с разбором более-менее сложного логического выражения...
Если есть желание, можно поглубже копнуть в отладчике.
Но я бы забил. И перешёл на нормальные параметрические запросы.


 
Kooler   (2006-05-25 21:18) [21]

Кароче  - заработало. Все оказалось довольно просто - забиваем в ADOQuery SQL типа
SELECT Фамилия, Имя, Отчество, Факультет, Кафедра, [Ученая степень], Должность, Педагогика, Психология, Год, Группа, Семестр FROM Teacher WHERE строка выборки  - (Год = 2005) AND  ( Факультет = "ФЭТ - СССК" OR Факультет = "ИСИ" ) AND  (Кафедра = "ПЭ" ) AND  (Должность = "ассистент" OR Должность = "ст. преподаватель" ) меняем нужные параметры сколько влезет и радуемся жизни!!!!
Вообщем всем спасибо за участие!!!
P.S. Правда всетаки интересно, почему тоже самое не работало с ADOTable.Filter?


 
sniknik ©   (2006-05-25 21:36) [22]

Johnmen ©   (25.05.06 21:08) [20]
> что в парсере строки фильта в АДО был очень похожий глюк
это не глюк, это документировано, правила описаны -> см. ADO210.CHM Filter

Kooler   (25.05.06 21:18) [21]
> забиваем в ADOQuery SQL типа ...
а как же с "SQL сдесь не катит" ?

> P.S. Правда всетаки интересно, почему тоже самое не работало с ADOTable.Filter?
вреш, не интересно, инфы и примеров дано достаточно чтобы разобраться. раз не стал значит не интересно.


 
Johnmen ©   (2006-05-25 22:07) [23]


> sniknik ©   (25.05.06 21:36) [22]


Точно! Именно в этом и было дело!
Знал я это правило, да забыл...:(



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

Текущий архив: 2006.07.30;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.04 c
1-1150469495
Бормодед
2006-06-16 18:51
2006.07.30
Screen.PixelsPerInch


15-1151931225
Mozart
2006-07-03 16:53
2006.07.30
Как насчет DVD с бд форумов?


2-1152599023
Yegorchic
2006-07-11 10:23
2006.07.30
Как определить количество помеченных (checked) items в ListView?


2-1152311962
SerJaNT
2006-07-08 02:39
2006.07.30
ZeosLib


2-1152547267
Unknowing
2006-07-10 20:01
2006.07.30
Delphi+ Excel