Текущий архив: 2006.10.08;
Скачать: CL | DM;
ВнизADO + агрегирование (access) Найти похожие ветки
← →
lexander (2006-08-06 02:08) [0]Ребята подскажите - почему когда я в параметр SQL компоненты ADOQuery заношу запрос с присутствием любой функции агрегирования вылетает ошибка "Access violation at adress 1B041766 in module msjet40.dll". Приэтом запрос при нажатии RUN все таки выполняется и продалжает работать. (Использую БД Access)
_______________________________________________________
DataModStudent.Table_sql_plat_sum.close;
DataModStudent.Table_sql_plat_sum.SQL.Clear;
DataModStudent.Table_sql_plat_sum.sql.Add("SELECT SUM(t_plat.suma) AS s");
--------------------------------------------------------------
Самое интересное я даже убрал процедуру OPEN - дает ошибку
Если убрать SUM - работает без исключительной ситуации...
Подскажите че делать!!!
← →
Johnmen © (2006-08-06 02:26) [1]Приводи строку подключения. sniknik тебе завтра расскажет...:)
← →
lexander (2006-08-06 02:35) [2]Все мужики - отбой!
НАШЕЛ!
Это глюк в движке (ядке) компонент Jet... Access
Если запрос передать сразу целой строкой в параметр text то все работает!
Говорят там какой-то глюк что запрос начинает парсить еще построчно
не дожидаясь команды OPEN
я ж его через add передавал
____________________________________________________
Все равно спасибо за участие...!
← →
sniknik © (2006-08-06 12:20) [3]> Это глюк в движке (ядке) компонент Jet... Access
> ...
> я ж его через add передавал
это не глюк движка jet, это вообще не глюк ADO, это глюк компанента ADOQuery который впрочем уже исправлен, в какомто из апдейтов дельфи (идет сборка запроса перед передачей).
у "родных" ADO-шных компанент запрос задается только одним куском, частичный способ перенесен из BDE (видать "as is" изначально) где он был нужен изза использования только коротких строк ( < 256 ), запрос в такой не напишеш.
вообще эти "компаненты для облегчения перехода" большая ошибка борланда... с ними одни проблемы, + неокрепшее сознание начинающих коверкают ;), а пользы ни какой.
чтобы знать что в них и как, надо понимать как работают основные, чего как раз пытаются сделать не нужным!? а если понимаеш основные то само собой ими уже пользоваться удобнее... нонсенс!
не, можно конечно и не понимая "тупо" пользоваться... а потом жаловаться на глюки, медленную их работу, ets. ладно, это так "крик души", не относяшийся к посту. просто столько раз говорилось и все одно упорно начинающие (да и не очень) их используют.
еще по "глюку", вы знаете что винда сама "глюк на глюке"? вот берем например любую функцию из ядра (kernel32.dll) которая на вход предполалагает указатель на какуюнибудь структуру/выделенную память, да и не дадим ее, т.е. без инициализации переменную туда передадим... будет AV. а уж чего тогда говорить о других мелкосовтских продуктах на ней в основе написанных? не даем то что ожидается, а но в ответ возвращает ошибку возмутительно! должно бы догадаться что это мы примеривались/тренировались, в следующий раз дадим больше... ;о))))
p.s. только не рассматривайте последний абзац серьезно, это сарказм. ;о)
← →
lexander (2006-08-06 13:17) [4]Спасибо за ответ! :)
Поучительно... я больше работаю в связке PHP+MySql+ActiveX
А это вот пришлось написать клиент к однопользовательской базе данных Access... так что можно сказать это моя первая программа на Делфи с БД
Может будут какие-то практические советы как начинающему использовать БД в Делфи... меня впринципе интересует правильно ли я выбрал компоненты (ядро) - ADO (Jet)?
Еще раз спасибо...!
← →
sniknik © (2006-08-06 13:45) [5]> Может будут какие-то практические советы как начинающему использовать БД в Делфи... меня впринципе интересует правильно ли я
> выбрал компоненты (ядро) - ADO (Jet)?
убери с палитры ADO ADOTable, ADOQuery, ADOStoredProc... пользуйся тем что осталось.
никогда не прописывай строку конекта у компанента! всегда используй ADOConnecton.
несмотря на то что access локальная база, работай с ней как с клиент серверной, не ошибешся... (есть режим и локального/прямого доступа но пока не разберешся... избежиш "тормозов" и переделок)
поставь апдейты на дельфи.
читай хелп по jet (в поставке мс офиса JETSQL40.CHM)
если база предопределена (access) то правильно, это практически единственный "родной" вариант, остальные работают "через... э... него же" фактически, тем или иным образом. если рассматривается другая база то конкретно ничего сказать нельзя не узнав, что за база.
← →
lexander (2006-08-06 16:22) [6]из этого списка япользуюсь только ADOQuer... и вот столкнулся опять с проблемой...
Edit_sql.SQL.text:="UPDATE t_stud SET otch = true WHERE t_stud.id_stud IN
(SELECT t_stud.id_stud FROM t_stud INNER JOIN t_plat ON t_stud.id_stud = t_plat.id_stud GROUP BY t_stud.id_stud HAVING (((Sum(t_plat.suma))<(Avg(t_stud.platm)*10))));";
Пишет что обнаруженны символы за пределлами инструкции SQL
Хотя оператор SELECT из этой конструкции я копировал в Access - он правильно возвращает список нужных мне id_stud
← →
lexander (2006-08-06 18:13) [7]Все заработало... нашел ошибку...
Страницы: 1 вся ветка
Текущий архив: 2006.10.08;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.041 c