ado连接access 数据库 编译错误 如:“_ConnectionPtr”: 未声明的标识符等

vovobobo 2009-08-09 07:31:26
我已经STDAFX.h里加入了#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF"),而且在也写了_ConnectionPtr m_pConnection;但是编译时就是无法通过
出现如下错误:
error C2065: “_ConnectionPtr”: 未声明的标识符
error C2146: 语法错误 : 缺少“;”(在标识符“m_pConnection”的前面)
······等等

我在 _ConnectionPtr 处转到定义 可以转到msado15.tlh中

我在论坛中看到有人说“2005环境下生成的工程可能会加入DAO、OBDH等,把DAO相应信息删除,和ADO技术有冲突!”
请问是否这样?如果是这样的话,如何删除DAO 相应信息
或者 还有其他什么答案 敬请指导!!
...全文
1333 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ITDeng 2012-01-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cutestar 的回复:]

在这句后面加一句
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
using namespace ADODB;
试试
[/Quote]
正解,不过我不加这个虽然有红线但是一样可以运行
大漠在路上 2010-06-19
  • 打赏
  • 举报
回复
把这个放在最后面并且加上using namespace ADODB;能够成功运行.我试过了.
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
using namespace ADODB;

如果出现不能打开数据库,你把数据库放到它的根目录下面,就可以使用了.
arong1234 2009-08-10
  • 打赏
  • 举报
回复
不要用相对路径,用绝对路径试试
vovobobo 2009-08-10
  • 打赏
  • 举报
回复
又出现了新问题:
程序编译成功 运行时无法打开数据库
会如程序设计的那样 弹出对话框 显示 “数据库连接失败,确认数据库 变形抗力数据库.mdb 是否在当前路径”
我的程序如下:
CDialog::OnInitDialog();

// TODO: 在此添加额外的初始化

/************************* 连接数据库 ********************/
_ConnectionPtr m_pConnection;// 初始化COM,创建ADO连接等操作
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
// 打开本地Access库Demo.mdb
m_pConnection->Open(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=变形抗力数据库.mdb;Persist Security Info=False"),"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox(_T("数据库连接失败,确认数据库 变形抗力数据库.mdb 是否在当前路径下!")); 当点击后 弹出此对话框 说明数据库连接失败
return FALSE;
}


/************************* 建立数据集 ********************/
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。
try
{
m_pRecordset->Open("SELECT * FROM 品种",
// 查询品种表中所有字段

m_pRecordset.GetInterfacePtr(), // 获取库接库的IDispatch
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

/************************* 读取数据 ********************/
_variant_t var;
CString strKind;
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox(_T("表内数据为空"));
return FALSE;
}

// 读入库中各字段并加入列表框中
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("品种");
if(var.vt != VT_NULL)
strKind = (LPCSTR)_bstr_t(var);
m_ComBoxList1.AddString(strKind);
m_pRecordset->MoveNext();
}

// 默认列表指向第一项,同时移动记录指针并显示
m_ComBoxList1.SetCurSel(0);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

/************************关闭记录集************************/
m_pRecordset->Close();
m_pRecordset=NULL;

/************************* 关闭数据库连接 ********************/
if (m_pConnection->State)
m_pConnection->Close();
m_pConnection=NULL;
vovobobo 2009-08-10
  • 打赏
  • 举报
回复
问题解决了
不知道什么原因;今天来重新编译,编译前CLEAN,没问题了
郁闷,昨天搞了我一天没出来
cutestar 2009-08-10
  • 打赏
  • 举报
回复
在这句后面加一句
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
using namespace ADODB;
试试
vovobobo 2009-08-10
  • 打赏
  • 举报
回复
没有办法了吗?
各位大哥大姐给点指示啊
vovobobo 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhuzhenlei 的回复:]
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
放在STDAFX.h的什么位置了,要放后面点的
[/Quote]
这个应该没有问题
arong1234 2009-08-09
  • 打赏
  • 举报
回复
他放在stdafx.h中,不是这个问题,看不出他怎么拉
[Quote=引用 3 楼 zhuzhenlei 的回复:]
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
放在STDAFX.h的什么位置了,要放后面点的
[/Quote]
zhuzhenlei 2009-08-09
  • 打赏
  • 举报
回复
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
放在STDAFX.h的什么位置了,要放后面点的
AldisZhan 2009-08-09
  • 打赏
  • 举报
回复
关注中 有时的确莫名其妙
vovobobo 2009-08-09
  • 打赏
  • 举报
回复
各位兄弟
指导指导小弟吧

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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