Click to See Complete Forum and Search --> : OLE DB 'IColumnsInfo2' problem


KalliMan
May 8th, 2004, 06:52 PM
Hello.
I'm writting application which Open an Access database via OLE DB.
And I want to receave all columns metadata With 'IColumnsInfo2::GetRestrictedColumnInfo(...)' , but I cannot(or don't know how) implement IColumnsInfo2 with 'IColumnsRowset'.
i.e.
--------------------------------
IColumnsRowset** ppOLEColumnsInfo;
IColumnsInfo2** ppOLEColumnsInfo2;
.............
HRESULT hr = ppOLEColumnsInfo->QueryInterface(IID_IColumnsInfo2,(void**)ppOLEColumnsInfo2)
//and hr == E_NOINTERFACE
--------------------------------
............
If i try to add 'DBPROP_IColumnsInfo2' property while open 'IColumnRrcorset' with 'IOpenRowset::OpenRowset', result is 'DB_S_ERRORSOCCURRED'.
i.e.
--------------------------------
IOpenRowset** ppOLEOpenRowset;
IColumnsRowset** ppOLEColumnsInfo;
..........

DBPROPSET dbPropSet[1];
ULONG cDbPropCount = sizeof(dbPropSet)/sizeof DBPROPSET;

const ULONG cProperties = 1;
DBPROP rgProperties[cProperties];

pPropSet->rgProperties = rgProperties;
pPropSet->cProperties = cProperties;
pPropSet->guidPropertySet = DBPROPSET_ROWSET;

AddProperty(&rgProperties[1] ,DBPROP_IColumnsInfo2,VT_BOOL,VARIANT_TRUE,DBPROPOPTIONS_OPTIONAL);//doesn't work with DBPROPOPTIONS_REQUIRED, too
............
hr = pOLEOpenRowset->OpenRowset(NULL,&dbID,NULL,IID_IColumnsRowset,
1 ,&dbPropSet,(IUnknown **)&pOLEColumnsRowset );

//and hr == DB_S_ERRORSOCCURRED
//and dbPropSet.rgProperties.dwStatus == DBPROPSTATUS_NOTSUPPORTED
--------------------------------
So, how can i implement Rowset which can implement IDBColumnInfo2 ?

P.S. I don't want to use IColumnsRowset::GetColumnsRowset().


thanks at advice:
KalliMan