Шаг 15 - Получаем информацию о колонках

После выполнения команды мы имеем некоторые данные в виде таблицы. Эту таблицу надо исследовать на предмет колонок и типов их.

//Группа переменных для получения данных о таблицы
IColumnsInfo* pIColumnsInfo;

Мы должны запросить интерфейс, который умеет получать информацию о колонках.

// получаем данные о таблице
hr=pIRowset->QueryInterface(IID_IColumnsInfo, (void**)&pIColumnsInfo);
if (FAILED(hr))
{	
pIRowset->Release(); 	
cout << "Error GetInfo Tables" << endl;
pIDBInitialize->Uninitialize();	
pIDBInitialize->Release(); 	
CoUninitialize();
return;
}

IColumnsInfo это интерфейс, который позволяет нам получить информацию относительно полученных данных. Его можно запросить у интерфейса IRowset который этими данными и владеет. У этого интерфейса есть метод, который возвращает колонку и называется он GetColumnInfo.

HRESULT GetColumnInfo 
( 
ULONG * pcColumns, 		//количество колонок 
DBCOLUMNINFO ** prgInfo,		//массив структур с информацией о колонках 
OLECHAR ** ppStringsBuffer		//массив структур для хранения строковых значений
);

Давайте попробуем? Надо добавить переменные.

//Группа переменных для получения данных о таблице
IColumnsInfo* pIColumnsInfo;
ULONG     nCols;DBCOLUMNINFO* pColumnsInfo = NULL;
OLECHAR*    pColumnStrings = NULL;

И получить информацию.

// получаем данные о таблице
hr=pIRowset->QueryInterface(IID_IColumnsInfo, (void**)&pIColumnsInfo);
if (FAILED(hr))
{
	pIRowset->Release(); 
	cout << "Error GetInfo Tables" << endl;
	pIDBInitialize->Uninitialize();
	pIDBInitialize->Release(); 
	CoUninitialize();
	return;
}


hr = pIColumnsInfo->GetColumnInfo(&nCols, &pColumnsInfo,&pColumnStrings);
if (FAILED(hr))
{
	cout << "Error GetColumnInfo" << endl;
	pIRowset->Release();
	pIColumnsInfo->Release(); 
	pIDBInitialize->Uninitialize();
	pIDBInitialize->Release(); 
	CoUninitialize();
	return;
}  

cout << nCols << endl;

pIRowset->Release();
pIColumnsInfo->Release();
pIDBInitialize->Uninitialize();
pIDBInitialize->Release(); 
// Деинициализация COM
CoUninitialize();
}

На экране Вы должны увидеть число 4 так как мы и запрашивали в SQL операторе.

LPCOLESTR wSQLString = OLESTR("SELECT CompanyName,City, Phone, Fax FROM Customers ORDER BY CompanyName, City");

15_1.gif (2761 b)

Но ведь мы могли и не задать, если бы использовали * вместо имен колонок.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 10.07.2001