CRecordset :: GetFieldValue () генерирует исключение (но не всегда) - PullRequest
0 голосов
/ 30 октября 2018

Может кто-нибудь объяснить это странное поведение?

CString A, B;
CRecordset  rs.Open( forwardOnly, "select A,B from table", readOnly);

// does not work:
rs.GetFieldValue( "A", A); // ok
rs.GetFieldValue( "B", B); // throws; m_nRetCode is set to -1; 
//trace says "dbcore.cpp(174) : AppMsg - invalid descriptor index."

// works:
rs.GetFieldValue( (short) 0, A); // ok
rs.GetFieldValue( (short) 1, B); // ok

// does´nt work either !?
rs.GetFieldValue( rs.GetFieldIndexByName( "A"), A); // ok
rs.GetFieldValue( rs.GetFieldIndexByName( "B"), B); // asserts !?

// throws a different exception:
rs.GetFieldValue( "A", A); // ok
rs.GetFieldValue( "A", A); // throws, but m_nRetCode is 100 now and the trace is saying "data allready fetched" !?

// strange...
rs.GetFieldValue( (short) 0, A); // ok
rs.GetFieldValue( "B", B); // this works
rs.GetFieldValue( "A", A); // this asserts ???

Я обыскал полученную подсказку, сказав, forwardOnly - неправильный курсор, но использование снимка ничего не меняет. Кто-нибудь может объяснить?

Есть ли способ это исправить?

1 Ответ

0 голосов
/ 30 октября 2018

Думаю, я нашел ответ: кажется, что он лежит за пределами CRecordset в SQLGetData () :

Если драйвер не поддерживает расширения для SQLGetData, функция может возвращать данные только для несвязанных столбцов с числом больше тот из последнего связанного столбца . Кроме того, в ряду данных значение аргумента Col_or_Param_Num в каждом вызове SQLGetData должно быть больше или равно значению Col_or_Param_Num в предыдущий звонок; то есть данные должны быть получены в возрастающем столбце номер заказа.

https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlgetdata-function?view=sql-server-2017

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...