FIX: Assertion Fails When Use RFX_Text() w/ SQL_VARCHAR Column (120888)
The information in this article applies to:
- The Microsoft Foundation Classes (MFC), when used with:
- Microsoft Visual C++ 1.51
- Microsoft Visual C++, 32-bit Professional Edition 2.0
This article was previously published under Q120888 SYMPTOMS
An assertion failure occurs when using RFX_Text() with a column of type
SQL_VARCHAR that has a column width greater than 255 bytes.
CAUSE
The column width for a column with SQL type of SQL_VARCHAR is usually less
than 256 bytes. The ASSERT on line 1747 is verifying that the column width
is less than 256 bytes unless the column type is SQL_LONGVARCHAR or
SQL_LONGBINARY. However some drivers implement SQL_VARCHAR type columns
that allow more than 255 bytes; in which case, the assertion is not valid.
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article. This bug was corrected in Visual C++
versions 1.52 and 2.1.
RESOLUTION
The problem occurs in the function CFieldExchange::GetColumnType(). Because
this function is not virtual, there is no easy workaround.
You could replace the GetColumnType function as well as the RFX_Text()
function but that would entail adding all of the RFX_Text() function to
your application to take care of a problem occurs only in a _DEBUG build
because ASSERTs are removed in release builds.
Instead of re-implementing RFX_Text here are two other approaches:
Modification Type: | Major | Last Reviewed: | 12/1/2003 |
---|
Keywords: | kbbug kbDatabase kbfix KB120888 |
---|
|