[英]Can I return a CRecordset object from a function?
我在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'
CObject
是不可復制的類。 復制副本被設為私有,以防止復制。
由於CRecordset
繼承自CObject
,因此不提供自己的副本構造函數。 也不能復制。 按值返回需要存在一個復制(或移動)構造函數。
因此,您唯一的辦法就是使用“輸出參數”;否則,您將無法使用該參數。 讓調用者傳遞ExecuteSqlQuery
應該填充的CRecordset
:
void COrderSearch::ExecuteSqlQuery(CString query, CRecordset& outRecords) {
// populate outRecords
}
或返回指向CRecordset
的智能指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.