Article: Q155848
Product(s): Microsoft C Compiler
Version(s): 4.2,5.0,6.0
Operating System(s):
Keyword(s): kbProgramming kbusage kbdocfix kbDatabase kbMFC kbODBC kbVC kbGrpDSVCDB kbGrpDSMDAC kbD
Last Modified: 04-AUG-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- The Microsoft Foundation Classes (MFC), used with:
- Microsoft Visual C++, 32-bit Enterprise Edition, version 4.2
- Microsoft Visual C++, 32-bit Professional Edition, version 4.2
- Microsoft Visual C++, 32-bit Enterprise Edition, version 5.0
- Microsoft Visual C++, 32-bit Professional Edition, version 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition, version 6.0
- Microsoft Visual C++, 32-bit Professional Edition, version 6.0
- Microsoft Visual C++, 32-bit Learning Edition, version 6.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 : kbProgramming kbusage kbdocfix kbDatabase kbMFC kbODBC kbVC kbGrpDSVCDB kbGrpDSMDAC kbDSupport kbMDACNoSweep
Technology : kbAudDeveloper kbMFC
Version : :4.2,5.0,6.0
Issue type : kbprb
=============================================================================