Example #1
0
/**
 * Metodo para montar a lista de labels=valores para uso no
 * no update, note bAllFields, permite levar os null's na query
 */
CString CTableBase::BuildFieldValueList(BOOL bAllFields, BOOL bNoKeyInSet)
{
	CString s;
	POSITION pos = m_mapFields.GetStartPosition();
	CString sKey;
	CField *pClass;
	int counter = 0;
	BOOL usefull = FALSE;

	///Ll## STLOG_WRITE("Inicio CTableBase::BuildFieldValueList()");

	while(pos != NULL)
	{
		m_mapFields.GetNextAssoc( pos, sKey, pClass );

		// Naoadicionar as chaves no set xxxx='xxxx'
		if(pClass->IsKey() && bNoKeyInSet)
			continue;

		if(!bAllFields) // Skipar os nulos !
		{
			if(!pClass->IsNull())
			{
				if(counter++ > 0)
					s += _T(",\r\n");

				usefull = TRUE;

				//if(sKey.Find(' ') > 0)
				s += _T("[") + sKey + _T("]=");
				//else
				//	s += sKey + _T("=");
				
				s += pClass->GetQueryFormatValue();
			}
		}
		else // fazer assign mesmo dos nulos / nao preenchidos !!!
		{
			usefull = TRUE;

			if(counter++ > 0)
				s += _T(",\r\n");

			//if(sKey.Find(' ') > 0)
			s += _T("[") + sKey + _T("]=");
			//else
			//	s += sKey + _T("=");

			if(!pClass->IsNull())
				s += pClass->GetQueryFormatValue();
			else
				s += _T("NULL");
		}
	}

	//STLOG_WRITE(L"CTableBase::BuildFieldValueList: CAMPOS/VALORES: %s", s);

	return s;
}
Example #2
0
CString CTableBase::GetValueList(BOOL bUseNULL, BOOL bExport)
{
	CString s = _T("");

	// Recuperar a lista de campos pela ordenacao de
	// importacao/Exportacao
	POSITION p = m_fieldOrdered.GetHeadPosition();
	CField *pField = NULL;
	int counter = 0;

	while(p != NULL)
	{
		CString sKey = m_fieldOrdered.GetNext(p);
		VERIFY(m_mapFields.Lookup(sKey, pField));

		if(counter++ > 0)
			s += _T(",");

		if(!pField->IsNull())
			s += pField->GetQueryFormatValue();
		else
		{
			// Se puder usar NULL ...
			if(bUseNULL)
				s += _T("NULL");
			else
			{
				if(bExport)
				{
					if(pField->GetType() == CField::FIELD_TYPE_CURRENCY)
						s += _T("");
					else if(pField->GetType() == CField::FIELD_TYPE_NUMBER)
						s += _T("");
					else
						s += _T("\"\"");
				}
				else
				{
					// Caso contrario, mandamos Zero para os numericos ...
					if(pField->GetType() == CField::FIELD_TYPE_CURRENCY ||
						pField->GetType() == CField::FIELD_TYPE_NUMBER)
					{
						s += _T("");
					}
					else // e vazio para os outros ...
						s += _T("");
				}
			}
		}
	}

	s += _T("\r\n");

	return s;
}
Example #3
0
/*
	PasteCol 表名 源列名称 目标列名称
 */
