vc++连接access数据库问题

daijope 2010-12-04 11:07:51
1.在StdAfx.h中写了:
#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename_namespace rename("EOF","adoEOF")
2.在Dlg.cpp中添加了一个按钮,来显示数据库中的信息代码如下:
void CStudentDlg::OnBtnAdd()
{
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。jingzhou xu
try
{
// 打开本地Access库Info.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
// return FALSE;
}

_RecordsetPtr pHandlerRecordset;
pHandlerRecordset.CreateInstance(__uuidof(Recordset));
try
{
pHandlerRecordset->Open("SELECT * FROM Name", // 查询InfoTable表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

_variant_t var;
CString strName;
while(!pHandlerRecordset->adoEOF)
{
var = pHandlerRecordset->GetCollect("Name");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
m_List_Result.AddString(strName);
pHandlerRecordset->MoveNext();
}
pHandlerRecordset->Close();
pHandlerRecordset.Release();
pHandlerRecordset = NULL;
MessageBox("数据已连接!","提示");
}
但是编译一直有问题:
F:\access\stu1\stu1Dlg.cpp(177) : error C2065: 'm_pConnection' : undeclared identifier
F:\access\stu1\stu1Dlg.cpp(177) : error C2228: left of '.CreateInstance' must have class/struct/union type
F:\access\stu1\stu1Dlg.cpp(177) : error C2065: 'Connection' : undeclared identifier
F:\access\stu1\stu1Dlg.cpp(184) : error C2227: left of '->Open' must point to class/struct/union
F:\access\stu1\stu1Dlg.cpp(184) : error C2065: 'adModeUnknown' : undeclared identifier
F:\access\stu1\stu1Dlg.cpp(189) : error C2562: 'OnButton1' : 'void' function returning a value
f:\access\stu1\stu1dlg.h(42) : see declaration of 'OnButton1'
F:\access\stu1\stu1Dlg.cpp(192) : error C2065: '_RecordsetPtr' : undeclared identifier
F:\access\stu1\stu1Dlg.cpp(192) : error C2146: syntax error : missing ';' before identifier 'pHandlerRecordset'
F:\access\stu1\stu1Dlg.cpp(192) : error C2065: 'pHandlerRecordset' : undeclared identifier
F:\access\stu1\stu1Dlg.cpp(193) : error C2228: left of '.CreateInstance' must have class/struct/union type
F:\access\stu1\stu1Dlg.cpp(193) : error C2065: 'Recordset' : undeclared identifier
F:\access\stu1\stu1Dlg.cpp(196) : error C2227: left of '->Open' must point to class/struct/union
F:\access\stu1\stu1Dlg.cpp(197) : error C2228: left of '.GetInterfacePtr' must have class/struct/union type
F:\access\stu1\stu1Dlg.cpp(198) : error C2065: 'adOpenDynamic' : undeclared identifier
F:\access\stu1\stu1Dlg.cpp(199) : error C2065: 'adLockOptimistic' : undeclared identifier
F:\access\stu1\stu1Dlg.cpp(200) : error C2065: 'adCmdText' : undeclared identifier
F:\access\stu1\stu1Dlg.cpp(209) : error C2227: left of '->adoEOF' must point to class/struct/union
F:\access\stu1\stu1Dlg.cpp(209) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Generating Code...
Skipping... (no relevant changes detected)
stu1.cpp
执行 cl.exe 时出错.

stu1.exe - 1 error(s), 0 warning(s)

如果把impor语句改成:#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename_namespace \rename("EOF","adoEOF")
又出现如下错误:
--------------------Configuration: stu1 - Win32 Debug--------------------
Compiling...
StdAfx.cpp
f:\access\stu1\stdafx.h(22) : error C2017: illegal escape sequence
f:\access\stu1\stdafx.h(22) : warning C4186: #import attribute 'rename_namespace' requires 1 arguments; ignored
f:\access\stu1\debug\msado15.tlh(409) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
执行 cl.exe 时出错.
有没有人有过同样的经历啊,这是怎么回事,要怎样才能解决啊?有没有人可以指点一下。着急。。。。。
...全文
191 1 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
changqiang08 2011-05-27
太感动了,你的回答帮我解决一个大问题[Quote=引用 4 楼 iihero 的回复:]
将你要用到的变量:
m_pConnection以及m_pRecordSet

在Dlg.cpp要引用的头文件中声明,应该在类CStudentDlg的头文件里
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordSet;
[/Quote]
回复
daijope 2010-12-12
确实是这样!虽然很简单,对新手来说还是很乱,谢了。
回复
iihero 2010-12-08
将你要用到的变量:
m_pConnection以及m_pRecordSet

在Dlg.cpp要引用的头文件中声明,应该在类CStudentDlg的头文件里
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordSet;
回复
ouclbc 2010-12-08
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordSet;
头文件中声明
回复
daijope 2010-12-05
要怎样声明?在什么地方,我是在网上找的代码,了解的不是很到位。很感谢你能耐心的看了。
回复
ACMAIN_CHM 2010-12-04
你在哪声明了这个 m_pConnection 变量呢? 看不到。
回复
发动态
发帖子
Access
创建于2007-09-28

7469

社区成员

Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
申请成为版主
社区公告
暂无公告