STDMETHODIMP  CImpIAccessor::FInit
	(
	BOOL	fUnderRowset		//@parm IN | Is aggregated within Rowset?   
	)
{
	// Create the Extended Buffer array.
    // This is an array of pointers to malloc'd accessors.
    m_pextbufferAccessor = (LPEXTBUFFER) new CExtBuffer;
    if (m_pextbufferAccessor == NULL || FAILED( m_pextbufferAccessor->FInit( 1, sizeof( PACCESSOR ), g_dwPageSize )))
        return ResultFromScode( E_OUTOFMEMORY );

	// If aggregated under Rowset do the following:
	if(fUnderRowset)
	{
		// For efficiency reasons put a copy of the accessors buffer
		// directly on the CRowset object.
		((CRowset *)m_pObj)->m_pextbufferAccessor = m_pextbufferAccessor;

		HRESULT			hr;
		CCommand    	*pCCommand;
		CImpIAccessor	*pIAccessorCommand;

		// See if there are any accessors created on the Command object, and if so
		// copy their handles so they can be used on the Rowset.
		pCCommand = ((CRowset *)m_pObj)->m_pCreator;
		if(pCCommand)
		{
			if(SUCCEEDED(pCCommand->QueryInterface(IID_IAccessor, (void **)&pIAccessorCommand)) && pIAccessorCommand)
			{
				// Copy handles.
				hr = pIAccessorCommand->CopyAccessors(m_pextbufferAccessor);
				pIAccessorCommand->Release();
				if(FAILED(hr))
					return hr;
			}
		}
	}

	return NOERROR;
}