FIX: DAO SDK's CdbRecordset::Requery() May FailLast reviewed: September 19, 1997Article ID: Q152318 |
The information in this article applies to:
SYMPTOMSAttempting 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 CAUSEWithin 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(); RESOLUTIONDerive 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)); } STATUSMicrosoft 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 : kbprg Technology : kbMfc kbMfckbole Version : 4.0 4.1 Platform : NT WINDOWS Issue type : kbbug Solution Type : kbfix |
================================================================================
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |