configinfo.cpp

来自「数据库开发」· C++ 代码 · 共 447 行

CPP
447
字号
#include "stdafx.h"
#include "ConfigInfo.h"
#include "DataBind.h"
#include "SQLExec.h"
#include "..\reg\registry.h"


CConfigInfo::CConfigInfo()
{
	m_dtToday = CTime::GetCurrentTime();
	m_nYear = m_dtToday.GetYear();
	m_nMonth = m_dtToday.GetMonth();
}

CConfigInfo::~CConfigInfo()
{
	ExitInstance();
}

BOOL CConfigInfo::ADOExec(_RecordsetPtr &ADOSet, _variant_t &strSQL)
{
	if ( ADOSet->State == adStateOpen)	ADOSet->Close();
	try
	{
       	ADOSet->Open(strSQL, m_ADOConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdUnknown);
	    return TRUE;
	}
	catch(_com_error &e)
	{
       CString err;
	   err.Format("ADO Error: %s",(char*)e.Description());
	   AfxMessageBox(err);
	   return FALSE;
	}
}

BOOL CConfigInfo::InitInstance()
{
	// Init Login Count
//	m_nLoginCount = 0;
	CString sz;
	sz = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = ";
	sz = sz + m_sPath + "\\AirMonitor.mdb";
	sz = sz + " ;Persist Security Info=False";
	m_bstrFileDSN = _T(sz);

	// 创建ADO连接对象
	if( FAILED(::CoInitialize(NULL)) ) 
	{
	    AfxMessageBox("ADO Init failed");
		return FALSE;
	}
	try
	{
		m_ADOConn.CreateInstance(__uuidof(Connection));
		m_ADOConn->ConnectionString = m_bstrFileDSN;	
		m_ADOConn->Open(m_bstrFileDSN,"","", adConnectUnspecified);
	}
	// 捕捉例外
	catch(_com_error &e)
	{
		CString err;
		err.Format("%s", (char*)(e.Description()) );
		AfxMessageBox(err);
		return FALSE;
	}
	catch(...)
	{
		AfxMessageBox("Unknown Error...");
		return FALSE;
	}
	
	// 初始化ADO记录集
	m_pADOSet.CreateInstance(__uuidof(Recordset));	
	InitDateFromDB();
	return TRUE;
}

BOOL CConfigInfo::ExitInstance()
{
	//释放ADO连接对象 
	if( adStateOpen == m_ADOConn->State )	m_ADOConn->Close();
	m_ADOConn.Release();
    
	// 释放ADO记录集
	if(adStateOpen==m_pADOSet->State)	m_pADOSet->Close();
	m_pADOSet.Release();

	return TRUE;
}

CSampleData::CSampleData()
{
	m_nCount = 0;
	m_nCache1 = 0;
	m_nCache2 = 0;
	memset(m_nTime, 0, POINT_PER_DAY * sizeof(int));	//保存记录对应时间点(分钟序号以及有效库存项目数)
	for(int i = 0; i < MAX_CHANNEL1_NUM + MAX_CHANNEL2_NUM; i++)
		memset(m_fData[i], 0, POINT_PER_DAY * sizeof(float));	//每分钟采集一个点
	for(i = 0; i < MAX_CHANNEL1_NUM; i++)
		memset(m_fCache1[i], 0, MAX_SAMPLE_CACHE1 * sizeof(float));	
	
	for(i = 0; i < MAX_CHANNEL2_NUM; i++)
		memset(m_fCache2[i], 0, MAX_SAMPLE_CACHE2 * sizeof(float));	
	
}
CSampleData::~CSampleData()
{
}

BOOL CSampleData::GetCurData1(float* fData)
{
	if(m_nCache1 == 0)
	{
		if(m_nCount == 0)
		{
			memset(fData, 0, MAX_CHANNEL1_NUM * sizeof(float)); 
			return FALSE;
		}else{
			for(int i = 0; i < MAX_CHANNEL1_NUM; i++)
				fData[i] = m_fData[i][m_nCount - 1];
			return TRUE;
		}		
	}
	for(int i = 0; i < MAX_CHANNEL1_NUM; i++)
		fData[i] = m_fCache1[i][m_nCache1 - 1];
	return TRUE;
}

