Article ID: 152318 - Last Review: October 17, 2003 - Revision: 2.0

FIX: DAO SDK's CdbRecordset::Requery() May Fail

This article was previously published under Q152318
Expand all | Collapse all

SYMPTOMS

Attempting to invoke the DAO SDK's CdbRecordset::Requery() method of the CdbRecordset class when the recordset has been opened with dbOpenDynaset and dbDenyWrite, may result in an error message similar to the following:
   Unhandled exception in <YourApp>.exe (DAO3032.DLL):
   0xC0000005: Access Violation
					

CAUSE

Within the implementation of CdbRecordset::Requery found in DBDAO.CPP (line 1645), the casting of a COleVariant method is performed incorrectly. The cast is performed as:
   Var.pdispVal    = (LPDISPATCH)pq();
				
The correct implementation should be:
   Var.pdispVal    = (LPDISPATCH)pq->GetInterface();
				

RESOLUTION

Derive a new class from CdbRecordset and override the Requery method with the following:
   VOID CdbRecordset::Requery( CdbQueryDef *pq )   // = NULL
   {
       DAORecordset*   prs = (DAORecordset *)GetInterface();
       COleVariant     Var;

       //Manually load the Query Def as a dispatch
       if (!pq)
       {
           Var.vt          = VT_ERROR;
           Var.scode       = DISP_E_PARAMNOTFOUND;
       }
       else
       {
           Var.vt          = VT_DISPATCH;
           Var.pdispVal    = (LPDISPATCH)pq->GetInterface();
       }

       DAOMFC_CALL(prs->Requery(Var));
   }
				

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 fixed in the DAO SDK that comes with Visual C++ version 5.0.

APPLIES TO
  • The DAO SDK, when used with:
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 4.1 Subscription
Keywords: 
kbbug kbfix kbprogramming KB152318
Retired KB ArticleRetired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
 

Article Translations