Есть интерфейс и база данных. Когда я с его помощью подключаюсь к базе данных всё работает. Но только изменения сохраняются только при работе программы. При повторном открытии всё сбрасывается как было.
| Код | 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; }
| |