У меня возникла проблема следующего характера.
Перерабатываем сервер приложений написанный на связке Delphi+ODBC+PostgreSQL на Lazarus+TPQConnection+PostgreSQL с целью поддержки кроссплатформенности.
Все работает отлично, кроме одного момента
Postgresql поддерживает следующую очень удобную конструкцию.
INSERT INTO table(a,b,c) VALUES (1,2,3)... RETURNING a,b,c;
UPDATE table SET a = a + 1, b = b*a WHERE c = 3 RETURNING a,b;
эти запросы возвращают наборы данных с измененными записями, так же как это делает SELECT
Так вот. Мне ни как не удается выполнять подобные запросы с помощью стандартных классов lazarus'a.
Если я помещаю в TSQLQuery.SQL запрос, а потом вызываю SQL.Open, то возникает ошибка:
Cannot open a non-select statement
Если вызываю ExecSQL, то запрос вообще не выполняется.
В DElphi+ODBC подобные запросы нормально работали и возвращали наборы данных.
Переделывать SQL запросы из 1 в 2 или более не хочется да и проблематично, в связи с большим количеством кода.
Как решить проблему? У кого какие мысли?
Добавлено спустя 33 минуты 36 секунд:
В общем проблема похоже решилась. Эта фича работает в библиотеке ZEOS