Guardar un conjunto de registros ADO en una IStream

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

242249
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Resumen
ADOPERSIST.exe es un ejemplo C++ que muestra cómo guardar un conjunto de registros ADO a un objeto IStream y volver a cargar ADO otro conjunto de registros de él.

ADO 1.5 x y 2.x Recordset implementación ofrece dos funciones para la persistencia de datos a un archivo de disco:
  1. ADORecordset.Save() para guardar el objeto de conjunto de registros en un archivo.
  2. ADORecordset.Open() para volver a cargar un conjunto de registros de un archivo.
Por otras razones de rendimiento o puede a veces se desea guardar un conjunto de registros ADO a la memoria sólo como una secuencia de datos. Para conseguir puede utilizar implementación de interfaz IPersistStream del objeto recordset ADO.
Más información

Guardar un objeto Recordset de ADO

En este ejemplo utiliza los siguientes pasos para guardar un ADO conjunto de registros:
  1. Llama a QueryInterface() en el conjunto determinado de registros ADO para obtener un puntero al objeto IPersistStream.
  2. Utiliza CreateStreamOnHGlobal() para crear un estándar, COM, objeto IStream.
  3. Llama a la función COM OleSaveToStream() para guardar el objeto IPersistStream en el objeto IStream.

Volver a crear el objeto Recordset ADO

Vuelve a dado el objeto IStream, el ejemplo a continuación, crear ADO otro conjunto de registros de él. Esto consigue utilizando el puntero IStream que contiene la secuencia de datos y llama a OleLoadFromStream().

A continuación es el código de tecla en el ejemplo:
int main(int argc, char* argv[]){	InitOle oleinit;	HRESULT hr=S_OK;	_RecordsetPtr rs; //Recordset for Saving Data	_RecordsetPtr rs2; //Recordset for Loading Data	IStreamPtr pStream;//----------------------------------------//	Create a recordset for testing//----------------------------------------	if (FAILED(CreateTestRS(&rs)))	{		printf("Couldn't create the first recordset\n");		goto exit;	}//----------------------------------------//	Create IStream//----------------------------------------	if (FAILED(SaveRS(rs, (IStream**)&pStream)))	{		printf("Couldn't save the recordset\n");		goto exit;	}//----------------------------------------//	Load another recordset from IStream//----------------------------------------	if (FAILED(LoadRS(&rs2, pStream)))	{		printf("Couldn't save the recordset\n");		goto exit;	}	//Now display the names of the fields of the rs that we just recreated	{		for (short i =0;i<rs2->Fields->Count;i++)		printf("Name of field %d is %s\n", i, (LPCTSTR) rs2->Fields->GetItem(i)->Name);	}//----------------------------------------//	Pause and then exit so that the user//	Can  //----------------------------------------exit:	printf("Press any key to end program\n");	_getch();	return 0;}//----------------------------------------//	Create a recordset from scratch//----------------------------------------HRESULT CreateTestRS(_Recordset** prs/*OUT*/){    try    {	* prs=NULL;	_RecordsetPtr pRS;	pRS.CreateInstance( __uuidof(Recordset));	pRS->CursorLocation = adUseClient;	pRS->CursorType = adOpenStatic;	pRS->LockType = adLockBatchOptimistic;	// append fields	pRS->Fields->Append(_bstr_t("ADOField1"), adVarChar, 45,adFldFixed);	pRS->Fields->Append(_bstr_t("ADOField2"), adBoolean, 0,adFldFixed);	pRS->Fields->Append(_bstr_t("ADOField3"), adCurrency, 0,adFldFixed);	pRS->Fields->Append(_bstr_t("ADOField4"), adDate, 0,adFldFixed);	pRS->Open(vtMissing, vtMissing, adOpenStatic,adLockBatchOptimistic,-1);	*prs= pRS.Detach();    }    catch (_com_error & e)    {	return e.Error();    }    return S_OK;}HRESULT SaveRS(_RecordsetPtr pRS/*IN*/, IStream* * ppStream/*OUT*/){    HRESULT hr=S_OK;    try    {	*ppStream=NULL;        // QI and return IPersistStream        IPersistStreamPtr pIPersist(pRS);        if (pIPersist )        {            //Create a standard stream in memory            if (FAILED(hr=CreateStreamOnHGlobal(0, TRUE, (IStream **)ppStream)))		return hr;            // Persist the pRS            if (FAILED(hr=OleSaveToStream(pIPersist, *ppStream)))		return hr;        }        else            return E_NOINTERFACE;    }    catch (_com_error & e)    {	return e.Error();    }return S_OK;    }HRESULT LoadRS(_Recordset* *ppRS/*OUT*/, IStreamPtr pStream/*IN*/){    HRESULT hr=S_OK;    try    {	*ppRS=NULL;        if (NULL==pStream)            return E_NOINTERFACE;        // Load the pRS.        LARGE_INTEGER li;        li.QuadPart = 0;	//Set the pointer to the beginning of the stream        if (FAILED(hr=pStream->Seek(li, STREAM_SEEK_SET, 0)))            return hr;	if (FAILED(hr=OleLoadFromStream(pStream,         	__uuidof(_Recordset),                reinterpret_cast<LPVOID *>(ppRS)))		)            return hr;    }    catch (_com_error & e)    {	return e.Error();    }    return S_OK;}				
Los archivos siguientes están disponibles para descargarlos del Centro de descarga de Microsoft:
Para obtener información adicional acerca de cómo descargar los archivos de soporte técnico de Microsoft, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
119591Cómo obtener Archivos de soporte técnico de Microsoft desde los servicios en línea
Microsoft exploró este archivo en busca de virus. con el software de detección de virus más reciente disponible en la fecha de publicación. Asimismo, el archivo se almacenó en servidores seguros que ayudan a impedir la realización de cambios no autorizados.

ADOPersist.cpp4.1 KB
ADOPersist.dsp4.0 KB

Advertencia: este artículo se ha traducido automáticamente

Propiedades

Id. de artículo: 242249 - Última revisión: 01/16/2015 20:00:48 - Revisión: 2.2

  • Microsoft ActiveX Data Objects 1.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
  • kbnosurvey kbarchive kbmt kbdownload kbdatabase kbfile kbhowto KB242249 KbMtes
Comentarios