Exemplo n.º 1
0
long Cx_CfgRecord::SubmitRecord()
{
    if (m_arrValue.empty())
        return 0;

    std::vector<FieldValue> arrValue(m_arrValue);
    std::wostringstream sql, ssField, ssValues;

    m_arrValue.clear();

    if (m_bAdd)
    {
        ASSERT(DbFunc::IsDBName(m_wstrSQL.c_str()));

        sql << L"INSERT INTO " << m_wstrSQL << L" (";
        ssValues << L") VALUES (";
    }
    else
    {
        ASSERT(StrStrIW(m_wstrSQL.c_str(), L"SELECT ") == m_wstrSQL.c_str());

        const wchar_t* pszFrom = StrStrIW(m_wstrSQL.c_str(), L"FROM ");
        ASSERT_MESSAGE(pszFrom != NULL, "The SQL command must contains 'FROM' keyword.");

        std::wstring table(DbFunc::GetLevel1Name(pszFrom + 5));
        sql << L"UPDATE " << table;
        ssValues << L" SET ";
    }

    std::vector<FieldValue>::iterator it = arrValue.begin();
    for (long i = 0; it != arrValue.end(); ++it, ++i)
    {
        std::wstring wstrField(it->first);
        std::wstring wstrValue(it->second);
        ASSERT(!wstrValue.empty());

        if (StrCmpW(L"@NEWID", wstrValue.c_str()) == 0)
        {
            ASSERT(m_bAdd);

            m_wstrKeyField = wstrField;
            m_nKeyNewID = 0;
            if (!m_pDB->GetRecordNewID(m_nKeyNewID, m_wstrSQL, wstrField))
            {
                return 0;
            }

            wchar_t szNum[35];
            _ltow_s(m_nKeyNewID, szNum, _countof(szNum), 10);
            wstrValue = szNum;
        }
        else if (L'@' == wstrValue[0])
        {
            wstrValue = GetSQLFunc(wstrValue.c_str() + 1, m_pDB->GetSQLParser());
        }

        if (i > 0)
        {
            ssField << L",";
            ssValues << L",";
        }
        if (m_bAdd)
        {
            ssField << wstrField;
            ssValues << wstrValue;
        }
        else
        {
            ssValues << wstrField << L"=" << wstrValue;
        }
    }

    if (m_bAdd)
    {
        sql << ssField.str() << ssValues.str() << L") ";
    }
    else
    {
        sql << ssValues.str();

        const wchar_t* pszWhere = StrStrIW(m_wstrSQL.c_str(), L" WHERE");
        if (pszWhere != NULL)
        {
            sql << pszWhere;
        }
    }

    bool bRet = false;
    long nAffected = 0;

    try
    {
        bRet = (m_pDB->ExecuteSQL(sql.str().c_str(), __FILE__, __LINE__) != NULL);
        nAffected = m_pDB->GetRecordsAffected();
    }
    CATCH_DB_STR_ERROR;

    return nAffected;
}
Exemplo n.º 2
0
BOOL CCxStructTreeUpdateParamsData::Parse( LPCTSTR lpszData, CCxStructTree * pTree )
{
    Clear();
    CString strSrc = lpszData == NULL ? "" : lpszData;
    if (strSrc.IsEmpty()) return FALSE;
    CString str;

    Json::Reader reader;
    Json::Value obj( Json::objectValue ), arrValue( Json::arrayValue );
    //CCxStructTreeRunResultParam * pValue = NULL;
    CCxStructTreeNode * pNode = NULL;
    CCxStructTreeNodeGroup * pGroupNode = NULL;
    CCxStructTreeNodeParam * pParamNode = NULL;
    CCxStructTreeUpdateParamsOperatorData * pOperatorData = NULL;

    try
    {
        if (!reader.parse((char*)(LPCTSTR)strSrc, obj, false)) return FALSE;
        if (!obj.isObject()) return FALSE;

        //m_strFlowNodeId = ( obj["flowId"].isString()) ? obj["flowId"].asCString() : _T("");
        //str = ( obj["startIndex"].isString()) ? obj["startIndex"].asCString() : _T("");
        //if ( !str.IsEmpty() )
        //{
        //	m_nStartIndex = strtol( (char*)(LPCTSTR)str, NULL, 10 );
        //}

        if ( !obj["groupList"].isNull() && obj["groupList"].isArray() )
        {
            arrValue = obj["groupList"];

            if ( pTree != NULL )
            {
                pTree->m_bNodeParseing = TRUE;
                pTree->m_mapParseNodeCache.clear();
            }

            for ( Json::Value::iterator itr = arrValue.begin(); itr != arrValue.end(); ++itr)
            {
                str = ( (*itr)["nodeType"].isString() ) ? (*itr)["nodeType"].asCString() : _T("");
                int nNodeType = CCxStructTreeNode::ConvertNodeType( (LPCTSTR)str );
                pNode = CCxStructTreeNode::GetNewNodeByType( nNodeType, pTree );
                if ( pNode == NULL )
                {
                    Clear();
                    if ( pTree != NULL )
                    {
                        pTree->m_bNodeParseing = FALSE;
                        pTree->m_mapParseNodeCache.clear();
                    }
                    return FALSE;
                }

                if ( !pNode->Parse( *itr/*reinterpret_cast< LPVOID > ( (Json::Value *)& (*itr) )*/
                                    , pNode, nNodeType, NULL ) )
                {
                    delete pNode;
                    pNode = NULL;
                    Clear();
                    if ( pTree != NULL )
                    {
                        pTree->m_bNodeParseing = FALSE;
                        pTree->m_mapParseNodeCache.clear();
                    }
                    return FALSE;
                }

                if ( !pNode->IsGroupNode() )
                {
                    delete pNode;
                    pNode = NULL;
                    Clear();
                    if ( pTree != NULL )
                    {
                        pTree->m_bNodeParseing = FALSE;
                        pTree->m_mapParseNodeCache.clear();
                    }
                    return FALSE;
                }
                pGroupNode = (CCxStructTreeNodeGroup *)pNode;
                m_vGroups.push_back( pGroupNode );
            }
        }

        for ( int i=0; i<(int)m_vGroups.size(); i++ )
        {
            m_mapGroupNode.insert( make_pair( m_vGroups[i]->m_strID, m_vGroups[i] ) );
        }

        if ( !obj["paramList"].isNull() && obj["paramList"].isArray() )
        {
            arrValue = obj["paramList"];

            if ( pTree != NULL )
            {
                pTree->m_bNodeParseing = TRUE;
                pTree->m_mapParseNodeCache.clear();
            }

            for ( Json::Value::iterator itr = arrValue.begin(); itr != arrValue.end(); ++itr)
            {
                str = ( (*itr)["nodeType"].isString() ) ? (*itr)["nodeType"].asCString() : _T("");
                int nNodeType = CCxStructTreeNode::ConvertNodeType( (LPCTSTR)str );
                pNode = CCxStructTreeNode::GetNewNodeByType( nNodeType, pTree );
                if ( pNode == NULL )
                {
                    Clear();
                    if ( pTree != NULL )
                    {
                        pTree->m_bNodeParseing = FALSE;
                        pTree->m_mapParseNodeCache.clear();
                    }
                    return FALSE;
                }

                if ( !pNode->Parse( *itr/*reinterpret_cast< LPVOID > ( (Json::Value *)& (*itr) )*/
                                    , pNode, nNodeType, NULL ) )
                {
                    delete pNode;
                    pNode = NULL;
                    Clear();
                    if ( pTree != NULL )
                    {
                        pTree->m_bNodeParseing = FALSE;
                        pTree->m_mapParseNodeCache.clear();
                    }
                    return FALSE;
                }

                if ( !pNode->IsParamNode() )
                {
                    delete pNode;
                    pNode = NULL;
                    Clear();
                    if ( pTree != NULL )
                    {
                        pTree->m_bNodeParseing = FALSE;
                        pTree->m_mapParseNodeCache.clear();
                    }
                    return FALSE;
                }
                pParamNode = (CCxStructTreeNodeParam *)pNode;
                m_vParams.push_back( pParamNode );
            }
        }

        for ( int i=0; i<(int)m_vParams.size(); i++ )
        {
            m_mapParamNode.insert( make_pair( m_vParams[i]->m_strID, m_vParams[i] ) );
        }

        if ( !obj["operateList"].isNull() && obj["operateList"].isArray() )
        {
            arrValue = obj["operateList"];

            for ( Json::Value::iterator itr = arrValue.begin(); itr != arrValue.end(); ++itr)
            {
                pOperatorData = new CCxStructTreeUpdateParamsOperatorData();
                pOperatorData->m_strId = ( (*itr)["id"].isString() ) ? (*itr)["id"].asCString() : _T("");
                pOperatorData->m_strFlag = ( (*itr)["flag"].isString() ) ? (*itr)["flag"].asCString() : _T("");
                m_vOperators.push_back( pOperatorData );
            }
        }

        if ( pTree != NULL )
        {
            pTree->m_bNodeParseing = FALSE;
            pTree->m_mapParseNodeCache.clear();
        }
    }
    catch (...)
    {
        Clear();
        if ( pTree != NULL )
        {
            pTree->m_bNodeParseing = FALSE;
            pTree->m_mapParseNodeCache.clear();
        }
        return FALSE;
    }

    return TRUE;
}