我可以从函数返回CRecordset对象吗?

时间:2017-09-20 08:18:46

标签: c++ mfc odbc recordset

我在MFC vc ++中有我的项目。我将UI和业务逻辑层与数据访问层分开。 我有一个函数,它从数据库中选择一些数据到CRecordset对象。此选择查询在数据访问层中处理。当我尝试返回记录集(使用数据在UI中构建表)时,我收到错误。

我试过了:

CRecordset COrderSearch::ExecuteSqlQuery(CString query)
{
CString sqlQuery;
CRecordset records;
CDatabase database;
sqlQuery = L"SELECT * FROM USers";
SetConnectionStr(connectionString);  //set the connection string
ConnectToDatabase();  //database.open()     
records.m_pDatabase = &database;
records.Open(CRecordset::dynaset, sqlQuery, CRecordset::readOnly);
return records;
}

我得到的错误:

error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'

1 个答案:

答案 0 :(得分:3)

CObject是一个不可复制的类。复制c'tor是私有的,以防止复制。

由于CRecordset继承自CObject,并且未提供自己的复制构造函数。它也不可复制。按值返回需要存在复制(或移动)构造函数。

所以你唯一的办法就是使用“输出参数”;让调用者通过CRecordset应该填充的ExecuteSqlQuery

void COrderSearch::ExecuteSqlQuery(CString query, CRecordset& outRecords) {
  // populate outRecords
}

或者将智能指针返回到CRecordset

相关问题