Проблемы с доступом к данным с использованием ODBC из SQL - PullRequest
0 голосов
/ 11 апреля 2011

Я использую MFC для извлечения данных из источника данных SQL с использованием ODBC.
У меня проблема с получением полей данных, отличных от поля "id" в таблице.
varValue Обнаружено, что в следующих последовательных итерациях поля, отличные от "id", равны нулю.

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

Table data: 

     **id**(nchar)     name(varchar)     age(varchar)

0    **11**                 john            24
1    **22**                 troy            25
2    **33**                 bill            21


only ids are fetched.


    CDatabase db;
    db.OpenEx( NULL, CDatabase::forceOdbcDialog );
    CRecordset rs( &db );
    rs.Open( CRecordset::forwardOnly,
             _T( "SELECT * FROM REPDB.dbo.fellas" ) );

CDBVariant varValue;

short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )
{
   for( short index = 0; index < nFields; index++ )
   {
      rs.GetFieldValue( index, varValue,DEFAULT_FIELD_TYPE );
   }
}

Спасибо.*

1 Ответ

0 голосов
/ 11 апреля 2011

Это предположение: проблема может быть в DEFAULT_FIELD_TYPE. При использовании простого CRecordset API-интерфейс ODBC может не определить тип поля. Вы можете попытаться опустить этот параметр и посмотреть, получите ли вы представления массива char всех полей или использовать SQL_C_CHAR вместо DEFAULT_FIELD_TYPE, поскольку все ваши поля являются строковыми типами.

Вы также пропускаете вызов rs.MoveNext в конце цикла while.

Другой возможностью является использование библиотеки курсоров: см. Это примечание на странице GetFieldValue MSDN:

Примечание: если вы объявляете объект набора записей не выводя из CRecordset, делай отсутствует библиотека курсоров ODBC загружен. Библиотека курсоров требует что в наборе записей есть хотя бы один связанный столбец; Однако, когда вы используете CRecordset напрямую, ни один из столбцы связаны. Член функции CDatabase :: OpenEx и CDatabase :: Открыть контроль, является ли Библиотека курсоров будет загружена.

...