ADO无法连接access数据库问题

wlshhgz 2009-09-22 12:41:10
我写了一个mfc程序,是sdi的。视图是Cformview的派生类。
我想实现任意连接数据库的功能。所以在视图上添加了一个按钮。点击按钮,打开对话框选择数据库进行连接。代码如下所示:

我先在stdafx.h文件中加了这句代码:
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")

接着我在CFormView的派生类中定义
// 定义ADO连接、命令、记录集变量指针
_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_RecordsetPtr m_pRecordset;

然后在CMy3App中定义
// 定义ADO连接变量指针
_ConnectionPtr m_pConnection;

接着在BOOL CMy3App::InitInstance()中添加如下代码:
// 初始化COM,创建ADO连接等操作
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));

// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些想不到的错误。jingzhou xu
if(SUCCEEDED(m_pConnection.CreateInstance(__uuidof(Connection) )))
{
m_pConnection->CursorLocation=adUseClient; //游标类型

}
最后在视图类的onbutton事件中添加如下代码:
void CMy3View::Onbutton()
{
CString dstSrc,Src,trc;
Src="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
CFileDialog fileDlg(TRUE);
if(IDOK == fileDlg.DoModal())
{
dstSrc = fileDlg.GetPathName();

}
dstSrc.Replace("\\", "\\\\" );
trc=Src+dstSrc;
_bstr_t q;
q=trc;
try
{
// 打开本地Access库
m_pConnection->Open(q,"","",adModeUnknown);

}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库是否在当前路径下!");

}
}
不知道哪里有问题,每次总是显示("数据库连接失败,确认数据库是否在当前路径下!");
请大家指点一下,谢谢
...全文
210 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlshhgz 2009-09-23
  • 打赏
  • 举报
回复
哈,解决了。我原来在BOOL CMy3App::InitInstance()写代码:
/ 初始化COM,创建ADO连接等操作
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));
if(SUCCEEDED(m_pConnection.CreateInstance(__uuidof(Connection) )))
{
m_pConnection->CursorLocation=adUseClient; //游标类型

}
现在我把if(SUCCEEDED(m_pConnection.CreateInstance(__uuidof(Connection) )))
{
m_pConnection->CursorLocation=adUseClient; //游标类型

放到onbutton事件中就好了,谢谢大家
wlshhgz 2009-09-23
  • 打赏
  • 举报
回复
装了啊
WuXinyang 2009-09-22
  • 打赏
  • 举报
回复
dstSrc.Replace("\\", "\\\\" ); 是把哪个替换成哪个呢?
我记得在连接字符串时面写一个反绡斜杠就行吧.
一条晚起的虫 2009-09-22
  • 打赏
  • 举报
回复
//m_pConnection->Open("provider.........","","",adModeUnknown);
//第一个参数贴全了看看
wangk 2009-09-22
  • 打赏
  • 举报
回复
把连接串输出来看看,估计是你的连接串写的不对。

m_pConnection->Open("provider.........","","",adModeUnknown);

就是provider.........这一段
wlshhgz 2009-09-22
  • 打赏
  • 举报
回复
up
wlshhgz 2009-09-22
  • 打赏
  • 举报
回复
我加了这句代码试过了AfxMessageBox( e.Description() );
运行后显示的只是一个对话框,上面画个叹号,再什么都没有
一条晚起的虫 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zaodt 的回复:]
C/C++ codecatch(_com_error e)
{//AfxMessageBox("数据库连接失败,确认数据库是否在当前路径下!");
AfxMessageBox( e.Description() );
}


看看错误提示!

[/Quote]

//获取失败的具体原因啊...
wlshhgz 2009-09-22
  • 打赏
  • 举报
回复
大家帮我看看吧,我程序基本都弄好了,没想到卡这了
wlshhgz 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ljz888666555 的回复:]
直接写上全路径,先不要用打开对话框,怀疑路径不对。
[/Quote]
我试过了,这样也不行
ljz888666555 2009-09-22
  • 打赏
  • 举报
回复
直接写上全路径,先不要用打开对话框,怀疑路径不对。
zaodt 2009-09-22
  • 打赏
  • 举报
回复
catch(_com_error e) 
{
//AfxMessageBox("数据库连接失败,确认数据库是否在当前路径下!");

AfxMessageBox( e.Description() );
}



看看错误提示!
Oliver2891 2009-09-22
  • 打赏
  • 举报
回复
我的程序也是这么写的,没什么问题,装ACCESS了没?
wlshhgz 2009-09-22
  • 打赏
  • 举报
回复
写的没什么问题啊,我以前程序里这么写过,都没问题
wlshhgz 2009-09-22
  • 打赏
  • 举报
回复
m_pConnection->Open"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\Administrator\\桌面\\shujuku1\\k.mdb","","",adModeUnknown);

wlshhgz 2009-09-22
  • 打赏
  • 举报
回复
而且,我最后直接在onbutton事件中去掉了这段代码:
CString dstSrc,Src,trc;
Src="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
CFileDialog fileDlg(TRUE);
if(IDOK == fileDlg.DoModal())
{
dstSrc = fileDlg.GetPathName();

}
dstSrc.Replace("\\", "\\\\" );
trc=Src+dstSrc;
_bstr_t q;
q=trc;
直接写
try
{
m_pConnection->Open("provider.........","","",adModeUnknown);

}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库是否在当前路径下!");

}
也连不上

4,011

社区成员

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

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