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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.012 c
15-1151339690
X9
2006-06-26 20:34
2006.07.30
Symantec Antivirus CE 10 - проблемы


3-1148455210
Бульбаш
2006-05-24 11:20
2006.07.30
Проблемы с цветом в гриде под Win98


15-1151413524
NORDmen
2006-06-27 17:05
2006.07.30
перевод слов/предложений с помошью программ-переводчиков


2-1152262440
Diksa
2006-07-07 12:54
2006.07.30
TreeView


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский