Guardar un conjunto de registros ADO en una IStream

Seleccione idioma Seleccione idioma
Id. de artículo: 242249 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

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:
AdoPersist.exe
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.

Contraer esta tablaAmpliar esta tabla
ADOPersist.cpp4.1 KB
ADOPersist.dsp4.0 KB

Propiedades

Id. de artículo: 242249 - Última revisión: jueves, 5 de agosto de 2004 - Versión: 2.2
La información de este artículo se refiere a:
  • 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
Palabras clave: 
kbmt kbdownload kbdatabase kbfile kbhowto KB242249 KbMtes
Traducción automática
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.
Haga clic aquí para ver el artículo original (en inglés): 242249
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com