Скачиваний:
68
Добавлен:
01.05.2014
Размер:
1.99 Кб
Скачать
#include "StdAfx.h"
#include ".\tonetable.h"

#include "tonedatabase.h"
#include "sqlfilter.h"
#include "tonerow.h"
#include "afxdb.h"

CTOneTable::CTOneTable(void): CRecordset((CDatabase*)(&(CTOneDataBase::Instance())))
{
	m_iID = 0;
}

CTOneTable::~CTOneTable(void)
{
}

CString& CTOneTable::TableName()
{
	return m_TableName;
}

bool CTOneTable::AddEntity(CMapStringToPtr &values)
{
	bool result = true;
	
	this->Open(CRecordset::snapshot, TableName());
	
	if(this->CanAppend() && this->CanUpdate())
	{
		CString message = OnAddCheck(values);

		if(message != "")
		{
			AfxMessageBox(message, MB_OK | MB_ICONSTOP);
			result = false;
		}
		else
		{
			this->AddNew();
			OnAddFill(values);
			this->Update();
		}
	}

	this->Close();

	return result;
}

CString CTOneTable::GetListSql()
{
	CString sql = "select * from ";
	sql += TableName();
	sql += " ";

	return sql;
}

bool CTOneTable::List(CListObjectPtr &obj, CListObjectPtr &filters)
{
	obj.RemoveAll();

	bool result = true;

	CString sql = GetListSql();

	bool bAddWhere = true;

	CString id_name = TableName().MakeLower();
	id_name += "_id";

	if(!filters.IsEmpty())
	{
		void *ptr = NULL;
		
		for(POSITION position = filters.GetHeadPosition(); position != NULL; ptr = filters.GetNext(position))
		{
			if(bAddWhere)
			{
				sql += " where ";			
			}

			if(bAddWhere)
			{
				bAddWhere = false;			
			}
			else		
			{
				sql += " and ";
			}

			CSqlFilter *filter = (CSqlFilter*)ptr;

			sql += filter->Sql();
		}
	}

	this->Open(CRecordset::snapshot, sql);

	int iRecordCount = this->GetRecordCount();
		
	if(iRecordCount != 0)
	{
		do
		{
			CTOneRow *row = (CTOneRow*)GetFilledObject();
			CDBVariant value;
			GetFieldValue(id_name, value, SQL_C_SLONG);
			//row->m_iID = value.;			
			obj.AddTail(row);
			this->MoveNext();
		}
		while( !this->IsEOF() );
	}

	this->Close();

	return result;
}
Соседние файлы в папке TheOne