У меня действительно большая таблица, и я должен получить к ней доступ из кода C ++, снова и снова с разными предложениями where.Он работает без сбоев почти час, а затем падает при попытке открыть таблицу, потому что таблица объектов уже открыта.Ошибка: IDispatch error # 3077 HRESULT hr = 0x80040e05 Объект был открыт.
Это часть кода.mIsOpen и RowCount объявлены в классе.Кроме того, mIsOpen имеет значение false в классе
'void Create_Instance()
if (m_spRecordset != 0)
if (mIsOpen)
{
m_spRecordset->Close();
return;
}
HRESULT hresult = m_spRecordset.CreateInstance(__uuidof(Recordset));
if (FAILED(hresult ))
{
// exception message
}
}
long GetResults()
{
if (mIsOpen)
{
MoveToBeginning()
return RowCount;
}
else
{
Create_Instance();
}
try
{
HRESULT hresult = m_spRecordset->Open(_variant_t(MySelectStatement),
_variant_t( (IDispatch *) m_spConnection, true),
My_Cursor_Type,
My_Lock_Type,
My_Opt);
RowCount = m_spRecordset->RecordCount;
mIsOpen = true;
}
catch(const _com_error& error)
{
//******** throws DB_E_OBJECTOPEN exception *******
}
return RowCount;
}'
MoveToBeginning () вызывает m_spRecordset-> MoveFirst ()
Этот код работает довольно долго в течение часа, а затем может произойти сбой - может ли это бытьпроисходит из-за проблемы с памятью?