...для начала оговорюсь, что создавать свою БД (postgreSQL) и прикручивать ее к InTouch (10.1), я стал месяца 4-е назад (до этого с БД дела не имел).
Недавно, братья по разуму (программисты БД), шепнули на ухо, что давать приложению доступ к БД и пользоваться прямыми запросами к БД - "не есть хорошо"

Дело в том, что обычная хранимая процедура (как я смог разобраться, если ошибаюсь поправьте) в postgreSQL может вернуть таблицу только в формате набора полей некого типа разделенных запятой (по факту данные через запятую). В wwGenericSQLGrid отображение данных в таком формате неудобно, нет четкой границы столбцов

Нашел еще один способ в postgre выдергивание таблицы при помощи курсоров. Написал скрипт, отладил, работает. Переношу из среды написания скриптов в InTouch и пытаюсь заставить его проглотить wwGenericSQLGrid:
#Grid1.SQLString= " begin; declare abc cursor for select * from buttons; fetch all from abc";
#Grid1.ConnectWithString( "Driver={PostgreSQL Unicode};Server=... и т.д.
-небольшие пояснения:abc в данном случае переменная типа refcursor
выполняю скрипт и вижу такое сообщение: "операция не допускается, если объект закрыт".
что самое интересное, если сразу кнопочку "ОК" на этом сообщении не нажать, а например свернуться, то это окошечко куда-то прячется так, что до viewer не достучаться, закрывается только через диспетчер задач.
непосредственно запускать скрипт в InTouch не пробовал, может это только неумение пользоваться курсорами у wwGenericSQLGrid (или у меня

Может кто-нибудь сразу "грамотно" для запросов к БД использовал процедуры, и перешагнул эту проблему?
P.S. по netstat видно, что при попытке выполнить сей запрос, порт открывается, а самое главное не получается выполнить следующий скрипт:
#Grid1.SQLString= "commit;";
#Grid1.Execute();
закрываешь viewer, а соединение так и висит, пока БД сама по таймауту не закроет.

P.P.S. после проведения второго этапа испытаний на совместимость InTouch 10.1 c хранимыми процедурами postgre выяснилось, что забрать значение любого типа, которое возвращается при вызове функций невозможно.
Подробнее:
при выполнении этого скрипта (при живом подключении к БД)
ResultCode1=SQLSetStatement( connectionid1, " select Check_lampes()");
ResultCode1_1=SQLExecute( connectionid1, "check_lamp", 0 );
SQLErrorMsg( ResultCode1 ) и SQLErrorMsg( ResultCode1_1 )
пишут No errors occured
в биндах check_lamp один tag типа memory integer со столбцом Check_lampes (пробовал и сheck_lampes).
Так вот, несмотря на то, что sqlerrormsg пишет, что ошибок нету, значение не доходит до tegа(значение не меняется; выполенение скрипта вообще никак не меняет значение). Для того чтобы узнать причину, попробовал следующий скрипт в wwGenericSQLGrid:
#Grid1.SQLString= "select Check_lampes()";
#Grid1.Execute()
и о чудо, то что не cмог получить в InTouch, отображается без проблем в Grid. Я примерно представляю, что теперь через скрипты AxtiveX wwGenericSQLGrid, можно как-то выдернуть нужное мне значение, но это мартышкин труд...

Помогите, вопрос стратегический, начальство поджимает
