Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2011, 12:21   #1
ZHDN
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 42
По умолчанию ошибка при использовании в SQL запросе ':00'

Но на вот такой запрос:

Цитата:
ADOQuery1.SQL.Add('SELECT convert(varchar(13), [SimpleTime], 120) + ':00', avg(Chann06) FROM Test.dbo.Data_217807_8_0_8 where SimpleTime between :Param1 and :Param2 group by convert(varchar(13), [SimpleTime], 120) + ':00'');
выводит ошибку на ':00'

[Error] Unit1.pas(46): ')' expected but ':' found
[Error] Unit1.pas(46): Incompatible types: 'Integer' and 'String'

А если просто добавить в квери запрос то все работает.
Где косяк?
ZHDN вне форума Ответить с цитированием
Старый 25.07.2011, 13:01   #2
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

В Delphi косяк: двоеточие в SQL-запросах однозначно интерпретируется как ещё один параметр. Можно посмотреть в исходниках парсера SQL-запросов
ReportCube вне форума Ответить с цитированием
Старый 25.07.2011, 14:55   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Дык. У Вас же даже НЕ КОМПИЛИРУЕТСЯ!
ну, кавычки же удваивать надо!!!
попробуйте (для начала!) так:
Код:
ADOQuery1.SQL.Add
  ('SELECT convert(varchar(13), [SimpleTime], 120) + '':00'', avg(Chann06) '+
   ' FROM Test.dbo.Data_217807_8_0_8 '+
   ' where SimpleTime between :Param1 and :Param2 '+
   ' group by convert(varchar(13), [SimpleTime], 120) + '':00''');
послед этого всё откомпилируется.

но вот будет ли работать?...
боюсь, что опасения ReportCube оправдаются - и вы получите при выполнении запроса ошибку, что не заданы параметры - ведь :00 Delphi вполне может посчитать за параметры!

если с :00 будут проблемы (посмотрел код ParseSQL - вроде не должно быть проблем, но, если Delphi скажет, что не заданы параметры), тогда попробуйте удвоить двоеточия
[SimpleTime], 120) + ''::00'', avg(Chann06) '+
...
group by convert(varchar(13), [SimpleTime], 120) + ''::00''');

Последний раз редактировалось Serge_Bliznykov; 25.07.2011 в 15:15.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.07.2011, 08:11   #4
ZHDN
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 42
По умолчанию

Помогли удвоенные ковычки.
ZHDN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с языком при использовании SQL Yetiball БД в Delphi 4 20.05.2009 19:38
Ошибка при запросе SQL в IB Алекс1 БД в Delphi 2 24.06.2007 22:37
Ошибка в SQL запросе eremin БД в Delphi 2 23.06.2007 07:13
Подскажите плиз в чем ошибка в БД D7 при SQL запросе TitAn БД в Delphi 16 07.06.2007 20:18