一个ADO作用的最简单的问题

firecityplans 2009-07-10 04:31:48
一面是一本书中的例子,我全部写上了就是不能运行。
#include "StdAfx.h"
#include "iostream.h"

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","EndOfFile")

int main(int argc,char*argv[])
{
CoInitialize(NULL);

try
{
_ConnectionPtr pConn("ADODB.Connection");

pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=E:\\db\\Demo.mdb;Persist Security Info=False","","",adConnectUnspecified);//打开数据库

_RecordsetPtr pRs("ADODB.Recordset");
pRs->Open("Select * From UserInfo",_variant_t(pConn,true),adOpenStatic,adLockOptimistic,adCmdText);

while(!pRs->EndOfFile)
{
cout<<"UserName:"<<_bstr_t(pRs->GetCollect("UserName"))<<"\t";
cout<<"Password:"<<_bstr_t(pRs->GetCollect("PassWord"))<<endl;
pRs->MoveNext();
}
pRs->Close();
pConn->Close();

}
catch (CException &e)
{
cout<<e.ErrorMessage()<<endl;
}
return 0;
}

出现下面的问题。大家来说说为什么啊。
E:\studyvc\DB\DAODemo\ADODemo.cpp(19) : error C2039: 'EndOfFile' : is not a member of '_Recordset'
e:\studyvc\db\daodemo\debug\msado15.tlh(1699) : see declaration of '_Recordset'
E:\studyvc\DB\DAODemo\ADODemo.cpp(19) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Error executing cl.exe.

DAODemo.exe - 2 error(s), 0 warning(s)
我已经定义了 EndOfFile了。
...全文
77 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
firecityplans 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fredrickhu 的回复:]
c++ 比较高深哦
楼主把你的DEBUG全部删除掉再编译一下试试

你的语法没什么错误
[/Quote]

问题我已经解决了。其实就是再在这个文件所在的工程里加上StdAfx.h和StdAfx.cpp这两个文件。因为StdAfx.h里已经有了这个语句:
#import "C:\\program files\\common files\\system\\ado\\msado15.dll" rename_namespace("ADOBS") rename("EOF","adoEOF")

所以在上面的ADODemo.cpp里将while( !(pRs->EndOfFile) )改成while( !(pRs->adoEOF) )就成了。还有可能会出现其它如:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
这样的错误是因为MFC要使用多线程时库, 需要更改设置:

[Project] --> [Settings] --> 选择"C/C++"属性页, ')
在Category中选择Code Generation,
再在Use run-time library中选择Debug Multithreaded或者multithreaded
咸鱼游侠(75374355) 12:11:11
其中,
Single-Threaded 单线程静态链接库(release版本)
Multithreaded 多线程静态链接库(release版本)
multithreaded DLL 多线程动态链接库(release版本)
Debug Single-Threaded 单线程静态链接库(debug版本)
Debug Multithreaded 多线程静态链接库(debug版本)
Debug Multithreaded DLL 多线程动态链接库(debug版本)

单线程: 不需要多线程调用时, 多用在DOS环境下
多线程: 可以并发运行
静态库: 直接将库与程序Link, 可以脱离MFC库运行
动态库: 需要相应的DLL动态库, 程序才能运行
release版本: 正式发布时使用
debug版本: 调试阶段使用



--小F-- 2009-07-10
  • 打赏
  • 举报
回复
\\其中的一个是起转义作用的 没错
--小F-- 2009-07-10
  • 打赏
  • 举报
回复
c++ 比较高深哦
楼主把你的DEBUG全部删除掉再编译一下试试

你的语法没什么错误
firecityplans 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sdhdy 的回复:]
这里好像不对吧,应该是一个\吧。
Data Source=E:\db\Demo.mdb
[/Quote]

问题不在于这个的。它说"EndOfFile"没定义,这里就不明白了。当我打到while(!pRs->时后面可是自动弹出了EndOfFile这一选项的。
firecityplans 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sdhdy 的回复:]
这里好像不对吧,应该是一个\吧。
Data Source=E:\db\Demo.mdb
[/Quote]

不是一个的。就是两个,不然编译器没法识别的。
pt1314917 2009-07-10
  • 打赏
  • 举报
回复
C?
sdhdy 2009-07-10
  • 打赏
  • 举报
回复
这里好像不对吧,应该是一个\吧。
Data Source=E:\db\Demo.mdb

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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