bool TCManager::PasteCol(TCPacket &inP,AnaWord &aw, TCPacket &outP)
{
	if (aw.GetWordCount() !=4)
		return SetResultState(false,outP,GetLanguage(FormatIsError)); 

	int nUserID = GetUserID(inP);
	if (nUserID==0)
		return SetResultState(false,outP,GetLanguage(UserIDIsNotFound));
	
	string sTableName = aw.GetAt(1);
	string sSrcName  = aw.GetAt(2);
	string sDstName  = aw.GetAt(3);
	CDataInterface *pDI = g_system.GetCurData(nUserID,aw.GetAt(1));
	if (pDI == NULL)
		return SetResultState(false,outP,GetLanguage(UserTableIsNotFound));
	CField *pSrcField = pDI->FieldByName(sSrcName.c_str());
	if (pSrcField == NULL)
		return SetResultState(false,outP,GetLanguage(FieldNameNotFind)); 
	CFieldType ft = pSrcField->GetFieldType();
	CField *pDstField = pDI->FieldByName(sDstName.c_str());
	if (pDstField == NULL)
	{
		pDstField = pDI->m_DataAccess.m_pFieldList->CreateField(ft);
		pDstField->SetFieldName(sDstName);
		pDstField->SetWidth(pSrcField->GetWidth());
		pDI->m_DataAccess.m_pFieldList->Add(pDstField);
	}
	pDI->m_DataAccess.First();
	while (!pDI->m_DataAccess.Eof())
	{
		pDI->m_DataAccess.Edit();
		if (pSrcField->IsNull())
		{
			pDstField->SetNull();
		}
		else
		{
			if (ft == fDouble)
				pDstField->SetAsDouble(pSrcField->GetAsDouble());
			else if (ft == fInt)
				pDstField->SetAsInteger(pSrcField->GetAsInteger());
			else if (ft == fBoolean)
				pDstField->SetAsBool(pSrcField->GetAsBool());
			else if (ft == fString)
				pDstField->SetAsString(pSrcField->GetAsString());
			else
				pDstField->SetAsDateTime(&pSrcField->GetAsDateTime());
		}
		pDI->m_DataAccess.Next();
	}
	return SetResultState(true,outP);
}
Example #4
0
/**
 * Metodo para montar a lista de valores separados por 
 * virgula, tipico nos valores de uma query de insert 
 */
CString CTableBase::BuildValueList()
{
	CString s;
	POSITION pos = m_mapFields.GetStartPosition();
	CString sKey;
	CField *pClass;
	int counter = 0;

	while(pos != NULL)
	{
		m_mapFields.GetNextAssoc( pos, sKey, pClass );	

		if(counter++ > 0)
			s += _T(",\r\n");

		if(!pClass->IsNull())
			s += pClass->GetQueryFormatValue();
		else
			s += _T("NULL");		
	}

	return s;
}
Example #5
0
/**
 * Metodo para montar a lista de label=valor para uso no
 * where clause da query
 */ 
CString CTableBase::BuildWhereList(BOOL bOnlyKeys, BOOL bIgnoreNULL)
{
	CString s(_T("WHERE "));
	POSITION pos = m_mapFields.GetStartPosition();
	CString sKey;
	CField *pClass;
	int counter = 0;
	BOOL usefull = FALSE;

	while(pos != NULL)
	{
		m_mapFields.GetNextAssoc( pos, sKey, pClass );

		// Se o campo estiver na lista de ignore... nao usar ...
		if(m_ignoreFields.Find(sKey) != NULL)
			continue;

		// Se nao for chave ...
		if(bOnlyKeys && !pClass->IsKey())
			continue;

		if(!pClass->IsNull())
		{
			usefull = TRUE;

			CString s1 = pClass->GetQueryFormatValue();

			if(s1.CompareNoCase(_T("NULL")) == 0 || 
			   s1.CompareNoCase(_T("\"NULL\"")) == 0 )
			{
				if(!bIgnoreNULL)
				{
					if(counter++ > 0)
						s += _T("\r\n AND ");

					s += _T("[") + sKey + _T("] IS NULL");
				}
			}
			else
			{
				if(counter++ > 0)
					s += _T("\r\n AND ");

				//if(sKey.Find(' ') > 0)
				s += _T("[") + sKey + _T("]=");
				//else
				//	s += sKey + _T("=");
				
				s += s1;
			}
		}
		else
		{
			if(!bIgnoreNULL)
			{
				if(counter++ > 0)
					s += _T("\r\n AND ");

				s += _T("[") + sKey + _T("] IS NULL");
			}
		}
	}

	if(!usefull)
		return _T("");

	return s;
}