![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADODataSet.Filter [D7, MSACCESS]
Kooler © (2006-05-24 22:42:00)Такая проблемма. В свойства ADODataSet Filter пишу такую строку
Год = '2005' AND Факультет = 'Биологический' OR Факультет = 'Филологический' OR Факультет = 'ФЭТ' AND Должность = 'ассистент' OR Должность = 'профессор'
после ADODataSet.Filtered := True , возникает ошибка Project IQ.exe rised an exception class OleException with message "Аргументы имеют невреный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом". Непонимаю в чем проблемма. Что делать?
Johnmen (2006-05-25 22:07:00) [1]
> sniknik © (25.05.06 21:36) [22]
Точно! Именно в этом и было дело!
Знал я это правило, да забыл...:(
sniknik (2006-05-25 21:36:00) [2]Johnmen © (25.05.06 21:08) [20]
> что в парсере строки фильта в АДО был очень похожий глюк
это не глюк, это документировано, правила описаны -> см. ADO210.CHM Filter
Kooler (25.05.06 21:18) [21]
> забиваем в ADOQuery SQL типа ...
а как же с "SQL сдесь не катит" ?
> P.S. Правда всетаки интересно, почему тоже самое не работало с ADOTable.Filter?
вреш, не интересно, инфы и примеров дано достаточно чтобы разобраться. раз не стал значит не интересно.
Kooler (2006-05-25 21:18:00) [3]Кароче - заработало. Все оказалось довольно просто - забиваем в ADOQuery SQL типа
SELECT Фамилия, Имя, Отчество, Факультет, Кафедра, [Ученая степень], Должность, Педагогика, Психология, Год, Группа, Семестр FROM Teacher WHERE строка выборки - (Год = 2005) AND ( Факультет = 'ФЭТ - СССК' OR Факультет = 'ИСИ' ) AND (Кафедра = 'ПЭ' ) AND (Должность = 'ассистент' OR Должность = 'ст. преподаватель' ) меняем нужные параметры сколько влезет и радуемся жизни!!!!
Вообщем всем спасибо за участие!!!
P.S. Правда всетаки интересно, почему тоже самое не работало с ADOTable.Filter?
Johnmen (2006-05-25 21:08:00) [4]Я вот вспоминаю, что в парсере строки фильта в АДО был очень похожий глюк, связанный с разбором более-менее сложного логического выражения...
Если есть желание, можно поглубже копнуть в отладчике.
Но я бы забил. И перешёл на нормальные параметрические запросы.
sniknik (2006-05-25 20:46:00) [5]> Ругается в процессе компиляции.
не изза фильтра который дал в [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 Должность = 'профессор')
предупреждал, будет громоздко... ;)
Kooler (2006-05-25 18:53:00) [6]to
> sniknik © (25.05.06 15:01) [13]
Поробовал ваш вариант. Ругается в процессе компиляции. Приходится расставлять доп. скобки а там уже вся логика едет:(
А чем мой вариант плох? Вроде все нормально.
Выбираем год(а):
((Год = '2005'))
Выбираем в оставшемся список факультетов:
AND ((Факультет = 'Биологический') OR (Факультет = 'Филологический') OR (Факультет = 'ФЭТ'))
Если есть совпадения, то переходим к фильтру должностей
AND ((Должность = 'ассистент') OR (Должность = 'профессор'))
Если нет то выводим пустую табличку.
Свиду все просто:), а все равно вылетает ошибка.
Desdechado (2006-05-25 18:44:00) [7]> вместо того, чтобы просто зактрыть страницу
душа болит за начинающих, идущих своим неверным путем
Kooler (2006-05-25 18:35:00) [8]to Johnmen:
Ладно может и погорячился. Просто очень неприятно когда некоторые шибко умные начинают писать о "нормализации" вместо того, чтобы просто зактрыть страницу.
Johnmen (2006-05-25 15:15:00) [9]
> Kooler (25.05.06 15:04) [14]
Вообще-то, в твоих советах здесь никто не нуждается. И не стОит учить отвечающих, как им отвечать.
А, поскольку, в совете нуждаешься ты, то будь готов получать ЛЮБЫЕ советы.
Кстати, вполне справедливые...
Kooler (2006-05-25 15:04:00) [10]Некоторым ботаникам знающим умные слова типа "нормализация" или глубокое понимание сущности SQL. Ваши комментарии БЕСПОЛЕЗНЫ как и вы сами. Если есть что посоветовать то пишите буду очень благодарен.Если нет, то пукайте мозгом в другом месте!
sniknik (2006-05-25 15:01:00) [11]> Просто не понятно почему эту строку ADODataSet.Filter не переваривает.
потому что ты ее неправильно составляеш, для фильтра ADO, мой же вариант ([6]) сработал, не так ли?
кстати не только для фильтра, логика в [0], совсем с описаным в [7] не совпадает...
написано
если Год и Факультет - '2005'/'Биологический', или Факультет 'Филологический', или Факультет и Должность - 'ФЭТ'/'ассистент', или Должность 'профессор'
т.е. для Факультета 'Филологический' неважны ни год ни должность, выдаст все. тоже для должности если она 'профессор' то на все остальное тоже плевать... а в [7] вроде прослеживается желание сделать взаимосвязанное условие.
и, при твоих условиях ([7]) правильная строка будет слишком громоздка, и составлять ее тоже будет затруднительно. используй событие (onFilterRecord) вместо этого, раз уж с SQL не дружиш.
Smith (2006-05-25 14:26:00) [12]>Вот блин, как раз на лету SQL лепить и не получается, не помню точно >почему(давно попытки были), но кароче он мне не подходит.
И боязнь в этом признаться :-)
MsGuns (2006-05-25 14:16:00) [13]>Smith © (25.05.06 14:11) [10]
>Мешает видимо полное незнание того что такое SQL вобще
.. и полная несведущность в таких вещах, как типы данных, нормализация и т.д. в частности, и в проектировании баз данных в целом
Smith (2006-05-25 14:11:00) [14]>> все это выделяется динамически и SQL сдесь не катит
Гыыыы :-)
>я всегда думал, что именно для этого SQL и придумали
>а если умеешь на лету лепить фильтры, то что мешает просто добавлять >это в WHERE-часть SQL'я ?
Мешает видимо полное незнание того что такое SQL вобще.
Kooler (2006-05-25 14:10:00) [15]Вот блин, как раз на лету SQL лепить и не получается, не помню точно почему(давно попытки были), но кароче он мне не подходит. Просто не понятно почему эту строку ADODataSet.Filter не переваривает.
Desdechado (2006-05-25 12:46:00) [16]> все это выделяется динамически и SQL сдесь не катит
я всегда думал, что именно для этого SQL и придумали
а если умеешь на лету лепить фильтры, то что мешает просто добавлять это в WHERE-часть SQL'я ?
Kooler (2006-05-25 12:29:00) [17]Вообщем идея данного фильтра была в выорке данных по таблице, ПРИМЕР:
Выбираем требуемые года : 2005 2003 и 2007
Выбираем из них факультеты: ФЭТ, ССК, Биологический
Из этого всего надо выделить только ассистентов и профессоров.
Вот так вот. Сразу говорю что все это выделяется динамически и SQL сдесь не катит.
sniknik (2006-05-25 08:29:00) [18]> попробуй так
так тоже не выйдет, да и к томуже логика скобками нарушается... хотя честно так и не понял эту логику в оригинале, что отфильтровывается...
пройдет так (есстественно оригинальной логике тут тоже кранты)
(Год = '2005' AND Факультет = 'Биологический') OR Факультет = 'Филологический' OR (Факультет = 'ФЭТ' AND Должность = 'ассистент') OR Должность = 'профессор'
danilov_vo (2006-05-25 08:21:00) [19]зы: а русские имена в названиях полей таблиц БД и вправду не стоит использовать...
danilov_vo (2006-05-25 08:19:00) [20]Год = '2005' AND (Факультет = 'Биологический' OR Факультет = 'Филологический' OR Факультет = 'ФЭТ') AND (Должность = 'ассистент' OR Должность = 'профессор')
попробуй так