The information in this article applies to:
SYMPTOMSThis article explains the consequences of altering the address assigned to a CRecordset member variable. This problem can occur when the CRecordset class uses numeric or decimal fields. If the internal buffer changes, the following error message can occur during a call to CRecordset::Update():
CAUSEEach field in a database that is bound to a CRecordset member variable has a corresponding binding address stored in CRecordset::m_pvBindAddress. This binding address is the location in memory where data for each field is placed when ODBC retrieves a record. Once bound, the address of this column must remain valid as long as the ODBC binding remains in effect. If this address changes, the CRecordset class can display the following debug TRACE message when retrieving a record: If the field in question is a high precision numeric or decimal field, the following error may occur while performing a CRecordset::Update():
RESOLUTION
The MFC CRecordset Class Wizard binds high precision numeric and decimal
fields to CString member variables. The MFC CRecordset class keeps a
pointer to the CString internal buffer in CRecordset::m_pvBindAddress. If
you modify a CString member variable, the CString class may re-allocate
it's string buffer (for example, if you increase the size of the CString).
If this change occurs, the address stored in CRecordset::m_pvBindAddress
becomes invalid.
To ensure your CString buffer is large enough, pass a larger value than the
default of 255 to the fourth parameter of RFX_Text (nMaxLength). For
example, the following code demonstrates the before and after of an
RFX_Text call:
STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article. MORE INFORMATION
Internally, the CRecordset class checks CRecordset::m_pvBindAddress against
the class member field buffer to ensure it has not changed. If this
comparison fails, you get the "String cannot be converted to number" error.
Additional query words:
Keywords : kbcode kberrmsg kbservicepack kbDatabase kbDriver kbMFC kbVC500 kbODBC300 kbODBC350 kbODBC351 kbODBC360 kbVS600sp2 kbVS600SP1 kbVS600sp3fix |
Last Reviewed: May 20, 1999 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |