"SQLFetchScroll/SQLExtendedFetch를 호출하기 전에 바운드된 열이 없습니다" 에러

|

MFC에서 ODBC로 연결하기 위한 간단한 방법으로,dddddddddddddd

CDatabase, CRecordset객체를 생성해서 연결하는 방법을 쓴다,

아래 코드처럼.


 CDatabase db;
 db.Open("ODBC;DSN=TestMSSQL;UID=test;PWD=test");
 CRecordset rs;
 rs.m_pDatabase = &db;


 rs.Open(CRecordset::snapshot, "SELECT * FROM TN_member");


그런데,

rs.Open에서 첫번째 인자를 기본값인 AFX_DB_USE_DEFAULT_TYPE이나,

CRecordset::snapshot, CRecordset::dynaset, CRecordset::dynamic을 지정하면

"SQLFetchScroll/SQLExtendedFetch를 호출하기 전에 바운드된 열이 없습니다." 라는 에러가 뜬다.


일단 해결책은 CRecordset::forwardOnly 를 쓰면 된다.



CRecordset이 정의되어있는 afxdb.h를 보면,


 enum OpenType
 {
  dynaset,        // uses SQLExtendedFetch, keyset driven cursor
  snapshot,       // uses SQLExtendedFetch, static cursor
  forwardOnly,    // uses SQLFetch
  dynamic         // uses SQLExtendedFetch, dynamic cursor
 };

으로 선언이 되어 있다.

주석에서 보다시피 forwardOnly만 SQLFetch를 사용하고 나머지는 SQLExtendedFetch를 사용한다.


아마도 SQLExtendedFetch에서 에러가 나는듯 싶으나(디버그모드로 살펴보면 Open시 exception발생)

원인은 알수 없다.



그냥 전진전용 forwardOnly로 사용....?

'Knowledge > C/C++/VC++' 카테고리의 다른 글

IOCP Sample Code  (0) 2009.03.25
콘솔 입/출력 redirect  (2) 2007.09.07
폴더선택창 열기  (1) 2007.05.04
레지스트리 접근  (0) 2007.05.04
파일 열기/저장 공용 다이얼로그  (0) 2007.05.04
And