BOOL CSampleData::GetCurData2(float* fData)
{
	if(m_nCache2 == 0)
	{
		if(m_nCount == 0)
		{
			memset(fData, 0, MAX_CHANNEL2_NUM * sizeof(float)); 
			return FALSE;
		}else{
			for(int i = 0; i < MAX_CHANNEL2_NUM; i++)
				fData[i] = m_fData[MAX_CHANNEL1_NUM + i][m_nCount - 1];
			return TRUE;
		}		
	}
	for(int i = 0; i < MAX_CHANNEL2_NUM; i++)
		fData[i] = m_fCache2[i][m_nCache2 - 1];
	return TRUE;
}

int	CSampleData::UpdateSample(int nMinPerDay)
{
	if((m_nCache1 == 0) ||(m_nCache2 == 0))
		return 0;
	m_nTime[m_nCount] = nMinPerDay;
	for(int i = 0; i < MAX_CHANNEL1_NUM; i++)
	{
		m_fData[i][m_nCount] = 0;
		for(int j = 0; j < m_nCache1; j++)
			m_fData[i][m_nCount] = m_fData[i][m_nCount] + m_fCache1[i][j];
		m_fData[i][m_nCount] = m_fData[i][m_nCount] / m_nCache1;
	}
	for(i = 0; i < MAX_CHANNEL2_NUM; i++)
	{
		m_fData[MAX_CHANNEL1_NUM + i][m_nCount] = 0;
		for(int j = 0; j < m_nCache2; j++)
			m_fData[MAX_CHANNEL1_NUM + i][m_nCount] = m_fData[MAX_CHANNEL1_NUM + i][m_nCount] + m_fCache2[i][j];
		m_fData[MAX_CHANNEL1_NUM + i][m_nCount] = m_fData[MAX_CHANNEL1_NUM + i][m_nCount] / m_nCache2;
	}
	m_nCount++;
	return m_nCount;
}

void	CSampleData::ClearCache(int nType)
{
	if(nType == 1)
		m_nCache1 = 0;
	if(nType == 2)
		m_nCache2 = 0;
}

void CSampleData::NewData1Coming(float* fNewData, CChannelInfo* pChanConfig)
{
	for(int i = 0; i < MAX_CHANNEL1_NUM; i++)
		m_bOverWarn[i] = pChanConfig->SjToLl(i + 1, fNewData[i], m_fCache1[i][m_nCache1]);

	m_nCache1++;
	if(m_nCache1 >= MAX_SAMPLE_CACHE1)
		m_nCache1 = 0;
	return;
}

void CSampleData::NewData2Coming(float* fNewData, CChannelInfo* pChanConfig)
{
	for(int i = 0; i < MAX_CHANNEL2_NUM; i++)
		m_bOverWarn[i + MAX_CHANNEL1_NUM] = pChanConfig->SjToLl(i + 1 + MAX_CHANNEL1_NUM, fNewData[i], m_fCache2[i + MAX_CHANNEL1_NUM][m_nCache2]);
		//m_fCache2[i + MAX_CHANNEL1_NUM][m_nCache2] = fNewData[i];

	m_nCache2++;
	if(m_nCache2 >= MAX_SAMPLE_CACHE2)
		m_nCache2 = 0;
	return;
}
BOOL CSampleData::LoadFrom10SecDB()
{
	return TRUE;
}

BOOL CSampleData::SaveTo10SecDB()
{
	return TRUE;
}

BOOL CSampleData::LoadFromMinDB()
{
	return TRUE;
}

BOOL CSampleData::SaveToMinDB()
{
	return TRUE;
}

BOOL CSampleData::LoadFrom5MinDB()
{
	return TRUE;
}
BOOL CSampleData::SaveTo5MinDB()
{
	return TRUE;
}
BOOL CSampleData::LoadFrom15MinDB()
{
	return TRUE;
}
BOOL CSampleData::SaveTo15MinDB()
{
	return TRUE;
}
BOOL CSampleData::LoadFromDayDB()
{
	return TRUE;
}
BOOL CSampleData::SaveToDayDB()
{
	return TRUE;
}

