如何覆盖CRecordSet的SQL然后重新查询?

时间:2009-03-03 18:40:27

标签: postgresql visual-c++ odbc vc6

我有一个CRecordSet(Visual C ++ 6.0),我正在使用ODBC连接到postgresql 8.0.8。

__

问题:我在一个带有序列号(自动增量)的表中插入一行,我想在插入后检索id。

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

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

根据我的理解,我只能通过再次调用CRecordSet :: Open()覆盖查询,这将创建一个新会话,使currval()无效。

__

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

2 个答案:

答案 0 :(得分:1)

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

INSERT INTO mytable VALUES (1); SELECT currval('mysequence');

答案 1 :(得分:0)

使用currval()。这是特定于会话和并发安全的。语法在Imraan Parker的回答中。

事实上,新会话无法获得此信息。