如何覆盖CRecordSet的SQL,然后重新查询? 我有一个cordStect(Visual C++ 6),我使用ODBC连接到PostgreSQL 80.8.

如何覆盖CRecordSet的SQL,然后重新查询? 我有一个cordStect(Visual C++ 6),我使用ODBC连接到PostgreSQL 80.8.,postgresql,visual-c++,odbc,visual-c++-6,Postgresql,Visual C++,Odbc,Visual C++ 6,__ 问题是:我将一行插入到一个具有序列id的表中(自动增量),并且我希望在插入后检索该id 我不能使用RETURNING关键字,此版本的PGsql不支持该关键字,但我可以使用currval('sequence') 但是,在我的代码中,我需要执行默认查询,然后用currval()重写它以执行查询 据我所知,我只能通过再次调用CRecordSet::Open()来覆盖查询,这将创建一个新会话,从而使currval()无效 __ 那么:如何重写SQL,然后通过Requery()而不是Open()执行

__

问题是:我将一行插入到一个具有序列id的表中(自动增量),并且我希望在插入后检索该id

我不能使用RETURNING关键字,此版本的PGsql不支持该关键字,但我可以使用currval('sequence')

但是,在我的代码中,我需要执行默认查询,然后用currval()重写它以执行查询

据我所知,我只能通过再次调用CRecordSet::Open()来覆盖查询,这将创建一个新会话,从而使currval()无效

__


那么:如何重写SQL,然后通过Requery()而不是Open()执行这个新查询呢?

据我所知,currval()不是特定于连接的。您应该在新连接上获得正确的值。您还可以尝试在INSERT语句的末尾追加“select currval()”

INSERT INTO mytable VALUES (1); SELECT currval('mysequence');
使用currval()。这是特定于会话且并发安全的。以上是Imraan Parker的回答中的语法


但事实是,对于新会话,没有安全的方法获取此信息。

currval是特定于连接的。