_ConnectionPtr 问题

xscansou 2006-11-17 04:03:53
class CAdoDB
{
public:
CAdoDB();
virtual ~CAdoDB();
public:
//数据库连接
_ConnectionPtr GetConnection(){return m_pConn;};
BOOL Open(LPCTSTR lpszConnect=_T(""),long lOptions=adConnectUnspecified);
.....
}
提示如下错误,是怎么回事呢?
error C2146: syntax error : missing ';' before identifier 'GetConnection'
...全文
282 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xscansou 2006-11-18
  • 打赏
  • 举报
回复
.h
============================================
#ifndef ADO_DB_H
#define ADO_DB_H
#import "msado15.dll" no_namespace rename("EOF","adoEOF")
#include <vector>
//利用vector 数组结构构造一维字符串数组
typedef ::std::vector<CString> CStrs;
//利用vector数据结构构造二给字符串数组
typedef ::std::vector<CStrs> CDStrs;
class CAdoDB
{
public:
CAdoDB();
virtual ~CAdoDB();
public:
//数据库连接
_ConnectionPtr GetConnection(){return m_pConn;};//返回数据库连接指针

BOOL Open(LPCTSTR lpszConnect=_T(""),long lOptions=adConnectUnspecified);
void Close();
BOOL IsOpen();
_RecordsetPtr GetRecordset(){return m_pRs;};//返回记录集指针
CString GetConString() {return m_strConn;};//返回连接字符串
//执行SQL语句
_RecordsetPtr Execute(LPCTSTR strSQL);
CString vartostr(_variant_t&var);//_variant_t数据格式的数据转换为字符串格式化
//根据SQL语句查询数据库,获取的记录集保存在二维字符串数据中
void ExecuteQuery(LPCTSTR lpszSQL,CDStrs& Fields);
//根据SQL语句查询数据库,获取一个字段值值
void ExecuteQueryValue(LPCTSTR lpszSQL,CString& value);
protected:
CString m_strConn;//连接字符串
_ConnectionPtr m_pConn;//数据库连接指针
_RecordsetPtr m_pRs;//记录集指针
};
#endif
======================================================
.cpp
======================================================
#include "stdafx.h"
#include "ADODB.h"
CAdoDB::CAdoDB()
{
::CoInitialize(NULL);//调用CoInitialize初始化COM环境
}
CAdoDB::~CAdoDB()
{
::CoUninitialize();//释放COM对象
}
BOOL CAdoDB::IsOpen()
{
try
{
return (m_pConn!=NULL&&(m_pConn->State&adStateOpen));
}
catch(_com_error e)//处理异常
{
AfxMessageBox(e.ErrorMessage());
}
return false;
}

_RecordsetPtr CAdoDB::Execute(LPCTSTR strSQL,long lOptions)
{
_variant_t RecordsAffected;

try
{
return m_pConn->Execute(_bstr_t(strSQL),&RecordsAffected,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}

return false;
}

BOOL CAdoDB::Open(LPCTSTR lpszConnect,long lOptions)
{
m_pConn.CreateInstance("ADODB.Connection");//创建Connection对象
//初始化Recordset指针
m_pRs.CreateInstance(_uuidof(Recordset));
m_strConn=lpszConnect;
if(m_strConn.IsEmpty())
{
return false;
}
if(IsOpen()) Close();
try
{
//连接数据库
return (m_pConn->Open(_bstr_t(m_strConn),"","",lOptions)==S_OK);
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
return false;
}
void CAdoDB::Close()
{
try
{
if(m_pConn!=NULL&&IsOpen())
{
m_pConn->Close();
}
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
}
void CAdoDB::ExecuteQueryValue(LPCTSTR lpszSQL,CString &value)
{
try
{
m_pRs->Open(_bstr_t(lpszSQL),(IDispatch*)m_pConn,adOpenDynamic,adLockOptimistic,adCmdText);
if(!m_pRs->adoEOF)
{
_variant_t thevalue=m_pRs->GetCollect(_variant_t((short)0));//获取字段值
value=vartostr(thevalue);
}
m_pRs->Close();
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
}
void CAdoDB::ExecuteQuery(LPCTSTR lpszSQL,CDStrs& Fields)
{
try
{
//打开记录订
m_pRs->Open(_bstr_t(lpszSQL),(IDispatch*)m_pConn,adOpenDynamic,adLockOptimistic,adCmdText);
while(!m_pRs->adoEOF)
{
CStrs strs;
_variant_t thevalue;
//获取一条记录中的所有字段值保存到字符串数组strs中
int size=m_pRs->Fields->Count;
for(long index=0;index<m_pRs->Fields->Count;index++)
{
thevalue=m_pRs->GetCollect(_variant_t(index));
CString temp=vartostr(thevalue);
strs.push_back(temp);
}
Fields.push_back(strs);//保存一条记录到二维字符数组中
m_pRs->MoveNext();
}
m_pRs->Close();
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
}
CString CAdoDB::vartostr(_variant_t &var)
{
CString strValue;
switch(var.vt)
{
//字符串
case VT_BSTR:
case VT_LPSTR:
case VT_LPWSTR:
strValue=(LPCTSTR)(_bstr_t)var;
}
return strValue;
}
====================================
调试结果:
====================================
--------------------Configuration: YoYoSoftware - Win32 Release--------------------
Compiling...
ADODB.cpp
f:\ssss\release\msado15.tlh(407) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\vector(48) : warning C4786: '??0?$vector@V?$vector@VCString@@V?$allocator@VCString@@@std@@@std@@V?$allocator@V?$vector@VCString@@V?$allocator@VCString@@@std@@@std@@@2@@std@@QAE@IABV?$vector@VCStr
ing@@V?$allocator@VCString@@@std@@@1@ABV?$allocator@V?$vector@VCString@@V?$allocator@VCString@@@std@@@std@@@1@@Z' : identifier was truncated to '255' characters in the browser information
F:\ssss\ADODB.cpp(111) : see reference to class template instantiation 'std::vector<class std::vector<class CString,class std::allocator<class CString> >,class std::allocator<class std::vector<class CString,class std::allocator<
class CString> > > >' being compiled
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\vector(61) : warning C4786: '??0?$vector@V?$vector@VCString@@V?$allocator@VCString@@@std@@@std@@V?$allocator@V?$vector@VCString@@V?$allocator@VCString@@@std@@@std@@@2@@std@@QAE@PBV?$vector@VCStri
ng@@V?$allocator@VCString@@@std@@@1@0ABV?$allocator@V?$vector@VCString@@V?$allocator@VCString@@@std@@@std@@@1@@Z' : identifier was truncated to '255' characters in the browser information
F:\ssss\ADODB.cpp(111) : see reference to class template instantiation 'std::vector<class std::vector<class CString,class std::allocator<class CString> >,class std::allocator<class std::vector<class CString,class std::allocator<
class CString> > > >' being compiled
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\comip.h(690) : error C2227: left of '->QueryInterface' must point to class/struct/union
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\comip.h(75) : see reference to function template instantiation 'long __thiscall _com_ptr_t<class _com_IIID<struct _Recordset,&struct __s_GUID _GUID_00000556_0000_0010_8000_00aa006d2ea4> >
::_QueryInterface(const bool &)' being compiled
Error executing cl.exe.
Creating browse info file...

YoYoSoftware.exe - 1 error(s), 3 warning(s)

===============================================
高手帮我看一下呀..我已经把msado15.dllcopy到目录下了
xscansou 2006-11-17
  • 打赏
  • 举报
回复
_RecordsetPtr CAdoDB::Execute(LPCTSTR strSQL);
{
return false;
}
///////////////////////////////////////////////////////////
error C2447: missing function header (old-style formal list?)
xscansou 2006-11-17
  • 打赏
  • 举报
回复
_RecordsetPtr CAdoDB::Execute(LPCTSTR strSQL)
{
return false;
}
现在我什么都没加还是同样的错误..是不是RecordsetPtr ??

如下错误
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\comip.h(690) : error C2227: left of '->QueryInterface' must point to class/struct/union
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\comip.h(75) : see reference to function template instantiation 'long __thiscall _com_ptr_t<class _com_IIID<struct _Recordset,&struct __s_GUID _GUID_00000556_0000_0010_8000_00aa006d2ea4> >
::_QueryInterface(const bool &)' being compiled
一条晚起的虫 2006-11-17
  • 打赏
  • 举报
回复
_RecordsetPtr CAdoDB::Execute(LPCTSTR strSQL,long lOptions)///这里不能通过
----
什么错误?
一条晚起的虫 2006-11-17
  • 打赏
  • 举报
回复
在stdafx.h中
#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF","adoEOF")
xscansou 2006-11-17
  • 打赏
  • 举报
回复
急..........
xscansou 2006-11-17
  • 打赏
  • 举报
回复
.h
_RecordsetPtr Execute(LPCTSTR strSQL,long lOptions=adCmdText);
.cpp
_RecordsetPtr CAdoDB::Execute(LPCTSTR strSQL,long lOptions)///这里不能通过
{
_variant_t RecordsAffected;
try
{
return m_pConn->Execute(_bstr_t(strSQL),&RecordsAffected,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
return false;
}
xscansou 2006-11-17
  • 打赏
  • 举报
回复
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\comip.h(690) : error C2227: left of '->QueryInterface' must point to class/struct/union
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\comip.h(75) : see reference to function template instantiation 'long __thiscall _com_ptr_t<class _com_IIID<struct _Recordset,&struct __s_GUID _GUID_00000556_0000_0010_8000_00aa006d2ea4> >
::_QueryInterface(const bool &)' being compiled
===============================================
原来是没有找那个那dll文件,但现在又出现上面的错误了,
  • 打赏
  • 举报
回复
好像是找不到_ConnectionPtr的声明,看看你的头文件部分
我花钱买的,结果没用上,太亏了 本系统采用ADO来访问SQL数据库,这里充分应用了C++类封装的功能,根据本系统应用的范围,将访问数据库的功能函数封装在一个类CMyDatabase。 正如前所述,ADO是访问数据库的一个方法,它提供了不同的接口。ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。 _ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_RecordserPtr来实现。而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordserPtr时不需要。 _CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。 _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtrconnection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口 ,然后使用_RecordsetPtr执行存储过程和SQL语句。  根据这些,我们将数据库的各种操作封装到CMyDatabase类里。几个主要函数说明如下:

4,011

社区成员

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

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