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 ***");

    }