#ifndef _SQL_DATASOURCE_HPP_ #define _SQL_DATASOURCE_HPP_ #ifndef _SQL_DATAITEM_HPP_ #include #endif class DataSource { public: enum Fetch{First=SQL_FETCH_FIRST,Next=SQL_FETCH_NEXT}; DataSource(HandleEnvironment &handleEnvironment); virtual ~DataSource(); WORD sourceFirst(DataItem &someDataItem); WORD sourceNext(DataItem &someDataItem); private: WORD sourceName(DataItem &someDataItem,Fetch sourceFetch); HandleEnvironment &mhEnvironment; }; inline DataSource::DataSource(HandleEnvironment &handleEnvironment) : mhEnvironment(handleEnvironment) { } inline DataSource::~DataSource() { } inline WORD DataSource::sourceFirst(DataItem &someDataItem) { return sourceName(someDataItem,First); } inline WORD DataSource::sourceNext(DataItem &someDataItem) { return sourceName(someDataItem,Next); } inline WORD DataSource::sourceName(DataItem &someDataItem,Fetch sourceFetch) { RETCODE sqlReturn; UCHAR sourceName[SQL_MAX_DSN_LENGTH+1]; UCHAR sourceDescription[1024]; SWORD cbNameLength(sizeof(sourceName)); SWORD cbDescriptionLength(sizeof(sourceDescription)); SWORD outNameLength; SWORD outDescriptionLength; sqlReturn=::SQLDataSources(mhEnvironment,sourceFetch,sourceName,cbNameLength,&outNameLength,sourceDescription,cbDescriptionLength,&outDescriptionLength); if(sqlReturn!=SQL_SUCCESS&&sqlReturn!=SQL_SUCCESS_WITH_INFO)return TRUE; someDataItem.sourceName((char*)sourceName); someDataItem.sourceDescription((char*)sourceDescription); return FALSE; } #endif