请高手指点为何ADO连接Excel后无法再连接ACCESS!!!

siyaaa 2004-08-28 07:34:17
我的程序是将Excel中的数据导入ACCESS中,其中用List作为中转,以便检查数据有无错误,即先导入List中,然后再从List导入ACCESS中。我在用ADO连接Excel成功,将数据导入List之后,再用ADO连接ACCESS总是连接不上,而不连接Excel时连接ACCESS却成功了,部分代码如下,请高手指点原因在哪里?

***连接Excel:
void CMainFrame::OnExcelImport()
{

CManagerDoc* pDoc = (CManagerDoc*)GetActiveDocument();

//选择要导入的Excel文件
CString strFileName;
CFileDialog dlgOpen(true,0,0,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Excel Files (*.xls)|*.xls|All Files (*.*)|*.*||",0);
if( dlgOpen.DoModal() ==IDOK)
strFileName = dlgOpen.GetPathName();
else
return;

//连接字符串
CString strConn;
strConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+strFileName+";Extended Properties = Excel 8.0;";

HRESULT hr;
try
{
//创建Connection对象
hr=pDoc->m_pConnection.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
//连接数据库
pDoc->m_pConnection->ConnectionTimeout = 1;
pDoc->m_pConnection->Open(_bstr_t(strConn),"","",adModeUnknown);

}
}
catch(_com_error e)//捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);//显示错误信息
}
pDoc->m_pRecordset.CreateInstance(__uuidof(Recordset));

CString strSql = "select * from [Sheet1$]";

m_pUsersView->ShowExcelUsers(strSql); //将Excel中的数据导入到List中

//关闭连接
if(pDoc->m_pConnection->State== adStateOpen)
{
// AfxMessageBox("UNCLOSE");
pDoc->m_pConnection->Close();
}

***连接ACCESS:
void CMainFrame::OnDbImport()
{
CManagerDoc* pDoc = (CManagerDoc*)GetActiveDocument();

HRESULT hr;
try
{
//创建Connection对象
hr=pDoc->m_pConnection.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
//连接数据库
hr=pDoc->m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=meter.mdb",
"","",adModeUnknown);
if(SUCCEEDED(hr))
{
AfxMessageBox("连接上ACCESS");
m_pUsersView->AddListtoDB(); //将List中的数据导入ACCESS数据库中
}
else
AfxMessageBox("未连接上ACCESS");
}
}
catch(_com_error e)//捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);//显示错误信息
}
pDoc->m_pRecordset.CreateInstance(__uuidof(Recordset));
}

请高手指点为何ADO连接Excel后无法再连接ACCESS。
...全文
152 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
siyaaa 2004-08-30
  • 打赏
  • 举报
回复
问题已经解决了:不知为什么,连接EXCEL后,再连接ACCESS,需要确定一下数据库的绝对路径.感谢两位,现在给分.
siyaaa 2004-08-29
  • 打赏
  • 举报
回复
To:laiyiling
你说的对,确实hr=pDoc->m_pConnection.CreateInstance("ADODB.Connection");只要一次,包括pDoc->m_pRecordset.CreateInstance(__uuidof(Recordset));也只要一次.
To: laiyiling(陌生人),oyljerry(☆勇敢的心☆)
与Excel的连接确实关闭了,但运行到hr=pDoc->m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=meter.mdb","","",adModeUnknown);这句时就要报错"连接数据库失败!错误信息:未指定的错误".不知为什么连了Excel后再连接Access就是不行了
oyljerry 2004-08-29
  • 打赏
  • 举报
回复
估计还是要检查一下excel,看是否完全关闭了,或者excel可能没有彻底终止。
siyaaa 2004-08-28
  • 打赏
  • 举报
回复
Excel确实是关闭了,看别人的文章说是对Excel的会话(Session)还没有结束,只有结束了程序才能结束会话,不知是否是这方面的原因。但同时我在多次连接和关闭同一ACCESS数据库就没有问题。

问题解答期待中......
Kudeet 2004-08-28
  • 打赏
  • 举报
回复
看看你关闭是否成功,对于
//创建Connection对象
hr=pDoc->m_pConnection.CreateInstance("ADODB.Connection");只要一次就够了。

4,017

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