PRB: ODBC Error When Using CRecordset Without Deriving From It

ID: Q155848


The information in this article applies to:
  • The Microsoft Foundation Classes (MFC), included with:
    • Microsoft Visual C++, 32-bit Editions, versions 4.2, 5.0


SYMPTOMS

With Visual C++ 4.2 and later, you can use the CRecordset class without deriving from it, allowing you to open a read-only recordset on any data source. This may be helpful if you are using CRecordset::GetFieldValue(), for example. However, when calling Open() for the CRecordset object, you may see a message box with the following message in it:

No columns were bound prior to calling SQLExtendedFetch


CAUSE

The CDatabase object used by the CRecordset object loaded the ODBC cursor library. The cursor library requires that there be at least one bound column for a recordset. The Visual C++ documentation doesn't make this requirement clear.


RESOLUTION

Do not load the cursor library by specifying FALSE for the last argument of CDatabase::Open(). For example:


    CDatabase db;
    db.Open("MyDataSource", FALSE, FALSE, "ODBC;", FALSE);
    CRecordset rs( &db );
    rs.Open(...);
    ... 
If your driver does not support dynasets, then the cursor library is required and you will not be able to use the CRecordset class without deriving from it.


STATUS

Microsoft has confirmed this to be a problem with the Visual C++ 4.2 documentation. The Visual C++ 5.0 documentation has been changed to reflect this information and states:

Note if you declare a recordset object without deriving from CRecordset, do not have the ODBC Cursor Library loaded. The cursor library requires that the recordset have at least one bound column; however, when you use CRecordset directly, none of the columns are bound. The member functions CDatabase::OpenEx and CDatabase::Open control whether the cursor library will be loaded."

Additional query words:

Keywords : kbprg kbusage kbdocfix kbDatabase kbMFC kbODBC kbVC
Version : 4.2 4.2a 5.0
Platform : NT WINDOWS
Issue type : kbprb


Last Reviewed: August 3, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.