VC6下ADO数据库操作的记录集指针的问题
BOOL CCalDlg::OpenRecordset(LPCTSTR lpszSource, long nCursorType, long nLockType, long nOptions)
{
ASSERT(m_pConnection != NULL);
ASSERT(m_pRecordset != NULL);
ASSERT(lpszSource != NULL);
ASSERT(AfxIsValidString(lpszSource));
//打开记录集
try
{
return (SUCCEEDED(m_pRecordset->Open(_variant_t(lpszSource),
m_pConnection.GetInterfacePtr(),
(CursorTypeEnum)nCursorType,
(LockTypeEnum)nLockType,
nOptions)));
}
catch(_com_error e)
{
TRACE(_T("%s\n"), e.ErrorMessage());
return FALSE;
}
}
BOOL CCalDlg::CloseRecordset()
{
ASSERT(m_pRecordset != NULL);
//关闭记录集
try
{
if (m_pRecordset->State & adStateOpen)
{
return SUCCEEDED(m_pRecordset->Close());
}
else
{
return TRUE;
}
}
catch (_com_error e)
{
TRACE(_T("%s\n"), e.ErrorMessage());
return FALSE;
}
}
////////////////////////////////////////////////////////
CRadarCalDlg::CCalDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCalDlg::IDD, pParent)
{
.............
CString strRadarSource = _T("SELECT * FROM Data");
if (!OpenRadarRecordset(strRadarSource))
{
AfxMessageBox(_T("记录集打开失败。"));
return;
}
.............
}
void CRadarCalDlg::OnStart1()
{
...........
m_pRecordset->AddNew();
m_pRecordset->PutCollect(_variant_t(_T("x")),_variant_t(x));
m_pRecordset->PutCollect(_variant_t(_T("y")),_variant_t(y));
m_pRecordset->PutCollect(_variant_t(_T("z")),_variant_t(y));
m_pRecordset->Update();
..........
}
void CRadarCalDlg::OnStart2()
{
...........
CString strCommand = _T("");
strCommand.Format(_T("SELECT * FROM Data where x like %d and y between %d and %d"),x,cy,cy+20);
m_pCommand->CommandText = _bstr_t(strCommand);
_variant_t vNULL;
vNULL.vt = VT_ERROR;
vNULL.scode = DISP_E_PARAMNOTFOUND;
m_pRecordset = m_pCommand->Execute(&vNULL, &vNULL, adCmdText); //应该是这里m_pRecordset的值被改变了
...........
}
初始化后直接触发OnStart1没有问题,但每次触发过OnStart2之后再触发OnStart1就会有问题,应该是在OnStart2中m_pRecordset的值被改变了。
问一下怎么把m_pRecordset的值恢复初始化那样的状态?