void CexceloleDlg::olestart(void)
{
CoInitialize(NULL);
bool IsConnectionOpen=FALSE;
hr=m_pConn.CreateInstance(__uuidof(Connection));
m_pConn->CursorLocation=adUseClient;
//if(SUCCEEDED(hr))
//{
try
{
hr=m_pConn->Open(_bstr_t(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\mine\\excelole\\newdb2.mdb;Persist Security Info=False"),_bstr_t(L"Admin"),_bstr_t(L""),adConnectUnspecified);
if(FAILED(hr))
AtlTraceErrorRecords(hr);
}
catch(_com_error& e)
{
AfxMessageBox(e.Description());
AfxMessageBox(e.ErrorMessage());
}
IsConnectionOpen=TRUE;
m_pComm=NULL;
m_pComm.CreateInstance(__uuidof(Command));
m_pComm->ActiveConnection=m_pConn;
m_pComm->CommandType=adCmdText;
//}
if(IsConnectionOpen)
{
try
{
m_pRs=m_pConn->Execute((_bstr_t)("SELECT * FROM Table5"),NULL,adOptionUnspecified);
}
catch(_com_error& e)
{
AfxMessageBox(e.Description());
AfxMessageBox(e.ErrorMessage());
}
}
}
위와 같이 만든 olestart를 oninitdialog에서 실행하고
Fields의 value값들을 읽은후(그냥 메시지박스로, 즉 다이얼로그에는 형태 변화 없음)
m_pConn->Close();
m_pConn->Release();
m_pConn=NULL;
->m_pComm도 아래처럼 따로 Release해도 결과는 같다.
//m_pComm->Close();
//m_pComm->Release();
//m_pComm=NULL;
CoUninitialize();
했더니(종료부분은 oninitdialog에서도 해보고 onclose부분,소멸자 부분에서도 해봤지만 결과는 동일)
"이 작업을 수행하는데 연결을 사용할수 없습니다. 이컨텍스트에서 연결이 닫혀 있거나 잘못되었습니다."라는 에러가
나오고
처음에 만들어져있는 확인 버튼을 누르면
"excelole.exe의 0x00427096에 처리되지 않은 예외가 있습니다. 0xC0000005: 0x00000008 위치를 읽는 동안 액세스 위반이 발생했습니다."
라는 에러가 발생됩니다.
또 close부분이나 null 대입부분을 지워도 액세스위반이 발생되구여...
(처음부터 확인 버튼을 누르면 제대로 종료됩니다.)
도대체 문제가 먼지 알수가 없군요... |