Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > ошибка при использовании параметров в ADOQuery |
Автор: stark3 5.12.2013, 14:30 | ||
Приветствую При запуске из Delphi (F9) ошибка: "Project Project1.exe raised exception class EOleException with message 'Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом'" Но все работает При запуске ехе-ка ошибки, соответственно, нет Код:
Перепробовал много разных вариантов, но всегда эта ошибка Что это может быть? БД - mysql, для поля date_montaz - тип DATE, при создании параметра вручную в ADOQuery.Parameters все так же |
Автор: kami 5.12.2013, 15:27 |
Вот здесь засада. Проходил это, ответ кажется нашел на sql.ru - когда создавался АДО типа DATE не было. Емнип, если попробовать посмотреть на параметры этого запроса в designtime, то типом параметра окажется строка. Для совместимости юзайте DATETIME Имеется ввиду - ALTER TABLE ALTER COLUMN тра-ля-ля |
Автор: stark3 5.12.2013, 15:45 | ||
kami, напомню, что параметр срабатывает, в гриде даты те, что надо. но... появляется эта ошибка есть у меня такой тип в таблице, переделал:
не помогло Выяснилось, что ошибка появляется только 1 раз при первом открытии ADOQuery, потом работает без нареканий даже при смене значения даты То же самое происходит при работе с другими типами - int, string и т.д. Может ну его в try-finally? Но это как-то не по феншую(( |
Автор: Агрох 5.12.2013, 16:16 |
Попробуй вставлять дату прямо в текст запроса, без использования параметра, преобразовав её в строку. |
Автор: stark3 5.12.2013, 16:17 | ||
kami, гм, напрашивается вопрос, как сделать, чтоб ошибка не появлялась? ведь преобразовывает правильно, но долбаная ошибка не исчезает. Может это баг среды? или драйвера мускл? Попробовал так, все равно((
Добавлено через 2 минуты и 53 секунды Агрох, сейчас у меня так во всем проекте сделано - работает без нареканий Но хотелось бы использовать параметры, т.к. например, не слишком изящно каждый раз любую дату конвертить через formatdatetime в америкосовский формат СУБД |
Автор: Агрох 5.12.2013, 16:26 |
Ткну пальцем в небо. Разницы по идее быть не должно, но всё же. Вместо ADOQuery_Eh1.Active:=true; напиши ADOQuery_Eh1.Open; |
Автор: kami 5.12.2013, 16:30 | ||
|
Автор: Агрох 5.12.2013, 16:35 |
Точно. Now же возвращает datetime а не date. kami, ты об этом? Только наверно лучше будет datetime в delphi преобразовать в date, а не в таблице использовать datetime вместо date. |
Автор: stark3 5.12.2013, 16:37 | ||
Агрох, без изменений kami, я ж пробовал) Ну хорошо, уходим от дат и времени. Это тоже выдает ошибку, но работает:
|
Автор: Агрох 5.12.2013, 17:03 | ||
А если текст запроса и параметры указать заранее, а не динамически тоже самое выдаст? Т.е. кинуть компонент на форму и настроить. Попробуй ещё все значения параметров при присвоении преобразовывать в стринг.
|
Автор: kami 5.12.2013, 17:43 | ||
Протестировал у себя:
Я же говорил - нужен тип датавремя. правда, не там хотел поменять, но все же ![]() И все равно - рекомендую в самой таблице сделать тип не DATE, а DATETIME. Иначе при автоматическом распознавании типов полей опять может всплыть бяка. |
Автор: БелАмор 5.12.2013, 19:40 | ||
Загляните сюда: http://www.delphikingdom.com/asp/answer.asp?IDAnswer=56405 (См. сообщение от 25-10-2007 16:48) |
Автор: stark3 6.12.2013, 08:31 | ||||||||||||
Указывал в ADOQuery.SQL текст запроса и параметр в .Parameters в desigbtime - все сработало без ошибки (но мне так не нужно) В любом другом случае (т.е., например, запрос в динамике, параметр - в query) ошибка(( Строки как только не преобразовывал, все одно... Добавлено через 2 минуты и 44 секунды
Спасибо, но еще раз повторюсь, давайте забудем про дата-время) Вон с integer тоже не пашет Добавлено через 6 минут и 37 секунд
Спасибо Но все же, думаю, это не очень правильно. Я лучше через прямую подстановку в запрос буду делать, чем отключу сообщения о НЕкритических ошибках Да и дело уже не в "работает-не работает", а почему возникает эта ошибка |
Автор: stark3 6.12.2013, 08:59 |
Всем спасибо, похоже выяснил в чем дело Вроде как это глюк ODBC прова - использую драйвер от MySQL и ставлю его на каждый комп Буду и дальше подставлять в запрос данные, без параметров... К сожалению(( |
Автор: kami 6.12.2013, 09:28 | ||
Зачем забывать? Я проверял на датавремя и на integer, на разных (но реальных) таблицах и тоже с использованием ODBC-драйвера MySQL. Исключений не возникает, в том числе из-под отладчика. Код абсолютно идентичный, ну кроме самого запроса и .DataType. Win7, MySQL 5.6, ODBC 5.2.6. |
Автор: stark3 6.12.2013, 09:42 | ||||
тааак, а Delphi? у меня хе2 |
Автор: kami 6.12.2013, 10:03 |
2010, но это не суть - исключение идет во "внутренностях" АДО Добавлено через 1 минуту и 4 секунды Чтобы не вносить смуту - исключение о котором говорим идет во "внутренностях" АДО, но в моем коде даже его не возникало. Добавлено через 1 минуту и 48 секунд И еще обращаю внимание - у меня нет полей типа DATE, все поля идут как DATETIME |
Автор: stark3 6.12.2013, 10:07 |
Тогда я в тупике... Результат таков, что всегда появляется эта ошибка, кроме случая, когда пишу запрос в Query.SQL в designTime, но так не приемлимо Чтоб уж точно плюнуть на это дело, для чистоты совести сделал: 1. дрова Mysql были 5.2.3, установил свежие - ошибка 2. Попробовал в другой таблице (вообще без дат) и даже в другой базе - ошибка 3. Начал с чистого проекта и квериков - ошибка Буду считать что это глюк ADO W7-пиратка)) kami, вам отдельное спасибо за участие и остальным тоже |