Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This example connects directly to a specific MDP by using the provider's unique class identifier, in this case represented by CLSID_GENOLAP. After obtaining an IID_IDBSchemaRowset pointer, this function proceeds to call the function MDPSchemaSample (the code for which appears in the section Creating a Schema Rowset) to traverse the schema rowset for the MDP data source object.
//
HRESULT MDPConnectUsingClsId(void)
{
HRESULT hr;
// Initialize property values.
for (ULONG i=0; i < NUMELEM(rgProperties); i++)
VariantInit(&rgProperties[i].vValue);
// Create the instance of the MSOLAP provider.
IDBInitialize *pIDBInitialize = NULL;
hr = CoCreateInstance(CLSID_MSOLAP, NULL, CLSCTX_INPROC_SERVER,
IID_IDBInitialize, (LPVOID*)&pIDBInitialize);
IDBProperties *pIDBProperties = NULL;
hr = pIDBInitialize->QueryInterface(IID_IDBProperties, (void **)
&pIDBProperties);
// Identify property set.
DBPROPSET rgPropertySet[1];
DBPROP rgProperties[1];
rgPropertySet[0].rgProperties = rgProperties;
rgPropertySet[0].cProperties = 1;
rgPropertySet[0].guidPropertySet = DBPROPSET_DBINIT;
// Fill in data source.
rgProperties[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
rgProperties[0].dwOptions = DBPROPOPTIONS_REQUIRED;
rgProperties[0].colid = DB_NULLID;
rgProperties[0].vValue.vt = VT_BSTR;
rgProperties[0].vValue.bstrVal = SysAllocString(L"LocalHost");
assert(rgProperties[0].vValue.bstrVal);
hr = pIDBProperties->SetProperties(NUMELEM(rgPropertySet),
rgPropertySet);
// Initialize and create the session.
hr = pIDBInitialize->Initialize();
IDBCreateSession *pIDBCreateSession = NULL;
hr = pIDBInitialize->QueryInterface(IID_IDBCreateSession,
(void **) &pIDBCreateSession);
IDBSchemaRowset *pIDBSchemaRowset = NULL;
hr = pIDBCreateSession->CreateSession(NULL, IID_IDBSchemaRowset,
(IUnknown **) &pIDBSchemaRowset);
IRowset* pIRowset = NULL;
hr = MDPSchemaSample(pIDBSchemaRowset, (IUnknown**)pIRowset);
if (pIDBInitialize) pIDBInitialize->Release();
if (pIDBProperties) pIDBProperties->Release();
if (pIDBCreateSession) pIDBCreateSession->Release();
if (pIDBSchemaRowset) pIDBSchemaRowset->Release();
if (pIRowset) pIRowset->Release();
return hr;
}