Как переопределить SQL для CRecordSet, а затем запросить? - PullRequest
0 голосов
/ 03 марта 2009

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

__

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

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

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

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

__

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

Ответы [ 2 ]

1 голос
/ 06 июня 2009

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

INSERT INTO mytable VALUES (1); SELECT currval('mysequence');
0 голосов
/ 29 сентября 2012

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

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

...