Microsoft KB Archive/152318

= FIX: DAO SDK's CdbRecordset::Requery May Fail =

Article ID: 152318

Article Last Modified on 10/17/2003

-

APPLIES TO

 The DAO SDK, when used with:  Microsoft Visual C++ 4.0 Standard Edition

 Microsoft Visual C++ 4.1 Subscription 

-



This article was previously published under Q152318



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 .exe (DAO3032.DLL): 0xC0000005: Access Violation

<div class="cause_section">

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;

<div class="resolution_section">

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)); }

<div class="status_section">

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.

Keywords: kbbug kbfix kbprogramming KB152318

-

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

© Microsoft Corporation. All rights reserved.