Форум: "Базы";
Текущий архив: 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.014 c