다음을 통해 공유


TN055: MFC DAO 클래스를 MFC ODBC 데이터베이스 클래스 응용 프로그램 마이그레이션

[!참고]

Visual C++ .NET에서는 포함된 DAO 클래스를 아직 사용할 수 있지만 Visual C++ 환경 및 마법사가 더 이상 DAO를 지원하지 않습니다.사용 하는 것이 좋습니다 OLE DB 템플릿 또는 ODBC와 MFC 새 프로젝트.DAO는 기존 응용 프로그램을 유지 관리하는 데만 사용할 수 있습니다.

개요

대부분의 경우 MFC DAO 데이터베이스 클래스를 MFC ODBC 데이터베이스 클래스를 사용 하는 응용 프로그램을 마이그레이션하는 것이 바람직 수 있습니다.이 기술 노트 대부분 MFC ODBC와 DAO 클래스 간의 차이점을 자세히 설명 합니다.와 차이점에 주의 하면 원하는 경우 ODBC 클래스에서 MFC 클래스를 응용 프로그램을 마이그레이션하는 지나치게 어려운 해서는 안 됩니다.

왜 ODBC에서 DAO를 마이그레이션 합니까?

여러 가지 이유로 이유는 DAO 데이터베이스 클래스는 ODBC 데이터베이스 클래스에서 응용 프로그램을 마이그레이션하는 것이 좋습니다 있지만 결정이 반드시 간단 하거나 분명 한 것입니다.기억해 야 할 한 가지 할 수 있는 DAO에 의해 사용 되는 Microsoft Jet 데이터베이스 엔진 ODBC 드라이버가 있는 모든 ODBC 데이터 원본 읽기 전용입니다.ODBC 데이터베이스 클래스를 사용 하거나 직접 있지만 Microsoft Jet 데이터베이스 엔진 ODBC 데이터를 읽을 수 있습니다 직접 ODBC를 호출 하는 것이 더 효율적일 수 있습니다.

DAO ODBC/의사 결정을 쉽게 간단한 경우도 있습니다.예를 들어 때 Microsoft Jet 엔진에서 읽을 수 있는 형식 (Access 형식, Excel 형식 등)는 당연 DAO 데이터베이스 클래스를 사용 하는 것을 직접 데이터에 액세스를 하기만 하면 됩니다.

데이터 서버에서 또는 다양 한 다른 서버에 있을 때 보다 복잡 한 경우에 발생 합니다.이 경우 ODBC 데이터베이스 클래스 또는 DAO 데이터베이스 클래스를 사용 하는 결정은 어려운입니다.원하는 경우 유형이 다른 조인 (조인 데이터 서버에서 SQL Server 및 Oracle과 같은 여러 가지 형식) 등에 하지 다음 사용자 대신 ODBC 데이터베이스 클래스를 사용 하거나 ODBC를 직접 호출 하는 경우 필요한 작업을 수행 하 여 강제로 Microsoft Jet 데이터베이스 엔진은 조인을 수행할 합니다.좋은 선택 커서 드라이버가 지 원하는 ODBC 드라이버를 사용 하는 경우 ODBC 데이터베이스 클래스를 수 있습니다.

특별 한 필요를 제공 하는 다양 한 방법의 성능을 테스트 하는 일부 샘플 코드를 작성 하는 경우도 있으므로 선택은 복잡할 수 있습니다.이 기술 노트에 DAO 데이터베이스 클래스는 ODBC 데이터베이스 클래스에서 마이그레이션 결정 했는지 가정 합니다.

ODBC 데이터베이스 클래스와 MFC DAO 데이터베이스 클래스 간의 유사성

MFC ODBC 클래스의 원래 디자인에서 Microsoft Access 및 Microsoft Visual Basic 사용 된 DAO 개체 모델을 기반으로 했습니다.이 모두이 섹션에 나열 됩니다 ODBC와 MFC DAO 클래스의 여러 일반적인 기능을 의미 합니다.일반적으로 프로그래밍 모델은 동일합니다.

몇 가지 유사성을 강조 표시.

  • DAO와 ODBC 클래스 관리 기본 데이터베이스 관리 시스템 (DBMS)을 사용 하 여 데이터베이스 개체를 사용 합니다.

  • 모두 해당 DBMS에서 반환 된 결과 집합을 나타내는 recordset 개체가 있습니다.

  • DAO 데이터베이스 및 레코드 집합 개체는 ODBC 클래스에 거의 동일한 멤버 있습니다.

  • 두 클래스 집합으로 일부를 제외 하 고 개체와 멤버 이름 변경 데이터를 검색 하는 데 필요한 코드는 동일 합니다.DAO 클래스에는 ODBC 클래스에서 전환할 때 간단한 이름을 변경 하는 프로세스입니다 일반적으로 변경 해야 합니다.

예를 들어, 두 모델에서 데이터를 검색 하는 프로시저 및 데이터베이스 개체 열기, 만들기 및 recordset 개체를 열고 만들고 (이동) 일부 작업을 수행 하 여 데이터를 탐색할 수입니다.

ODBC와 MFC DAO 클래스의 차이점

