vc++ ADO连接acces数据库

oowangoo 2011-04-16 09:36:45
#include <iostream>
#include <string>
using namespace std;
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
int main()
{
cout<<"1"<<endl;
::CoInitialize(NULL); // 初始化OLE/COM库环境 ,为访问ADO接口做准备
_ConnectionPtr m_connection;
_RecordsetPtr m_recordset;
_CommandPtr m_command;
string m_strSource;
bool m_fConnected;
HRESULT hr;
try{
hr = m_connection.CreateInstance(_uuidof(Connection));
if(SUCCEEDED(hr))
{
hr = m_connection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Program Files\\excel数据库\\Database1.accdb;Persist Security Info=False"," "," " , 1);
}
if(SUCCEEDED(hr))
m_fConnected = TRUE;
else
m_fConnected = FALSE;
}
catch (_com_error &e)
{
cout<<e.ErrorMessage()<<endl;
m_fConnected = FALSE;
}
if(!m_fConnected)
{
cerr<<"ADO数据源初始化失败!"<<endl;
return 0;
}
………………
运行到连m_connection->Open操作出错。。。连接字符串我是从VS2010服务器管理里面拷出来的。不知为何一直连不上
求解。。。
...全文
255 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
oowangoo 2011-04-17
  • 打赏
  • 举报
回复
结贴给分了- -
oowangoo 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xianglitian 的回复:]

这有一个例子
不过是MFC的
http://blog.csdn.net/xianglitian/archive/2010/05/22/5617173.aspx
[/Quote]
谢谢。 自己写的ADO呢。很强大啊。
oowangoo 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zxhx 的回复:]

引用 8 楼 oowangoo 的回复:

引用 7 楼 zxhx 的回复:
。。。
完整的应该是在头文件中加入:
#import "c:\program files\common files\system\ado\msado15.dll"

我就这么加的。。只是上面省略了前面的路径。。。

路径要加全了,否则就得把那个文件copy到你的源文件目录下~
[/Quote]
额,这个我知道- -我是在那里加全了路径(只是我上面说的时候没把路径说出来- -我理解你的意思)。。不过没把源文件拷过去就是。
zxhx 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 oowangoo 的回复:]

引用 7 楼 zxhx 的回复:
。。。
完整的应该是在头文件中加入:
#import "c:\program files\common files\system\ado\msado15.dll"

我就这么加的。。只是上面省略了前面的路径。。。
[/Quote]
路径要加全了,否则就得把那个文件copy到你的源文件目录下~
向立天 2011-04-17
  • 打赏
  • 举报
回复
oowangoo 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zxhx 的回复:]
。。。
完整的应该是在头文件中加入:
#import "c:\program files\common files\system\ado\msado15.dll"
[/Quote]
我就这么加的。。只是上面省略了前面的路径。。。
zxhx 2011-04-16
  • 打赏
  • 举报
回复
1,::CoInitialize(NULL);应该与::UnCoInitialize(NULL);配对,否则应该用:AfxOleInit();初始化COM;
2,检查连接字符串是否正确,可以用这个试试:http://blog.csdn.net/zyq5945/archive/2010/05/13/5586423.aspx
zxhx 2011-04-16
  • 打赏
  • 举报
回复
。。。
完整的应该是在头文件中加入:
#import "c:\program files\common files\system\ado\msado15.dll"
oowangoo 2011-04-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zxhx 的回复:]
需要在头文件中添加#import msado15.dll
别的就没啥了
如果你用上面的工具连接成功了,获得的连接字符串跟你的一样,那就不是连接字符串的问题了~
确认一下open()函数的参数都是对的,你上面的肯定不对,试试:

C/C++ code

hr = m_connection->Open(_bstr_t("Provider=Microsoft.ACE.OLEDB.12.0;……
[/Quote]
额,我仔细看看,我加了那#import msado15.dll
显示不出那2个函数,AFX应该是MFC中的把。。那个::UnCoInitialize(NULL);函数我不大清楚额,我是数据库新手- -
King_hhuang 2011-04-16
  • 打赏
  • 举报
回复
access数据库文件不是*.mdb吗?
另外你的错误信息是什么
zxhx 2011-04-16
  • 打赏
  • 举报
回复
需要在头文件中添加#import msado15.dll
别的就没啥了
如果你用上面的工具连接成功了,获得的连接字符串跟你的一样,那就不是连接字符串的问题了~
确认一下open()函数的参数都是对的,你上面的肯定不对,试试:

hr = m_connection->Open(_bstr_t("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Program Files\\excel数据库\\Database1.accdb"), "", "", adModeUnknown);
oowangoo 2011-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zxhx 的回复:]

1,::CoInitialize(NULL);应该与::UnCoInitialize(NULL);配对,否则应该用:AfxOleInit();初始化COM;
2,检查连接字符串是否正确,可以用这个试试:http://blog.csdn.net/zyq5945/archive/2010/05/13/5586423.aspx
[/Quote]
1中那2个函数都找不到- -需要什么头文件么?

2方法解决了open问题。good.
他的得到的open参数
hr = m_connection->Open(_bstr_t(("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Program Files\\excel数据库\\Database1.accdb;Persist Security Info=False")), "", "", adOpenUnspecified);
连接字符串和我的一摸一样,为什么上面那样就连接失败?不明白为什么。
oowangoo 2011-04-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 oowangoo 的回复:]
#include <iostream>
#include <string>
using namespace std;
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
int main()
{
cout<<"1"<<endl;
::CoI……
[/Quote]
额,我换成.mdb依然是错的。编译没错,但是运行后弹出debug error用catch抓取信息输出是个2进制数(内存好像是)。

4,018

社区成员

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

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