Codejock Forums Homepage
Forum Home Forum Home > Codejock Products > Visual C++ MFC > Report Control
  New Posts New Posts RSS Feed - Refresh control with modifications in database
  FAQ FAQ  Forum Search   Events   Register Register  Login Login

Refresh control with modifications in database

 Post Reply Post Reply
Author
Message
JoseAngel View Drop Down
Groupie
Groupie


Joined: 21 March 2006
Location: Spain
Status: Offline
Points: 35
Post Options Post Options   Thanks (0) Thanks(0)   Quote JoseAngel Quote  Post ReplyReply Direct Link To This Post Topic: Refresh control with modifications in database
    Posted: 16 February 2011 at 12:42pm
Could be a good idea to modify the CXTPReportDataManager::UpdateReportRecords method to enable the control to show the registers added in the database by other process.

HRESULT CXTPReportDataManager::UpdateReportRecords(XTPREPORTADODB::_RecordsetPtr pRecordset, bool addNewItems/*=false*/)
{
    HRESULT hr = E_FAIL;

    try
    {

    CXTPReportRecords* pRecords = m_pReportControl->GetRecords();
    if (!(pRecordset != NULL && pRecords))
        return E_FAIL;
    XTPREPORTADODB::FieldsPtr pFields;
    if (FAILED(hr = pRecordset->get_Fields(&pFields)) || pFields == NULL)
        return hr;
    long lFields;
    if (FAILED(hr = pFields->get_Count(&lFields)) || lFields == 0)
        return hr;
    long lRecords;
    if (FAILED(hr = pRecordset->get_RecordCount(&lRecords)))
        return hr;
    if (lRecords <= 0)
        return E_FAIL;
    pRecordset->MoveFirst();
    VARIANT_BOOL vtRecordsEof;
    pRecordset->get_bEOF(&vtRecordsEof);
    while (!vtRecordsEof)
    {
        // get record bookmark
        VARIANT vtBookmark;
        if (FAILED(hr = pRecordset->get_Bookmark(&vtBookmark)))
            break;
        CXTPReportRecord* pRecord = pRecords->FindRecordByBookmark(vtBookmark, TRUE);
        if (pRecord)
        {
            // get field values
            VARIANT vtIdx;
            vtIdx.vt = VT_I4;
            for (int i = 0; i < lFields; i++)
            {
                vtIdx.lVal = i;
                XTPREPORTADODB::FieldPtr pField;
                if (FAILED(hr = pFields->get_Item(vtIdx, &pField)) || pField == NULL)
                    break;
                VARIANT vtValue;
                if (FAILED(hr = pField->get_Value(&vtValue)))
                    break;
                CXTPReportRecordItemVariant* pItem = (CXTPReportRecordItemVariant*)pRecord->GetItem(i);
                if (!pItem)
                    break;
                pItem->SetValue(COleVariant(vtValue));
            }

            m_pReportControl->UpdateRecord(pRecord, TRUE);
        }
        else if(addNewItems)
        {
            // create record
            CXTPReportRecord* pRecord = new CXTPReportRecord;
            if (!pRecord)
                break;
            // get field values
            VARIANT vtIdx;
            vtIdx.vt = VT_I4;
            for (int i = 0; i < lFields; i++)
            {
                vtIdx.lVal = i;
                XTPREPORTADODB::FieldPtr pField;
                if (FAILED(hr = pFields->get_Item(vtIdx, &pField)) || pField == NULL)
                    break;
                VARIANT vtValue;
                if (FAILED(hr = pField->get_Value(&vtValue)))
                    break;
                CXTPReportRecordItemVariant* pItem = new CXTPReportRecordItemVariant(vtValue);
                if (!pItem)
                    break;
                pRecord->AddItem(pItem);
            }
            // bind report record to data source record by bookmark
            VARIANT vtBookmark;
            if (FAILED(hr = pRecordset->get_Bookmark(&vtBookmark)))
                break;
            pRecord->SetBookmark(vtBookmark);
            // add record to report records collection
            m_pReportControl->AddRecordEx(pRecord);
        }
        pRecordset->MoveNext();
        pRecordset->get_bEOF(&vtRecordsEof);
    }
    }
    catch(_com_error &e)
    {
        TRACE_ProviderError(m_pConnection);
        TRACE_ComError(e);
        hr = FAILED(hr) ? hr : E_FAIL;
    }
    catch(...)
    {
        TRACE(_T("Unknown error in UpdateReportRecords()\n"));
        hr = FAILED(hr) ? hr : E_FAIL;
    }

    return FAILED(hr) ? hr : S_OK;
}

Back to Top
 Post Reply Post Reply
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 12.04
Copyright ©2001-2021 Web Wiz Ltd.

This page was generated in 0.156 seconds.