DAO 클래스 개체 및 메서드를 풍부한 포함 하지만이 섹션 에서만 기능과 유사한 클래스의 차이 자세히 설명 합니다.

유사한 클래스 및 전역 함수 이름 변경 내용이 클래스 간의 가장 명백한 차이 확률이 높습니다.다음은 데이터베이스 클래스와 연결 된 전역 함수, 메서드 및 개체 이름 변경 내용을 보여 줍니다.

클래스 또는 함수

MFC DAO 클래스에 해당 하는

CDatabase

CDaoDatabase

CDatabase::ExecuteSQL

CDaoDatabase::Execute

CRecordset

CDaoRecordset

CRecordset::GetDefaultConnect

CDaoRecordset::GetDefaultDBName

CFieldExchange

CDaoFieldExchange

RFX_Bool

DFX_Bool

RFX_Byte

DFX_Byte

RFX_Int

DFX_Short

RFX_Long

DFX_Long

 

DFX_Currency

RFX_Single

DFX_Single

RFX_Double

DFX_Double

RFX_Date *

DFX_Date (COleDateTime-기반)

RFX_Text

DFX_Text

RFX_Binary

DFX_Binary

RFX_LongBinary

DFX_LongBinary

*은 RFX_Date 함수 기반 CTimeTIMESTAMP_STRUCT.

응용 프로그램에 영향을 하 고 두 개 이상의 간단한 이름을 변경 해야 될 수 있습니다의 주요 기능 변경 사항이 아래에 나열 됩니다.

  • 상수와 매크로 형식 같은 레코드 집합을 열고 레코드 집합 열기 옵션을 지정 하는 데 변경 되었습니다.

    ODBC 클래스와 MFC 매크로 통해 이러한 옵션을 정의 하는 데 필요한 또는 형식을 열거 합니다.

    DAO 클래스를 사용 하 DAO (DBDAOINT. 헤더 파일에서 이러한 옵션의 정의 제공H)입니다.따라서 레코드 집합은 열거형된 멤버의 형식인 CRecordset, 하지만 DAO 상수 대신 합니다.예 사용 합니다 스냅샷 유형을 지정할 때 CRecordset odbc에서 있지만 DB_OPEN_SNAPSHOT 유형을 지정할 때 CDaoRecordset.

  • 기본 레코드 집합 형식에 대 한 CRecordset 입니다 스냅샷 의 기본 레코드 집합 종류를 하는 동안 CDaoRecordset 입니다 다이너셋 (ODBC 클래스 스냅숏에 대 한 또 다른 문제에 대 한 아래 참고 참조).

  • ODBC CRecordset 클래스에는 앞 으로만 이동 가능한 레코드 집합 종류를 만들 수 있습니다.에 CDaoRecordset 클래스, 앞 으로만 이동 가능한 레코드 집합 형식, 있지만 대신 속성 (또는 옵션) 특정 유형의 레코드 집합 아닙니다.

  • 열 때 있는 추가 전용 recordset을 CRecordset 개체 레코드 집합의 데이터를 읽기 및 추가 된 수 있음을 의미 합니다.함께 CDaoRecordset 개체, 즉 추가 전용 옵션, 문자 그대로 레코드 집합의 데이터는 가능 추가 (및 읽지 않음).

  • 트랜잭션 멤버 함수는 ODBC 클래스의 멤버인 CDatabase 및 데이터베이스 수준에서 작동 합니다.DAO 클래스에 멤버 함수 트랜잭션 수준 높은 클래스의 구성원이 (CDaoWorkspace)와 배수 영향을 줄 수 있으므로 CDaoDatabase (트랜잭션 공간) 동일한 작업 영역에서 공유 하는 개체입니다.

  • 예외 클래스가 변경 되었습니다.CDBExceptions ODBC 클래스에서 throw 되 고 CDaoExceptions DAO 클래스에 있습니다.

  • RFX_Date사용 하 여 CTimeTIMESTAMP_STRUCT 하는 동안 개체 DFX_Date 를 사용 하 여 COleDateTime.COleDateTime 와 거의 동일 합니다 CTime는 8 바이트 OLE를 기반으로 하지만 날짜 4 바이트 대신 time_t 훨씬 더 큰 범위 데이터를 보유할 수 있습니다.

    [!참고]

    DAO (CDaoRecordset) 스냅숏은 ODBC를 하는 동안 읽기 전용 (CRecordset) 스냅샷을 드라이버와 ODBC 커서 라이브러리 사용에 따라 업데이트할 수 있습니다.커서 라이브러리를 사용 하는 경우 CRecordset 스냅샷을 업데이트할 수 있습니다.데스크톱 드라이버 팩 3.0에서 Microsoft 드라이버가 없는 ODBC 커서 라이브러리를 사용 중인 경우는 CRecordset 스냅숏은 읽기 전용입니다.다른 드라이버를 사용 하는 경우 드라이버의 설명서에서 있는지 확인 스냅샷 (STATIC_CURSORS) 읽기 전용입니다.

참고 항목

기타 리소스

번호 기술 정보

범주별 기술 노트