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 |