BOOL CConfigInfo::InitDateFromDB()
{
	_RecordsetPtr pRst = NULL;
	try
	{
		CString strsql;
		_bstr_t strSQL;
		
		pRst.CreateInstance(__uuidof(Recordset));
		IADORecordBindingPtr   picRs(pRst);
		
		//DBPlace
		strsql.Format("SELECT * FROM ComDevice");	
		strSQL = strsql;

		CDBDevice rs;
		ADOExec(pRst, _variant_t(strSQL));
		TESTHR(picRs->BindToRecordset(&rs));
		
		int i;
		//adam4117
		m_Adam4117.m_nID = rs.m_nID;
		m_Adam4117.m_nBt = rs.m_nBt;
		m_Adam4117.m_sCom.Format("%s", rs.m_sCom);
		m_Adam4117.m_nMaxSec = rs.m_nMaxSec;
		for(i = 0; i < 10; i++)
			m_Adam4117.m_sCommand[i].Format("%s", rs.m_sCommand[i]); 
		pRst->MoveNext();
		
		//CCD
		m_CCD.m_nID = rs.m_nID;
		m_CCD.m_nBt = rs.m_nBt;
		m_CCD.m_sCom.Format("%s", rs.m_sCom);
		m_CCD.m_nMaxSec = rs.m_nMaxSec;
		for(i = 0; i < 10; i++)
			m_CCD.m_sCommand[i].Format("%s", rs.m_sCommand[i]); 
		pRst->MoveNext();

		//CMotor
		m_Motor.m_nID = rs.m_nID;
		m_Motor.m_nBt = rs.m_nBt;
		m_Motor.m_sCom.Format("%s", rs.m_sCom);
		m_Motor.m_nMaxSec = rs.m_nMaxSec;
		for(i = 0; i < 10; i++)
			m_Motor.m_sCommand[i].Format("%s", rs.m_sCommand[i]); 
		pRst->MoveNext();

		//CGprs
		m_Gprs.m_nID = rs.m_nID;
		m_Gprs.m_nBt = rs.m_nBt;
		m_Gprs.m_sCom.Format("%s", rs.m_sCom);
		m_Gprs.m_nMaxSec = rs.m_nMaxSec;
		for(i = 0; i < 10; i++)
			m_Gprs.m_sCommand[i].Format("%s", rs.m_sCommand[i]); 
		
		pRst->Close();
		return TRUE;
	}
	catch(_com_error& e)
	{
		AfxMessageBox(e.ErrorMessage());
		PrintComError(e);
		return FALSE;
    } 
}

void CConfigInfo::SaveEventLogToDB(CString sTime, CString sEvent)
{
	//sunset interface: 将m_Var[]中数据保存至数据库中
	CString sUser, sTable;
	sTable.Format("%sEventLog", m_dtToday.Format("%Y%m%d"));
	CheckToSureTableExist(sTable, "TemplateLog");
	sUser = m_User.m_sUserName;
	CString sql;
	sql.Format("INSERT INTO "+sTable+" (sTime, sEvent, sUser)\
	values ('"+sTime+"', '"+sEvent+"', '"+sUser+"') ");
	ExecSQL(sql);
}

void CConfigInfo::SaveWarnLogToDB(CString sTime, CString sWarn)
{
	//sunset interface: 将m_Var[]中数据保存至数据库中
	CString sUser, sTable;
	sUser = m_User.m_sUserName;//_T("默认");
	sTable.Format("%sWarnLog", m_dtToday.Format("%Y%m%d"));
	CheckToSureTableExist(sTable, "TemplateLog");
	CString sql;
	sql.Format("INSERT INTO "+sTable+" (sTime, sWarn, sUser)\
	values ('"+sTime+"', '"+sWarn+"', '"+sUser+"') ");
	ExecSQL(sql);
}

