2009-03-03 4 views
0

CRecordSet (Visual C++ 6.0)이 있고 ODBC를 사용하여 postgresql 8.0.8에 연결합니다.CRecordSet에 대한 SQL을 재정의 한 다음 다시 쿼리하는 방법은 무엇입니까?

문제 __ : 나는 일련 ID (자동 증가)이있는 테이블에 행을 삽입, 그리고 내 삽입 후 ID를 검색하고 싶습니다.

이 버전의 PGsql에서는 지원되지 않는 RETURNING 키워드를 사용할 수 없지만 currval ('sequence')을 사용할 수 있습니다.

그러나 내 코드에서 기본 쿼리를 실행 한 다음 currval()로 쿼리를 실행하려면이 쿼리를 재정의해야합니다.

내가 이해 한대로, 나는 CRecordSet :: Open()을 다시 호출하여 쿼리를 재정의 할 수있다. 이것은 새로운 세션을 생성하여 currval()을 쓸모 없게 만든다.

__

그래서 : 나는 SQL을 무시할 수있는 방법, 다음 열기를 통해 다시 쿼리() 아니라()를 통해이 새로운 쿼리를 실행?

답변

1

필자가 아는 한 currval()은 연결과 관련이 없습니다. 새 연결에서 올바른 값을 가져와야합니다. 또한 INSERT 문 끝에 'select currval()'을 추가하고 추가 할 수 있습니다.

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

currval은 연결 관련 정보입니다. –

0

currval()을 사용하십시오. 이것은 세션 특정 및 동시성 안전합니다. 구문은 Imraan Parker의 답변에서 위입니다.

사실 새 세션에서는이 정보를 얻을 수있는 안전한 방법이 없습니다.

관련 문제