FIX: Assertion Failure in CFieldExchange::GetColumnType()Last reviewed: September 25, 1997Article ID: Q135666 |
The information in this article applies to:
SYMPTOMSUsing the MFC database classes with the Microsoft SQL Server ODBC driver versions 2.50.0121 or 2.50.0126 may cause an assertion failure after a call to SQLNumResultCols() in the CFieldExchange::GetColumnType() function.
CAUSEThis error is caused by a bug in the ODBC driver that is exposed when the cursor library is used, and happens after calling CRecordset::Requery() and then trying to edit more than one record. The following code in Dbrfx.cpp produces the assertion: #ifdef _DEBUG SWORD nResultColumns; AFX_SQL_ASYNC(m_prs, ::SQLNumResultCols(m_prs->m_hstmt, &nResultColumns)); ASSERT(nColumn >= 1 && (long)nColumn <= (long)nResultColumns);#endif //_DEBUG ::SQLNumResultCols returns 0 in nResultColumns, which causes an assertion on the next line. This is due to a bug in the driver which sets the number of columns in the result set to 0. The subsequent call to ::SQLDescribeCol will also fail with SQL State S1002 "Invalid Column number" regardless of the column number specified.
RESOLUTIONTo work around this problem, use a dynaset instead of a snapshot or get the 2.65.0240 version of the SQL Server driver that is included with Visual C++ 5.0.
STATUSMicrosoft has confirmed this to be a bug with the ODBC 2.5 components. This bug has been fixed in the 2.65.0240 version of the SQL Server driver that is included with Visual C++ 5.0.
|
Additional query words: DBRFX.CPP line 2185 line 2231
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |