Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > COM+ACCESS - редактирование базы данных


Автор: KAIR 13.1.2006, 17:55
Есть интерфейс и база данных.
Когда я с его помощью подключаюсь к базе данных всё работает. Но только изменения сохраняются только при работе программы. При повторном открытии всё сбрасывается как было.

Код

bool CWarehouse::OpenConnection(void)
{
    try{
        CString conStr="Provider=Microsoft.JET.OLEDB.4.0;Data Source=E:\\STEP\\Files\\WarehouseResource.mdb;";
        
        m_pCon.CreateInstance(__uuidof(Connection));
        m_pCom.CreateInstance(__uuidof(Command));

        m_pCon->ConnectionString=(_bstr_t)conStr;
        m_pCon->CursorLocation=adUseClient;

        HRESULT hr=m_pCon->Open((_bstr_t)conStr,"","",-1);
        if(FAILED(hr)){
            AfxMessageBox("Ошибка соединения с БД...");
            return false;
        }

        if(m_pCom!=NULL){
            m_pCom->ActiveConnection=m_pCon;
            m_pCom->Prepared=FALSE;    
        }
    }
    catch(...)
    {
        AfxMessageBox("В CWarehouse::OpenConnection произошло исключение!!!");
        return false;
    }

    return true;
}

STDMETHODIMP CWarehouse::GetRS(BSTR sSQL, IUnknown** ppRS)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    _RecordsetPtr spRS;
    HRESULT hr;

    try{
        if(!OpenConnection())return S_FALSE;//коннектимся к БД
        spRS.CreateInstance(__uuidof(Recordset));
        spRS->CursorLocation = adUseClient;
        spRS->putref_ActiveConnection(m_pCon);//активный коннект

        hr=spRS->Open(_variant_t(sSQL),vtMissing,adOpenStatic,adLockBatchOptimistic,-1);

        if(FAILED(hr)){
            AfxMessageBox("Ошибка чтения из БД...");
            return S_FALSE;
        }

        spRS->PutRefActiveConnection(NULL);// Disassociate the connection from the recordset.
        m_pCon->Close();

        *ppRS=spRS;//возвращаем recordset
        spRS->AddRef();
    }
    catch(_com_error &e){
        AfxMessageBox("При работе произошло исключение СОМ в Connect!");
        return S_FALSE;
    }    
    catch(...){
        AfxMessageBox("При работе произошло исключение в Connect!");
        return S_FALSE;
    }

    return S_OK;
}

Автор: _hunter 13.1.2006, 18:13
похоже транзакцию подтвердить нужно...
читай доки по этой m_pCon.CreateInstance(__uuidof(Connection));

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)