Add, update, delete data using ADO Recordset?
In this example, I am using mcb.krz database which is an access database. The table i do have in example is 'Access' that has two fields, i.e., Name and HTML, both are Text type fields. Microsoft.Jet.OLEDB.3.51 is OLE_DB provider for MS Access. To use ADO, you must have OLE-DB provider for that database.
How to connect to a database?
_ConnectionPtr m_pConnection ;
BOOL m_bIsConnectionOpen ;
// Create an instance of _Connection
HRESULT hr ;
try
{
hr = m_pConnection.CreateInstance(__uuidof( Connection) );
if (SUCCEEDED(hr))
{
//Open a connection where database is access database : "d:\mcb.krz"
hr = m_pConnection->Open( _bstr_t(L"Provider=Microsoft.Jet.OLEDB.3.51; Data Source=d:\\mcb.krz;"),
_bstr_t(L""), _bstr_t(L""), adModeUnknown ) ;
//If database opened successfully then set IsConnectionOpen to TRUE
if (SUCCEEDED(hr))
{
m_bIsConnectionOpen = TRUE;
}
}
}
catch( _com_error &e )
{
// get info from _com_error
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE("%s", e.ErrorMessage());
}
catch(...)
{
TRACE("*** UNHANDELED EXCEPTION ***");
}
How to add a record using ADORecordset?
_RecordsetPtr pRecordset;
CAdofullDoc* pDoc;
pDoc = GetDocument();
HRESULT hr;
_bstr_t bstrQuery("SELECT * FROM Access"); // We will perform operations on Access table now.
_variant_t vNull;
vNull.vt = VT_ERROR ;
vNull.scode = DISP_E_PARAMNOTFOUND ;
try
{
hr = pRecordset.CreateInstance(__uuidof(Recordset));
if (SUCCEEDED(hr))
{
pRecordset->PutRefActiveConnection( m_pConnection) ;
hr = pRecordset->Open(_variant_t(bstrQuery), vNull, adOpenForwardOnly, adLockOptimistic, adCmdText );
/* If recordset open successfully */
if (SUCCEEDED(hr))
{
// Create an array of the list of fields in the Access table. Access table has two fiels called
// Name and HTML, Text and Memo type
COleSafeArray vaFieldList;
vaFieldList.CreateOneDim(VT_VARIANT, 2);
// Fill the fields name now
long lArrayIndex[1];
lArrayIndex[0] = 0;
vaFieldList.PutElement( lArrayIndex, &(_variant_t("Name")) );
lArrayIndex[0] = 1;
vaFieldList.PutElement( lArrayIndex, &(_variant_t("HTML")) );
// Create an array of values to be added
COleSafeArray vaValueArray;
vaValueArray.CreateOneDim(VT_VARIANT, 2);
//Fill the values in each field
lArrayIndex[0] = 0;
vaValueArray.PutElement( lArrayIndex, &(_variant_t("MyName")) );
lArrayIndex[0] = 1;
vaValueArray.PutElement( lArrayIndex, &(_variant_t("myHTML")) );
// call Addnew of recordset now
pRecordset->AddNew( vaFieldList, vaValueArray );
pRecordset->Close();
}
}
}
catch( _com_error &e)
{
// get info from _com_error
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE("%s", e.ErrorMessage());
}
catch(...)
{
TRACE("*** UNHANDELED EXCEPTION ***");
}
How to delete records using CDAORecordset?
_RecordsetPtr pRecordset;
CAdofullDoc* pDoc;
pDoc = GetDocument();
HRESULT hr;
_bstr_t bstrQuery("SELECT * FROM Access WHERE Name='MyName' "); // We will perform operations on Access table now.
_variant_t vNull;
vNull.vt = VT_ERROR ;
vNull.scode = DISP_E_PARAMNOTFOUND ;
try
{
hr = pRecordset.CreateInstance(__uuidof(Recordset));
if (SUCCEEDED(hr))
{
pRecordset->PutRefActiveConnection( m_pConnection) ;
hr = pRecordset->Open(_variant_t(bstrQuery), vNull, adOpenForwardOnly, adLockOptimistic, adCmdText );
if (! pRecordset->GetadoEOF() )
{
// Delete(adAffectCurrent) deletes current record in the recordset.
pRecordset->Delete(adAffectCurrent);
pRecordset->Close();
}
}
}
catch( _com_error &e)
{
// get info from _com_error
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE("%s", e.ErrorMessage());
}
catch(...)
{
TRACE("*** UNHANDELED EXCEPTION ***");
}
How to update records using CDAORecordset?
_RecordsetPtr pRecordset;
CAdofullDoc* pDoc;
pDoc = GetDocument();
HRESULT hr;
_bstr_t bstrQuery("SELECT * FROM Access WHERE Name='MyName' "); // We will perform operations on Access table now.
_variant_t vNull;
vNull.vt = VT_ERROR ;
vNull.scode = DISP_E_PARAMNOTFOUND ;
try
{
hr = pRecordset.CreateInstance(__uuidof(Recordset));
if (SUCCEEDED(hr))
{
pRecordset->PutRefActiveConnection( m_pConnection) ;
hr = pRecordset->Open(_variant_t(bstrQuery), vNull, adOpenForwardOnly, adLockOptimistic, adCmdText );
if (! pRecordset->GetadoEOF() )
{
pRecordset->PutCollect(L"HTML", "changed HTML tag");
pRecordset->Update(vNull, vNull);
pRecordset->Close();
}
}
}
catch( _com_error &e)
{
// get info from _com_error
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE("%s", e.ErrorMessage());
}
catch(...)
{
TRACE("*** UNHANDELED EXCEPTION ***");
}