Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование параметров в ADOQuery, через ":" или через "@"? 
:(
    Опции темы
Lunatikus
Дата 16.6.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



Здравствуйте.
MS SQL 2005 и Delphi 7.

Код

q.Close;
q.SQL.Clear;

q.SQL.Add('SELECT SUM(prognoz) sum FROM sum_prognoz_4 ');
q.SQL.Add(' WHERE filial_name=:filial_name AND art_msc=:art_msc ');
q.SQL.Add('       AND data>=(dateadd(month,datediff(month,0,getdate())+2+:srok2m,0)+:srok2)');
q.SQL.Add('       AND  data<(dateadd(month,datediff(month,0,getdate())+3+:srok3m,0)+:srok3)');


далее в цикле я присваиваю параметрам значения и вызываю метод Open.
параметры, на которые ругается: srok2m,srok3m. Они челочисленного типа.

Однако получаю ошибку при выполнении запроса:
"argument data type datetime is invalid for argument 2 af dateadd function"
На форуме SQL мне сказали, что параметры надо объявлять через @, чтобы их можно было использовать в функции SQL-языка "dateadd()".
Но я все время использовал двоеточие и читал, что это и есть использование параметров.

спасибо за уделенное время


Это сообщение отредактировал(а) Lunatikus - 16.6.2009, 14:16


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Данкинг
Дата 16.6.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Ты же в данном случае подставляешь параметры именно в Query, при чём здесь SQL-сервер. Значит, двоеточия используешь, как обычно.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Lunatikus
Дата 16.6.2009, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



тогда из-за чего может происходить такая ошибка?


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Данкинг
Дата 16.6.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Lunatikus @ 16.6.2009,  16:49)
тогда из-за чего может происходить такая ошибка?

Я так понимаю, что ошибку пишет сам SQL-сервер. А почему - уж не знаю, я в нём не силён. Попробуй тот же запрос непосредственно на сервере выполнить.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
flomaster
Дата 16.6.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 28.12.2007
Где: СПб

Репутация: нет
Всего: нет



Значения (тип значений), присвоенные параметрам не подходят.
Для датовых параметров очень важно использовать:
Код

ParamByName().DataType:= ftDate;// или  ftTime, ftDateTime,

            

PM MAIL   Вверх
Lunatikus
Дата 17.6.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



Данкинг,пробовал. Объявлял параметры, присваивал им целочисленное значение и все работало.

flomaster, тип передаваемого значения параметра - целочисленный, почему тут надо вручную присваивать ftDatetime?
Ведь в SQL-запросе это целое число прибавляется к дате. Если я присвою ему тип даты, сможет ли корректно сработать функция dateadd?


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
flomaster
Дата 17.6.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 28.12.2007
Где: СПб

Репутация: нет
Всего: нет



Ага, пока читал сообщение об ошибке, забыл что они целые... 
Код

"argument data type datetime is invalid for argument 2 af dateadd function"

Тогда читаем еще раз "Аргумент типа datetime не подходит для второго аргумента функции dateadd"
Т.е. во втором аргументе, а именно 
Код

datediff(...)+... 

образуется дата. Убираем дату и запускаем.
Либо избавляемся от datediff, что вероятно будет не достаточно.
Либо избавляемся от дробной части и преобразуем к целому.

Это сообщение отредактировал(а) flomaster - 17.6.2009, 12:12
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.