티스토리 뷰

프로그래밍/MFC

엑셀 ODBC

에어버스 2017. 8. 17. 00:08

엑셀 ODBC

윈도우10 Pro(64비트), 엑셀2016(64비트) 기준

1. 엑셀파일 원본 : phone.xls

시트명인 Sheet1 이 테이블, 시트명은 [ ] 로 묶고, 시트명 뒤에 $ 를 붙인다.
타이틀(uniqno, company, phone, manager) 은 컬럼이 된다.

SQL 쿼리문 예)
"SELECT company, phone, manager FROM [Sheet1$] WHERE phone = 114"

셀에 숫자는 숫자로 취급하는듯함. 셀서식에서 텍스트로해도 숫자 취급한다.

2. ODBC 설정

제어판 / 관리도구에서 'ODBC 데이터 원본(32비트)'를 선택한다. (64비트로 하면 엑셀이 없어 안된다. 64비트용 ODBC 드라이버가 필요한가?)

사용자DSN에서 Excel Files 선택하고 추가 버튼을 클릭한다.

Microsoft Excel Driver (*.xls) 선택하고 마침 버튼을 클릭한다.

데이터원본이름을 KeyPhone 으로 하고, '통합문서선택' 버튼을 눌러 phone.xls 을 선택하고 확인 버튼 클릭한다.

KeyPhone 이 추가된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <afxdb.h> 
....
    CString strDATA, strTemp;
    CDatabase db; // #include afxdb.h  필요
    if (db.OpenEx(_T("DSN=keyphone")) == FALSE)
    {
        AfxMessageBox(TEXT("ODBC KeyPhone.xls 열기 실패"));
        return FALSE;
    }
    CRecordset rs(&db);
    
 
    BOOL b = FALSE;
    b = rs.Open(CRecordset::dynaset, "SELECT company, phone, manager FROM [Sheet1$] WHERE phone = 114");
 
    short colum = rs.GetODBCFieldCount();
    char *data = NULL;
 
    if (colum>0)
    {
        while (!rs.IsEOF())
        {
            for (int k = 0; k<colum; k++)
            {
                rs.GetFieldValue(k, strTemp); // rs.GetFieldValue(TEXT("company"), strTemp)
                strDATA += (strTemp + TEXT("\t"));
            }
            AddStringLog(strDATA); // List에 문자열 추가하는 사용자 정의함수
            rs.MoveNext();
            strDATA = TEXT("");
        }
    }
cs

위 소스 25행에서 k 대신 컬럼명 사용 가능하다.

<실행결과>

phone 번호가 숫자 취급하는 문제가 있다.

========

 

<키폰 참고>

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30