我有一个函数,它可以从数据库中选择一些数据到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'
CObject 是不可复制的类。副本c'tor是私有的,以防止复制。
CObject
自从 CRecordset 继承自 并且不提供自己的复制构造函数。它也不可复制。按值返回需要存在复制(或移动)构造函数。
CRecordset
所以你唯一的办法就是要么使用“输出参数”;让来电者通过 CRecordset公司 那个 ExecuteSqlQuery 应填充:
CRecordset公司
ExecuteSqlQuery
void COrderSearch::ExecuteSqlQuery(CString query, CRecordset& outRecords) { // populate outRecords }
或将智能指针返回到 .