Могу ли я вернуть объект CRecordset из функции?

У меня есть проект в MFC vc ++. Мой уровень пользовательского интерфейса и бизнес-логики отделен от уровня доступа к данным.
У меня есть функция, которая выбирает некоторые данные из базы данных в объект CRecordset. этот запрос на выборку обрабатывается на уровне доступа к данным. Когда я пытаюсь вернуть набор записей (чтобы использовать данные для построения таблицы в пользовательском интерфейсе), я получаю сообщение об ошибке.

Я попробовал это:

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'

2

Решение

CObject это не копируемый класс. Копия c’tor делается частной, чтобы предотвратить копирование.

поскольку CRecordset наследуется от CObject и не предоставляет свой собственный конструктор копирования. Это также не копируется. Возврат по значению требует наличия конструктора копирования (или перемещения).

Таким образом, вы можете использовать «выходной параметр»; попросить звонящего передать CRecordset тот ExecuteSqlQuery следует заселить:

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

Или верните умный указатель на CRecordset,

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]