void CdSqlQuery::SerializeSqlControl(CArchive& ar) { if (ar.IsStoring()) { CuSqlQueryControl* pCtrl = GetSqlQueryCtrl(); ASSERT(pCtrl); if (!pCtrl) return; IStream* pStream = m_sqlStream.Detach(); if (pStream) pStream->Release(); pCtrl->Storing((LPUNKNOWN*)(&pStream)); if (pStream) { m_sqlStream.Attach(pStream); m_sqlStream.SeekToBegin(); CArchiveFromIStream(ar, pStream); } } else { IStream* pStream = m_sqlStream.Detach(); if (pStream) pStream->Release(); CArchiveToIStream (ar, &pStream); if (pStream) m_sqlStream.Attach(pStream); } }
// ************************************************************************************************ // LOCAL FUNCTIONS // ************************************************************************************************ static HRESULT CopyGroups2Stream(CTypedPtrList< CObList, CmtGroup* >& listObject, IStream*& pStream) { HRESULT hError = NOERROR; IStream* pStreamBuffer = NULL; // // Prepare to transfer data through the ISream interface: try { CMemFile file; CArchive ar(&file, CArchive::store); // // List of objects to store to the Archive; CTypedPtrList <CObList, CaGroup*> listObject2Store; // // Write the individual object: CaGroup* pObj = NULL; POSITION pos = listObject.GetHeadPosition(); while (pos != NULL) { CmtGroup* pMtObj = listObject.GetNext(pos); pMtObj->GetGroup (pObj); listObject2Store.AddTail (pObj); } // // Serialize the list of objects and cleanup the list. listObject2Store.Serialize (ar); while (!listObject2Store.IsEmpty()) delete listObject2Store.RemoveHead(); // // Force everything to be written to File (memory file) ar.Flush(); CArchiveToIStream (ar, &pStreamBuffer); } catch (...) { hError = E_FAIL; if (pStreamBuffer) pStreamBuffer->Release(); pStreamBuffer = NULL; } pStream = pStreamBuffer; return hError; }