代码之家  ›  专栏  ›  技术社区  ›  sona

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

  •  2
  • sona  · 技术社区  · 8 年前

    我有一个函数,它可以从数据库中选择一些数据到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 回复  |  直到 8 年前
        1
  •  3
  •   StoryTeller - Unslander Monica    8 年前

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

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

    所以你唯一的办法就是要么使用“输出参数”;让来电者通过 CRecordset公司 那个 ExecuteSqlQuery 应填充:

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

    或将智能指针返回到 .

    推荐文章