void CConfigInfo::SaveSampleDataToDB()
{
//sunset interface: 将m_Var[]中数据保存至数据库中
/*	CString sTime, sVal[24];
	CTime dt = CTime::GetCurrentTime();
	sTime = dt.Format("%H:%M:%S");
	for(int i = 0; i < 24; i++)
	{
		if((m_Var[i].nType == 1) ||
			(m_Var[i].nType == 2))
			sVal[i].Format(_T("%.2f"), m_Var[i].fVal);
		if((m_Var[i].nType == 3) ||
			(m_Var[i].nType == 4)){
			if(m_Var[i].bVal)
				sVal[i] = _T("1");
			else
				sVal[i] = _T("0");
		}
	}

	CString sql;
	sql.Format("INSERT INTO SampleData(sTime, Var01, Var02, Var03, Var04,\
	Var05, Var06, Var07, Var08, Var09, Var10, Var11, Var12, Var13, Var14, Var15,\
	Var16, Var17, Var18, Var19, Var20, Var21, Var22, Var23, Var24)\
	values ('"+sTime+"', '"+sVal[0]+"', '"+sVal[1]+"', '"+sVal[2]+"','"+sVal[3]+"','"+sVal[4]\
	+"','"+sVal[5]+"','"+sVal[6]+"','"+sVal[7]+"','"+sVal[8]+"','"+sVal[9]+"','"+sVal[10]+"','"+sVal[11]\
	+"','"+sVal[12]+"','"+sVal[13]+"','"+sVal[14]+"','"+sVal[15]+"','"+sVal[16]+"','"+sVal[17]\
	+"','"+sVal[18]+"','"+sVal[19]+"','"+sVal[20]+"','"+sVal[21]+"','"+sVal[22]+"','"+sVal[23]+"') ");
	ExecSQL(sql);
*/
}

BOOL CConfigInfo::CheckToSureTableExist(CString sTable, CString sTemplate)
{
	if(!CheckIfTableExist(sTable))
	{
	 	return CreateNewTable(sTable, sTemplate);
	}
	
	return TRUE;
}
BOOL CConfigInfo::CreateNewTable(CString sTable, CString sTemplate)
{
	CString strSQL;
	strSQL.Format("select * into %s from %s where 1<>1", sTable, sTemplate); 

	_RecordsetPtr pRst = NULL;
	TESTHR(pRst.CreateInstance(__uuidof(Recordset)));
	if(!ADOExec(pRst, _variant_t(strSQL)))
		return FALSE;
	return TRUE;
}

BOOL CConfigInfo::CheckIfTableExist(CString sTable)
{
	HRESULT     hr   =   S_OK;   
    IADORecordBinding       *picRs   =   NULL;   
    _RecordsetPtr   pRstSchema("ADODB.Recordset");   

	CString   strTableType, strTableName, strFlag;   
    try{
		pRstSchema->QueryInterface(__uuidof(IADORecordBinding), (LPVOID*)&picRs);   
		pRstSchema=m_ADOConn->OpenSchema(adSchemaTables);//枚举表的名称处理   
		int i = 0;
		while(!(pRstSchema->adoEOF)){   
			
			_bstr_t   table_name   =   pRstSchema->Fields->GetItem("TABLE_NAME")->Value;//获取表的名称   
			_bstr_t   table_type   =   pRstSchema->Fields->GetItem("TABLE_TYPE")->Value;//获取表的类型   
			strTableType.Format("%s",(LPCSTR)   table_type);
			if(!lstrcmp(strTableType,_T("TABLE")))   
			{   
				//m_cbTeam.AddString((LPCSTR)table_name);//添加表的名称   
				strTableName.Format("%s",(LPCSTR)table_name);
				if(!strTableName.CompareNoCase(sTable))   
				{
					pRstSchema->Close();  
					return TRUE;
				}
			}   
			pRstSchema->MoveNext();   
		}   
		//   Clean   up   objects   before   exit.   
		pRstSchema->Close();   
    }   
    catch(_com_error &e)
	{
		CString err;
		err.Format("%s", (char*)(e.Description()) );
		AfxMessageBox(err);
		return FALSE;
	}
	return FALSE;
}
int CConfigInfo::StringToInt(CString s)
{
	int nReturn = 0;
	char cc[10];
	wsprintf(cc, "%s", s);
	nReturn = atoi(cc);
	return nReturn;
}
float CConfigInfo::StringToFloat(CString s)
{
	float fReturn = 0;
	char cc[10];
	wsprintf(cc, "%s", s);
	fReturn = (float)atof(cc);
	return fReturn;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?