Мир InterBase


Чтение метаданных - часть 2


Next col

rs.MoveNext

Wend

Здесь следует обратить внимание на одну особенность. Спецификация OLE DB для некоторых полей таблиц метаданных определяет типы, несовместимые с VARIANT, например UI8. Поэтому при попытке получения значения из этих полей через ADODB может возникнуть ошибка;

C++

try

{

t_db_data_source сn;

_THROW_OLEDB_FAILED(cn,attach("file


name=d:\\database\\employee.ibp"));


t_db_session session;

_THROW_OLEDB_FAILED(session,create(сn));


//библиотека напрямую не поддерживает

//работу с интерфейсом получения

//наборов информационной схемы,

//поэтому напишем необходимый код "в лоб".

IDBSchemaRowsetPtr spSR(session.session_obj());


if(!spSR)

t_ole_error::throw_error(

"query interface [IDBSchemaRowset]",spSR.m_hr);


IUnknownPtr spUnk;

HRESULT hr=spSR->GetRowset(NULL,DBSCHEMA_TABLES,0,NULL,


IID_IUnknown,0,NULL,&spUnk.ref_ptr());


if(FAILED(hr))

t_ole_error::throw_disp_error(hr,"get tables list");

//подключаем полученный набор к курсору

t_db_cursor cursor;

_THROW_OLEDB_FAILED(cursor,attach(spUnk))


//получаем описание полей результирующего

//множества (набора данных)

t_db_row row;

_THROW_OLEDB_FAILED(cursor,describe(row))


//печатаем содержимое набора

while(cursor.fetch(row)==S_OK)

{

for(t_db_row::size_type i=0;i!=row.count;++i)


cout<<row.columns(i).name<<":"<<row[i].as_string<<endl ;

cout<<endl;

}//while

//проверяем причину выхода из цикла

_THROW_OLEDB_FAILED(cursor,m_last_result)


}

catch(const exception& exc){

cout<<"error:"<<exc.what()<<endl;

}




Начало  Назад  Вперед



Книжный магазин