Когда набор записей повторно открыт для большой таблицы, возникает ошибка DB_E_OBJECTOPEN - PullRequest
0 голосов
/ 27 сентября 2019

У меня действительно большая таблица, и я должен получить к ней доступ из кода 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 ()

Этот код работает довольно долго в течение часа, а затем может произойти сбой - может ли это бытьпроисходит из-за проблемы с памятью?

...