I post this code but i cannot test it, because i cant establish an ADODB connection on my laptop. Its a long time ago i wrote this. This code makes a snapshot of a recordset.
RecordSetSnapshot::RecordSetSnapshot(ADODB::_RecordsetPtr* rset)
{
long count;
unsigned int ix,iy;
long colrow[2];
_rows = 0;
_cols = (*rset)->Fields->Count;
try
{
_variant_t fields = vtMissing;
_variant_t data = (*rset)->GetRows(ADODB::adGetRowsRest,(long)ADODB::adBookmarkCurrent,fields);
_variant_t value;
if( (VT_EMPTY!=data.vt) && (S_OK==::SafeArrayGetUBound(data.parray,2,&count)) )
{
_rows = 1 + count;
for(ix=0;ix<_cols;ix++)
{
ADODB::Field* field = 0;
(*rset)->Fields->get_Item(_variant_t((long)ix),&field);
field->Release();
}
for(ix=0;ix<_cols;ix++)
{
colrow[0] = ix;
for(iy=0;iy<_rows;iy++)
{
colrow[1] = iy;
if(S_OK==::SafeArrayGetElement(data.parray,colrow,&value))
{
VariantChangeType(&value,&value,0,VT_BSTR);
VariantClear(&value);
}
}
}
}
VariantClear(&data);
VariantClear(&fields);
}
catch(_com_error e)
{
TRACE(_S("Error: %s\r\n"),(TCHAR*)e.Description());
Clear();
}
catch(...)
{
Clear();
}
}
Hope this helps.
Regards.