Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADODataSet.Filter [D7, MSACCESS]


Страницы:   1 2

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 Должность = 'профессор')

попробуй так


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо