#include "StdAfx.h"
#include "SQLStatementImpl.h"

CSQLStatementImpl::CSQLStatementImpl()
{
	m_nCount = 0;
	m_nSzie = 0;
	m_nStatementKind = 0;
}

CSQLStatementImpl::~CSQLStatementImpl( )
{
}

void CSQLStatementImpl::AddElement(LPCTSTR lpField,LPCTSTR lpValue)
{
	if ( m_nSzie == 0)
	{
		AfxMessageBox(_T("�ֶ�����δ����"));
		return;
	}

 	m_nCount++;
	m_saFields.Add(lpField);
	m_saValues.Add(lpValue);
}

void CSQLStatementImpl::AddElement(LPCTSTR lpField, CONST INT &nValue)
{
	if (m_nSzie == 0)
	{
		AfxMessageBox(_T("�ֶ�����δ����"));
		return;
	}

	m_nCount++;
	m_saFields.Add(lpField);

	TCHAR szValue[20] = _T("");
	_itot_s(nValue, szValue, 10);
	m_saValues.Add(szValue);
}

CString CSQLStatementImpl::ReturnSQL()
{
	// �ͷ�CArray������Ԥ�����ڴ�;
	m_saFields.FreeExtra();
	m_saValues.FreeExtra();

	int i = 0;
	if (m_nStatementKind == KIND_INSERT)
	{
		m_strSQL.Format(_T("insert into %s ("), (LPCTSTR)m_strTableName);
		for ( i = 0; i < m_nCount-1; i++)
		{
			m_strSQL += m_saFields.ElementAt(i) + _T(",");
		}

		m_strSQL += m_saFields.ElementAt(m_nCount-1) + _T(") values ('");

		for ( i = 0; i < m_nCount-1; i++)
		{
			m_strSQL += m_saValues.ElementAt(i) + _T("','");
		}

		m_strSQL += m_saValues.ElementAt(m_nCount-1) + _T("') ");
		m_strSQL += m_strFilter;
	}
	else if( m_nStatementKind == KIND_UPDATE)
	{
		m_strSQL.Format(_T("update %s set "), (LPCTSTR)m_strTableName);
		for ( i = 0; i < m_nCount-1; i++)
		{
			m_strSQL += m_saFields.ElementAt(i) + _T("='") + m_saValues.ElementAt(i)+ _T("',");
		}

		m_strSQL += m_saFields.ElementAt(m_nCount-1) + _T("='") + m_saValues.ElementAt(m_nCount-1)+ _T("' ");
		m_strSQL += m_strFilter;
	}
	else if ( m_nStatementKind == SELECT_LKIE_OR)
	{
		m_strSQL.Format(_T("select * from %s where "), (LPCTSTR)m_strTableName);
		for( i = 0; i < m_nCount -1; i++)
		{
			m_strSQL += m_saFields.ElementAt(i) + _T(" like '%s") + m_saValues.ElementAt(i) + _T("%' or ");
		}

		m_strSQL += m_saFields.ElementAt(i) + _T(" like '%s") + m_saValues.ElementAt(i) + _T("%s'");
	}

	return m_strSQL;
}

void CSQLStatementImpl::ReturnSQL(CString &strSQL)
{
	// �ͷ�CArray������Ԥ�����ڴ�;
	m_saFields.FreeExtra();
	m_saValues.FreeExtra();

	int i = 0;
	if (m_nStatementKind == KIND_INSERT)
	{
		strSQL.Format(_T("insert into %s ("), (LPCTSTR)m_strTableName);
		for (i = 0; i < m_nCount - 1; i++)
		{
			strSQL += m_saFields.ElementAt(i) + _T(",");
		}

		strSQL += m_saFields.ElementAt(m_nCount - 1) + _T(") values ('");

		for (i = 0; i < m_nCount - 1; i++)
		{
			strSQL += m_saValues.ElementAt(i) + _T("','");
		}

		strSQL += m_saValues.ElementAt(m_nCount - 1) + _T("') ");
		strSQL += m_strFilter;
	}
	else if( m_nStatementKind == KIND_UPDATE)
	{
		strSQL.Format(_T("update %s set "), (LPCTSTR)m_strTableName);
		for (i = 0; i < m_nCount - 1; i++)
		{
			strSQL += m_saFields.ElementAt(i) + _T("='") + m_saValues.ElementAt(i) + _T("',");
		}

		strSQL += m_saFields.ElementAt(m_nCount - 1) + _T("='") + m_saValues.ElementAt(m_nCount - 1) + _T("' ");
		strSQL += m_strFilter;
	}
	else if ( m_nStatementKind == SELECT_LKIE_OR)
	{
		strSQL.Format(_T("select * from %s where "), (LPCTSTR)m_strTableName);
		for( i = 0; i < m_nCount -1; i++)
		{
			strSQL += m_saFields.ElementAt(i) + _T(" like '%s") + m_saValues.ElementAt(i) + _T("%' or ");
		}

		strSQL += m_saFields.ElementAt(i) + _T(" like '%s") + m_saValues.ElementAt(i) + _T("%'");
	}

}