본문 바로가기
Visual C++(MFC)

MFC13. ADO

by 정양섭 2022. 3. 7.

  ADO는 관계형 데이터베이스(Oracle, MS SQL Server, Access등)를 사용하기 위한 방법 중 하나로 그 방법으로는 ODBC(Open DataBase Connectivity), OO4O(Oracle Objects for OLE ), ADO(ActiveX Database Object)등이 있습니다.
ODBC : ODBC는 Microsoft 사에서 어떠한 관계형 데이터베이스라도 사용가능하도록 하는 방식으로 나온 초기 버전입니다. 그러나 모든 관계형 데이터베이스를 ODBC 표준에 맞추어서 변형하여 사용하므로 속도가 느리고 각 데이터베이스의 특성을 살릴 수 없어 발표 초기에 엄청난 관심을 받았으나 실패한 방식입니다.
OO4O : Oracle사에서 개발한 드라이버로 속도가 빠르나 오직 Oracle에서만 사용가능한 방식입니다.
ADO : ActiveX 기술을 이용하여 어떠한 관계형 데이터베이스라도 사용가능하도록 하는 방식으로 요즈음 가장 많이 사용하는 방식입니다. 이방식 또한 ODBC 드라이버를 통하여 I/F를 하기는 하나 ODBC 드라이버는 형태만을 사용하고 ActiveX 기술로 직접 관계형 데이터베이스를 Access 함으로써 속도가 빠릅니다.

ADO 또한 간단히 사용할 수 있도록 Class를 제공하며, 주로 사용하는 함수는 다음과 같습니다.
 //Init 함수는 이미 AfxOleInit()을 호출한 경우 사용할 필요 없다.
 BOOL Init();                    //Ole 초기화. InitInstance 처음 부분에서 호출
//ADO 초기화 대부분 InitInstance 마지막 부분에서 호출
BOOL Open(LPCTSTR strDSN, LPCTSTR strUser, LPCTSTR strPass);    
//SQL문 중 Select문 실행(결과값 dataArray에 return)
BOOL SelectSql(CStringArray &dataArray, LPCTSTR strSql, char *pColumn[], int nColumn);
//Select문 외의 SQL 문 실행
BOOL ExecuteSql(LPCTSTR strSql);

DSN 설정법
Open 함수를 보면 첫 번째 인자로 DSN이 넘어가게 되어 있는데 이 DSN의 설정법은 다음과 같습니다.
DSN은 ODBC 드라이버를 등록할 때의 그 구분이름입니다. ODBC 드라이버 설정은 Windows 95, 98, NT에서는 제어판에 아이콘이 존재하고, Windows 2000에서는 제어판의 관리 도구 내에 존재합니다.
ODBC 드라이버 설정을 실행하면 다음과 같이 실행됩니다.

시스템 DSN 탭을 선택하면 다음과 같이 화면이 바뀝니다.

추가를 선택하면 다음과 같은 대화 상자가 생성됩니다.


Access일 경우
Microsof\t Access Driver (*.mdb)를 선택하고 마침을 선택하면 다음과 같은 대화 상자가 생성됩니다.

데이터 원본 이름에 DSN 이름을 입력하고 선택 버튼을 선택하여 Access 데이터베이스 파일을 선택한 후(ODBC 설정전에 Access를 실행하여 데이터베이스 파일을 만들어야 합니다) 확인을 선택하면 ODBC 드라이버 설정이 완료됩니다.

ORACLE일 경우
Oracle ODBC Driver를 선택하고 마침을 선택하면 다음과 같은 대화 상자가 생성됩니다.

Data Source Name에 DSN을 입력하고 User ID에 사용자 이름을 입력한 후 OK버튼을 선택하면 설정이 완료됩니다. Access와 ORACLE은 데이터베이스 관리 체계가 완전히 다릅니다. Access의 경우 파일별로 테이블을 관리하고, ORACLE의 경우 사용자 ID 별고 테이블을 관리합니다. 따라서 설정하는 방법이 앞에서처럼 다릅니다.

데모용 프로그램
  데모용 프로그램은 단순히 App(AdoDatabase.cpp)의 Head 파일(AdoDatabase.h)에 CAdo의 멤버 변수로 m_Ado를 잡고, InitInstance함수 첫 부분에서 m_Ado.Init()함수를 호출하여 Ole를 초기화 하고, InitInstance함수의 마지막에 다음과 같이 설정하여 데이터베이스로부터 데이터를 읽어 단순히 AfxMessageBox를 이용하여 출력하도록 한 프로그램입니다.

        m_Ado.Open("AdoTest", "", "");
        CStringArray dataArray;
        TCHAR *pColumn[] = {"Field1", "Field2"};
        m_Ado.SelectSql(dataArray, "select * from AdoDatabase", pColumn, 2);
        CString strBuffer, strOut;
        int nRowCount = dataArray.GetSize()/2;

        strOut.Format("%10s %10s\r\n", pColumn[0], pColumn[1]);
        for(int i = 0; i < nRowCount; i++){
                strBuffer.Format("%10s %10s\r\n", dataArray.GetAt(i*2), dataArray.GetAt(i*2+1));
                strOut += strBuffer;
        }
        AfxMessageBox(strOut);

주의 : 본 데모 프로그램을 실행하기 위해서는 앞에서 설명한 대로 제공하는 AdoDatabase.mdb를 이용하여 Access ODBC 드라이버를 설정하고(DSN을 AdoTest로 설정) 프로그램을 실행해야만 합니다.

클래스 다운로드

AdoClass.zip
0.00MB

예제 프로그램 다운로드

AdoDemo.zip
0.27MB



 

'Visual C++(MFC)' 카테고리의 다른 글

MFC15. 설치 프로그램 만들기  (0) 2022.03.07
MFC14. HTML 도움말 작성법  (0) 2022.03.07
MFC12. Thread  (0) 2022.03.07
MFC11. DLL 제작  (0) 2022.03.07
MFC10. 메모리  (0) 2022.03.07