Страница 1 из 1

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

СообщениеДобавлено: Ср июн 02, 2010 6:03 pm
Useful
Здравствуйте,
есть запрос, который был написан и проверен на роботоспособность в 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 символ.

Если есть соображение как работать с такого рода запросами, буду очень благодарен.

СообщениеДобавлено: Чт июн 03, 2010 5:38 am
dEVILoper
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)");

СообщениеДобавлено: Пт июн 04, 2010 6:55 pm
Useful
Спасибо, проблему с ошибкой я решил... а вот что насчет 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