работа с интервалами времени (InTouch+PostgreSQL)

Вопросы, не попадающие в другие разделы.

работа с интервалами времени (InTouch+PostgreSQL)

Сообщение Useful » Ср июн 02, 2010 6:03 pm

Здравствуйте,
есть запрос, который был написан и проверен на роботоспособность в pgAdmin (БД Postgres).
select date_part('day',localtimestamp(0)- date_hit), date_part('hour',localtimestamp(0)- date_hit) from hits where id_hit=( select max(id_hit) from hits where id_post=1);
--возвращает строку, в которой 2-е колонки число дней и часов, которые прошли с момента последней записи до текущего времени.

Изображение

Пытаюсь заставить его работать в InTouch:
SQLSetStatement(ConnectionId1, "select date_part('day',localtimestamp(0)- date_hit), date_part('hour',localtimestamp(0)- date_hit) "+" from hits where id_hit=( select max(id_hit) from hits where id_post=1);");
ResultCode=SQLExecute(ConnectionId1, "day_hour",0);

Перед выполнением, создал bindlist "day_hour", в котором две строки tag:day, column:day; tag:hour, column:hour; (это было сделано от отчаяния, т.к. просто не представляю, что туда забиндить)

SQLErrorMsg( ResultCode ) на это мне говорит:
syntax error at end of input; Error while executing the query

Повторюсь, запрос 100% рабочий, "+" нужно для того чтобы строка
запроса проходила условие длины сообщения в 131 символ.

Если есть соображение как работать с такого рода запросами, буду очень благодарен.
Useful
 
Сообщения: 64
Зарегистрирован: Чт мар 18, 2010 5:21 pm

Сообщение dEVILoper » Чт июн 03, 2010 5:38 am

2 Useful:
дело не в длине строки присваивания, а в длине буфера строки под запрос - а он в стиле Интача 131 символа. Поэтому вместо "+" нужно ставить ';' и оставшуюся часть засунуть в SQLAppendStatement();
что-то вроде:
SQLSetStatement(ConnectionId1, "select date_part('day',localtimestamp(0)- date_hit), date_part('hour',localtimestamp(0)- date_hit)");
SQLAppendStatement(ConnectionId1," from hits where id_hit=( select max(id_hit) from hits where id_post=1)");
dEVILoper
 
Сообщения: 50
Зарегистрирован: Пт май 07, 2010 7:06 am
Откуда: Russia

Сообщение Useful » Пт июн 04, 2010 6:55 pm

Спасибо, проблему с ошибкой я решил... а вот что насчет bind листа (мало ли кому пригодится в мануалах ничего на эту тему не нашел):
когда выполняешь запрос, а результат в виде колонн, имена которых не являются физическими какой из либо существующей таблиц (например сумма 1-ого и 2-ого столбца, разность 3-его и 4-ого и т.д.), то для нормальной передачи в InTouch, я использовал псевдонимы и их имена забивал в bindlist.
пример:
SQLSetStatement(ConnectionId1, "select date_part('day',localtimestamp(0)- date_hit) as d_day, date_part('hour',localtimestamp(0)- date_hit) as d_hour") ;
SQLAppendStatement(ConnectionId1," from hits where id_hit=( select max(id_hit) from hits where id_post=1)");
ResultCode=SQLExecute(ConnectionId1, "day_hour",0);

в bind list прописал:
Tag name__column name
day__________d_day
hour_________d_hour
Useful
 
Сообщения: 64
Зарегистрирован: Чт мар 18, 2010 5:21 pm


Вернуться в Другое

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

cron