Microsoft KB Archive/122218

= BUG: RFX_DATE May Use Incorrect Precision Value =

Article ID: 122218

Article Last Modified on 11/21/2006

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 1.5 Professional Edition

 Microsoft Visual C++ 1.51

 Microsoft Visual C++ 2.0 Professional Edition

 Microsoft Visual C++ 2.1</li></ul>

 Microsoft Visual C++ 4.0 Standard Edition</li></ul>

 Microsoft Visual C++ 4.1 Subscription</li></ul>

 Microsoft Visual C++ 4.2 Professional Edition</li></ul>

 Microsoft Visual C++ 4.2 Professional Edition</li></ul>

 Microsoft Visual C++ 5.0 Standard Edition</li></ul>

 Microsoft Visual C++ 6.0 Service Pack 5</li></ul>

 Microsoft Visual C++ .NET 2002 Standard Edition</li></ul>

 Microsoft Visual C++ .NET 2003 Standard Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q122218

<div class="symptoms_section">

SYMPTOMS
Using the RFX_Date functions in the Microsoft Foundation Classes fails to work with date/time fields with some ODBC drivers. A general ODBC error or 'invalid precision' error may occur depending upon the ODBC driver.

<div class="cause_section">

CAUSE
RFX_Date calls SQLSetParam and SQLBindCol with a precision parameter equal to 23 (sizeof TIMESTAMP_STRUCT). Some ODBC drivers may not use the same precision for a SQL_TIMESTAMP. For example, some ODBC drivers may choose ignore seconds or fractions of a second; in these cases, the precision may be smaller.

<div class="resolution_section">

RESOLUTION
To work around this problem, you must re-write the RFX_Date function and call your new function in your CRecordset's DoFieldExchange, replacing the RFX_Date call.

In your new RFX_Date function you will need to:


 * 1) Get the precision of a SQL_TIMESTAMP column by using the ODBC function SQLGetTypeInfo for the data source connected to by the CRecordset.
 * 2) Store the precision value in a variable in your recordset so that you can retrieve it later.
 * 3) Replace all references of TIMESTAMP_PRECISION in your RFX_Date function with a reference to the precision variable contained in your CRecordset class.

<div class="status_section">

STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. We are researching this bug and will post new information here in the Microsoft Knowledge Base as it becomes available.

Additional query words: kbVC150bug kbVC151bug kbVC200bug kbVC210bug kbVC400bug kbVC410bug kbVC420bug kbVC500bug kbVC600bug kbmfc kbdatabase kbodbc kb3rdparty

Keywords: kbbug KB122218

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.