c++의 엑셀 파일을 불러 와서 db화 시키는 예제입니다.
거의 완제품인데요. 엑셀의 좌표의 문장을 불러와서 db화 시키는 예제라서 아주 유용할거 같네요.
이거 만들면서 네트워크 버전도 있는데 완전 자동으로 엑셀저장된 데이타를 불러와서 db 시키는 프로그램으로 만들려고 했는데 잠깐 2주만에 만든거라 다른거 또 프로젝트 넘어가느라 대충 만든거네요.
참고만 하세요. 파워빌더는 이보다 더 쉬운데 차이라면 요건 엑셀 좌표 컬럼 하나하나 지정 할수 있어서 아주 유용합니다.
c++ 버전은 visual studio 8 로 만들었습니다.
#include "stdafx.h"
#include "EY_ADODB.h"
// 생성자 함수
CEY_ADODB::CEY_ADODB()
{
CoInitialize(NULL); // COM관련 개체 초기화
m_pCON = NULL; // 연결 포인터
m_pRS = NULL; // 레코드셋 포인터
m_pCOM = NULL; // 명령 포인터
}
// 소멸자 함수
CEY_ADODB::~CEY_ADODB()
{
CoUninitialize(); // COM관련 개체 해제
}
// 각 변수 초기화.
void CEY_ADODB::Init_Value()
{
intRecordCount = 0; // DB조회 결과 갯수 초기화
for(int i =0;i < MAX_RECORD_NUM ;i++)
{
for(int j =0; j<intFieldNum; j++)
{
fldItem[i][j] = "";
fldName[j] = "";
}
}
}
// DB변수 초기화.
void CEY_ADODB::Init_DB()
{
m_pCON.CreateInstance(__uuidof(Connection));
m_pRS.CreateInstance(__uuidof(Recordset));
m_pCOM.CreateInstance(__uuidof(Command));
IsDBOpen = FALSE;
}
// 해당경로의 DB와의 연결.
BOOL CEY_ADODB::Open_DB(CString strFilePath)
{
CString strDBPath;
strDBPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFilePath;
_bstr_t strConnect(strDBPath);
try
{
m_pCON->Open(strConnect,"","", adConnectUnspecified);
}catch(...)
{
IsDBOpen = FALSE;
return FALSE;
}
IsDBOpen = TRUE;
return TRUE;
}
// DB와의 연결 종료.
void CEY_ADODB::Close_DB()
{
if (IsDBOpen) m_pCON->Close(); // 현재 연결되어있다면 해제.
}
// 해당 쿼리를 실행하여 DB내용 조회.
void CEY_ADODB::Select_DB(CString strQuery)
{
m_pCOM->ActiveConnection = m_pCON;
m_pCOM->CommandText = (LPTSTR)(_bstr_t) strQuery;
try
{
m_pRS = m_pCOM->Execute(NULL,NULL,adCmdText);
}
catch(...)
{
AfxMessageBox("조회가 정상적으로 되지 않았습니다.!!");
return;
}
if(m_pRS->adoEOF)
{
AfxMessageBox("데이타 없음!!");
return;
}
if(intFieldNum <1)
{
AfxMessageBox("intFieldNum을 설정해주십시오~!!");
return;
}
// 레코드셋을 하나씩 증가시키면서 해당 데이타를 fldItem[][]에 넣어둔다.
// 이렇게 저장된 데이타를 추후 App Main에서 사용...
while(!m_pRS->adoEOF)
{
for(int j =0;j<intFieldNum;j++)
{
fldItem[intRecordCount][j] = m_pRS->Fields->GetItem(fldName[j])->GetValue();
}
intRecordCount++;
m_pRS->MoveNext();
}
m_pRS->Close();
}
// 해당 쿼리를 실행하여 DB내용 추가.
void CEY_ADODB::Insert_DB(CString strQuery)
{
m_pCOM->ActiveConnection = m_pCON;
m_pCOM->CommandText = (LPTSTR)(_bstr_t) strQuery;
try
{
m_pRS = m_pCOM->Execute(NULL,NULL,adCmdText);
}
catch(...)
{
AfxMessageBox("삽입이 정상적으로 되지 않았습니다.!!");
return;
}
}
// 해당 쿼리를 실행하여 DB내용 수정.
void CEY_ADODB::Update_DB(CString strQuery)
{
m_pCOM->ActiveConnection = m_pCON;
m_pCOM->CommandText = (LPTSTR)(_bstr_t) strQuery;
try
{
m_pRS = m_pCOM->Execute(NULL,NULL,adCmdText);
}
catch(...)
{
AfxMessageBox("수정이 정상적으로 되지 않았습니다.!!");
return;
}
}
// 해당 쿼리를 실행하여 DB내용 삭제.
void CEY_ADODB::Delete_DB(CString strQuery)
{
m_pCOM->ActiveConnection = m_pCON;
m_pCOM->CommandText = (LPTSTR)(_bstr_t) strQuery;
try
{
m_pRS = m_pCOM->Execute(NULL,NULL,adCmdText);
}
catch(...)
{
AfxMessageBox("삭제가 정상적으로 되지 않았습니다.!!");
return;
}
}
// variant->CString 으로 변환.
CString CEY_ADODB::Convert_Variant_To_String(_variant_t &varString)
{
if (varString.vt == VT_BSTR)
{
_bstr_t bstrString = (_bstr_t)varString;
return (LPTSTR)bstrString;
}
return "";
}