티스토리 뷰
엑셀 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 번호가 숫자 취급하는 문제가 있다.
========
<키폰 참고>