Как переопределить SQL для CRecordSet, а затем повторно запросить?

У меня есть CRecordSet (Visual C++ 6.0), и я использую ODBC для подключения к postgresql 8.0.8.

__

Проблема: я вставляю строку в таблицу с серийным идентификатором (автоинкремент), и я хотел бы получить идентификатор после моей вставки.

Я не могу использовать ключевое слово RETURNING, не поддерживаемое в этой версии PGsql, но я могу использовать currval('sequence').

Однако в моем коде мне нужно выполнить запрос по умолчанию, а затем переопределить его, чтобы выполнить запрос с помощью currval().

Насколько я понимаю, я могу переопределить запрос, только снова вызвав CRecordSet::Open(), что создаст новый сеанс, делая currval() бесполезным.

__

Итак: как я могу переопределить SQL, а затем выполнить этот новый запрос через Requery(), а не через Open()?


person Community    schedule 03.03.2009    source источник


Ответы (2)


Насколько я понимаю, currval() не зависит от соединения. Вы должны вернуть правильное значение для нового соединения. Вы также можете попробовать добавить 'select currval()' в конце инструкции INSERT.

INSERT INTO mytable VALUES (1); SELECT currval('mysequence');
person Community    schedule 05.06.2009
comment
currval зависит от соединения. - person Chris Travers; 29.09.2012

Используйте curval(). Это зависит от сеанса и безопасно для параллелизма. Синтаксис приведен выше в ответе Имрана Паркера.

Однако дело в том, что с новой сессией нет безопасного способа получить эту информацию.

person Chris Travers    schedule 29.09.2012