64,648
社区成员
发帖
与我相关
我的任务
分享
//CPdSubPrjIdx 派生于CRecordset
class CPdSubPrjIdx : public CRecordset
{
//。。。
}
//在CPdSubPrjIdx 类的成员函数中调用如下语句
int CPdSubPrjIdx::OpenTable(void)
{
//。。。
Open(CRecordset::snapshot, m_strTblName, CRecordset::none);
//。。。
}
//上面语句会调用CRecordset::Open函数,该函数又会调用下面的函数CRecordset::SetState
//跟踪到这个函数中,this指针发生了如下的变化,令我很崩溃- -!
void CRecordset::SetState(int nOpenType, LPCTSTR lpszSQL, DWORD dwOptions)
{
if (nOpenType == AFX_DB_USE_DEFAULT_TYPE)
m_nOpenType = m_nDefaultType;
else
m_nOpenType = nOpenType;
m_bAppendable = (dwOptions & appendOnly) != 0 ||
(dwOptions & readOnly) == 0;//在该语句之前this指针指向0x067fb060(CPdSubPrjIdx),可以理解
m_bUpdatable = (dwOptions & readOnly) == 0 &&
(dwOptions & appendOnly) == 0;//在执行该语句之后this指针指向0x00000000(CRecordset),为什么啊?????
// Can turn off dirty field checking via dwOptions
if (dwOptions & noDirtyFieldCheck || dwOptions & useMultiRowFetch)
m_bCheckCacheForDirtyFields = FALSE;
// Set recordset readOnly if forwardOnly
if (m_nOpenType == forwardOnly && !(dwOptions & readOnly))
{
TRACE(traceDatabase, 0, _T("Warning: Setting forwardOnly recordset readOnly.\n"));
dwOptions |= readOnly;
// If using multiRowFetch also set useExtendFetch
if (dwOptions & useMultiRowFetch)
dwOptions |= useExtendedFetch;
}
// Archive info for use in Requery
m_dwOptions = dwOptions;
m_strRequerySQL = lpszSQL;//在执行该语句之后this指针又指向0x067fa7d0(CRecordset),为什么啊?????
m_strRequeryFilter = m_strFilter;//在执行该语句之后this指针又指向0x783c8d14(CPdSubPrjIdx),崩溃了。。。。。
m_strRequerySort = m_strSort;
}
virtual BOOL Open(UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE,
LPCTSTR lpszSQL = NULL, DWORD dwOptions = none);