m_pRecordset->GetRecordCount()时报错:“->GetRecordCount”的左边必须指向类/构造/联合/泛型类型
m_pRecordset->GetRecordCount()时报错:“->GetRecordCount”的左边必须指向类/结构/联合/泛型类型
我正在用VS2010写ADO操作SQL的程序。
类是这样的
class ADOConn
{
public:
_RecordsetPtr m_pRecordset;//指向CONNECTION对象的指针
_ConnectionPtr m_pConnection;//返回查询结果
public:
BOOL ExecuteSQL(_bstr_t bstrSQL);//执行没有返回结果的SQL语句
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);//执行查询语句可以返回结果
void OnInitADOConn();//初始化连接数据库
void ExitConnect();//关闭记录集与连接
// the returned vec str would be seprated by @ signal
void Traversal_Record();
};
void Traversal_Record()
{
//得到记录集的字段集,并存储在fields中
//在执行下面这一句的时候就报错了
long ColCount =ADOConn::m_pRecordset->GetRecordCount();
cout<<ColCount;
}
请问大侠这是啥子原因涅?
另外还有木有遍历m_pRecordset的方法呢?(在不知道有多少个fields的情况下)
------解决方案--------------------
能获取fields个数的,可以看下这ADO两个封装类。
http://blog.****.net/zyq5945/article/details/8050386
http://blog.****.net/zyq5945/archive/2010/05/20/5612543.aspx
------解决方案--------------------
因为 m_pRecordset 不是 ADOConn 的静态成员,编译器无法识别 m_pRecordset 的类型
而调用方法为 ADOConn::m_pRecordset 则为类静态成员调用的方法
再者,函数 Traversal_Record 也不是 ADOConn 里面的成员,所以在该函数中调用类必须给它指明一个类变量
解决方法有几种
1、将 m_pRecordset 设为静态成员:static _RecordsetPtr m_pRecordset
但不推荐这样做,因为如果你实例化多个 ADOConn 时 m_pRecordset 可能会出现非预期结果
2、将函数 Traversal_Record 变成 ADOConn 的成员函数(可设为私有,即只允许类内部访问)
改成类成员函数后,函数内部 ADOConn::m_pRecordset->GetRecordCount() 这句代码,将 ADOConn:: 去掉则可
3、传递一个类指针给 Traversal_Record 函数:
void Traversal_Record(ADOConn *pConn)
{
long ColCount =pConn->m_pRecordset->GetRecordCount();
cout<<ColCount;
}
调用:Traversal_Record(this)
我正在用VS2010写ADO操作SQL的程序。
类是这样的
class ADOConn
{
public:
_RecordsetPtr m_pRecordset;//指向CONNECTION对象的指针
_ConnectionPtr m_pConnection;//返回查询结果
public:
BOOL ExecuteSQL(_bstr_t bstrSQL);//执行没有返回结果的SQL语句
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);//执行查询语句可以返回结果
void OnInitADOConn();//初始化连接数据库
void ExitConnect();//关闭记录集与连接
// the returned vec str would be seprated by @ signal
void Traversal_Record();
};
void Traversal_Record()
{
//得到记录集的字段集,并存储在fields中
//在执行下面这一句的时候就报错了
long ColCount =ADOConn::m_pRecordset->GetRecordCount();
cout<<ColCount;
}
请问大侠这是啥子原因涅?
另外还有木有遍历m_pRecordset的方法呢?(在不知道有多少个fields的情况下)
------解决方案--------------------
能获取fields个数的,可以看下这ADO两个封装类。
http://blog.****.net/zyq5945/article/details/8050386
http://blog.****.net/zyq5945/archive/2010/05/20/5612543.aspx
------解决方案--------------------
因为 m_pRecordset 不是 ADOConn 的静态成员,编译器无法识别 m_pRecordset 的类型
而调用方法为 ADOConn::m_pRecordset 则为类静态成员调用的方法
再者,函数 Traversal_Record 也不是 ADOConn 里面的成员,所以在该函数中调用类必须给它指明一个类变量
解决方法有几种
1、将 m_pRecordset 设为静态成员:static _RecordsetPtr m_pRecordset
但不推荐这样做,因为如果你实例化多个 ADOConn 时 m_pRecordset 可能会出现非预期结果
2、将函数 Traversal_Record 变成 ADOConn 的成员函数(可设为私有,即只允许类内部访问)
改成类成员函数后,函数内部 ADOConn::m_pRecordset->GetRecordCount() 这句代码,将 ADOConn:: 去掉则可
3、传递一个类指针给 Traversal_Record 函数:
void Traversal_Record(ADOConn *pConn)
{
long ColCount =pConn->m_pRecordset->GetRecordCount();
cout<<ColCount;
}
调用:Traversal_Record(this)