⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controlunit.cpp

📁 数据库开发
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	if(m_plUnitList.GetCount() <= 0)
		return NULL;
	
	POSITION pos = m_plUnitList.GetHeadPosition();
	CControlUnit* pCtrlUnit = NULL;
	
	while(pos != NULL)
	{
		pCtrlUnit = (CControlUnit*)m_plUnitList.GetNext(pos);
		
		if(pCtrlUnit != NULL)
		{
			if(pCtrlUnit->GetUnitID() == wUnitID)
				return pCtrlUnit;
		}
	}
	
	return NULL;
}

BOOL CControlSegment::AddUnit(CControlUnit* pUnit)
{
	if(m_plUnitList.Find(pUnit) != NULL)
		return FALSE;
	
	if(GetUnit(pUnit->GetUnitName()) != NULL)
		return FALSE;
	
	if(GetUnit(pUnit->GetUnitID()) != NULL)
		return FALSE;
	
	
    CDaoRecordset m_Recordset(&m_pModule->m_Database);
	
	m_Recordset.Open(dbOpenDynaset,
		"Select * from "+this->GetUnitTableName());
	m_Recordset.AddNew();
	
	CString strTemp;
	strTemp=pUnit->GetUnitName();
	m_Recordset.SetFieldValue("UnitName",(char*)(LPCTSTR)strTemp);
	m_Recordset.Update();
	
	CString strSQL="Select * From "+this->GetUnitTableName();
	strSQL=strSQL+" Where UnitName = ";
	strSQL=strSQL+"'"+pUnit->GetUnitName()+"'"; 
	m_Recordset.Close();
	m_Recordset.Open(dbOpenDynaset,strSQL);
	
	if (m_Recordset.IsBOF() && m_Recordset.IsEOF())
	{
		delete pUnit;
		return FALSE;
	}
	else
	{
		m_Recordset.MoveFirst();
		
		COleVariant varValue;
		varValue=m_Recordset.GetFieldValue("UnitID");
		pUnit->m_wUnitID=atoi(OleVariantToString(varValue)); 
    }
	
	m_plUnitList.AddTail(pUnit);
	pUnit->SetControlSegment(this);
	pUnit->BuildMemTree();

	CDataManagerDoc* m_pDoc=(CDataManagerDoc*)((CMainFrame*)
		AfxGetApp()->m_pMainWnd)->GetActiveDocument();
	POSITION pos=m_pDoc->GetFirstViewPosition();
	
	CLeftView* p_TreeView;
	CDataManagerView* p_ListView;
	while (pos != NULL) 
	{ 
		CView* pView = m_pDoc->GetNextView(pos); 
		if(pView->IsKindOf(RUNTIME_CLASS(CLeftView)))
		{
			p_TreeView=(CLeftView*)pView;
		}
		else if(pView->IsKindOf(RUNTIME_CLASS(CDataManagerView)))
		{
			p_ListView=(CDataManagerView*)pView;
		}
	}
	CListCtrl& m_list=p_ListView->GetListCtrl();
	CTreeCtrl& m_tree=p_TreeView->GetTreeCtrl();
	
	HTREEITEM hItem=this->hItem; 
	hItem=m_tree.InsertItem(pUnit->GetUnitName(),hItem,TVI_LAST);  
	m_tree.SetItemData(hItem,1);
	if (this->hItem==m_tree.GetSelectedItem())  
		m_list.InsertItem(m_list.GetItemCount(),pUnit->GetUnitName());   
	return TRUE;
}

BOOL CControlSegment::AddUnit(CString strUnitName)
{
	CControlUnit* pCtrlUnit = new CControlUnit;
	pCtrlUnit->m_strUnitName=strUnitName;
	return AddUnit(pCtrlUnit);
}


BOOL CControlSegment::DeleteUnit(CControlUnit* pUnit)
{
	POSITION pos = m_plUnitList.Find(pUnit);
	
	if(pos != NULL)
	{
		CString strSQL;
		strSQL="Drop Table "+pUnit->GetPointTableName();
		this->m_pModule->m_Database.Execute(strSQL);   
		
        strSQL="Delete From "+this->GetUnitTableName();
		strSQL=strSQL+" Where UnitName = ";
		strSQL=strSQL+"'"+pUnit->m_strUnitName+"'";
		this->m_pModule->m_Database.Execute(strSQL);
		
        for (int i=0;i<pUnit->GetPointCount();i++)
        {
			CControlPoint* TempControlPoint;
			TempControlPoint=pUnit->GetPoint(i); 
			
            strSQL="Delete From "+this->GetHisTableName();
			strSQL=strSQL+" Where PointID = ";
			CString strID;
			strID.Format("%d",TempControlPoint->GetPointLongID());  
			strSQL=strSQL+strID;
            this->m_pModule->m_Database.Execute(strSQL);   
        }
		

		CDataManagerDoc* m_pDoc=(CDataManagerDoc*)((CMainFrame*)
			AfxGetApp()->m_pMainWnd)->GetActiveDocument();
		POSITION viewpos=m_pDoc->GetFirstViewPosition();
		
		CLeftView* p_TreeView;
		CDataManagerView* p_ListView;
		while (viewpos != NULL) 
		{ 
			CView* pView = m_pDoc->GetNextView(viewpos); 
			if(pView->IsKindOf(RUNTIME_CLASS(CLeftView)))
			{
				p_TreeView=(CLeftView*)pView;
			}
			else if(pView->IsKindOf(RUNTIME_CLASS(CDataManagerView)))
			{
				p_ListView=(CDataManagerView*)pView;
			}
		}
		CListCtrl& m_list=p_ListView->GetListCtrl();
		CTreeCtrl& m_tree=p_TreeView->GetTreeCtrl();
		
		HTREEITEM hItem=m_tree.GetSelectedItem();
		HTREEITEM hSubItem=m_tree.GetChildItem(hItem);
		while(hSubItem)
		{
			if(m_tree.GetItemText(hSubItem)==pUnit->GetUnitName())
				break;
			hSubItem=m_tree.GetNextSiblingItem(hSubItem);
			
		}
		m_tree.DeleteItem(hSubItem); 
		
		POSITION itempos=m_list.GetFirstSelectedItemPosition();
		m_list.DeleteItem(m_list.GetNextSelectedItem(itempos));
		

		m_plUnitList.RemoveAt(pos);
		pUnit->SetControlSegment(NULL);
		
		delete pUnit;
		return TRUE;
	}
	else
		return FALSE;
}

BOOL CControlSegment::DeleteUnit(int nIndex)
{
	POSITION pos = m_plUnitList.FindIndex(nIndex);
	CControlUnit* pCtrlUnit = NULL;
	
	if(pos != NULL)
	{
		pCtrlUnit = (CControlUnit*)m_plUnitList.GetAt(pos);
		
		return DeleteUnit(pCtrlUnit);
	}
	else
		return FALSE;
}

CControlModule* CControlSegment::GetControlModule()
{
	return m_pModule;
}

void CControlSegment::SetControlModule(CControlModule* pModule)
{
	m_pModule = pModule;
}

void CControlSegment::BuildMemTree()
{
    if (!(GetControlModule()->CheckTable(this->GetHisTableName())))
    {
		CString strSQL;
		strSQL="Create Table "+this->GetHisTableName(); 
		strSQL=strSQL + "( PointID Integer not Null,";
		strSQL=strSQL + "PointTime DateTime not Null,";
		strSQL=strSQL+"PointValue VarChar(30) not Null)";
		m_pModule->m_Database.Execute(strSQL);  
	}
	
    if (!this->m_pModule->CheckTable(this->GetPointNameID()))   
    {
		CString strSQL;
		strSQL="Create Table "+this->GetPointNameID(); 
		strSQL=strSQL+"( PointID Integer not Null,";
        strSQL=strSQL+"PointName VarChar(255) not Null)";
		m_pModule->m_Database.Execute(strSQL);  
    }
	
    if (!this->m_pModule->CheckTable(this->GetUnitTableName())) 
	{
        CString strSQL;
		strSQL="Create Table "+this->GetUnitTableName();
		strSQL=strSQL+"( UnitName VarChar(30) not Null,";
		strSQL=strSQL+"UnitID AUTOINCREMENT,";
		strSQL=strSQL+"UnitMemo VarChar(255) Null)";
		m_pModule->m_Database.Execute(strSQL);  
	}
	
    CDaoRecordset m_Recordset(&m_pModule->m_Database);
	
	m_Recordset.Open(dbOpenDynaset,"Select * from "+
		this->GetUnitTableName());
	if (!(m_Recordset.IsBOF() && m_Recordset.IsEOF()))
	{
		m_Recordset.MoveFirst();
		while(!m_Recordset.IsEOF())
		{
			CControlUnit* TempCtrlUnit;
            TempCtrlUnit=new CControlUnit;
			
			COleVariant varValue=m_Recordset.GetFieldValue("UnitName");
            TempCtrlUnit->m_strUnitName=OleVariantToString(varValue);
			
			varValue=m_Recordset.GetFieldValue("UnitID");
            TempCtrlUnit->m_wUnitID=atoi(OleVariantToString(varValue));
			TempCtrlUnit->m_pSegment=this; 
			this->m_plUnitList.AddTail(TempCtrlUnit);
			m_Recordset.MoveNext();
		} 
	}
	
    for (int i=0;i<GetUnitCount();i++)
    {
		CControlUnit* TempCtrlUnit;
		TempCtrlUnit=this->GetUnit(i); 
        TempCtrlUnit->BuildMemTree();
    }
}

CString CControlSegment::GetHisTableName()
{
	CString strID;
	strID.Format("%d",GetSegmentID()); 
	return "S"+ strID+"_HisData";
}

CString CControlSegment::GetPointNameID()
{
	CString strID;
	strID.Format("%d",GetSegmentID()); 
	return "S"+ strID+"_NameIDData";
}

CString CControlSegment::GetUnitTableName()
{
	CString strID;
	strID.Format("%d",GetSegmentID()); 
	return "S"+ strID+"_UnitData";
}

//////////////////////////////////////////////////////////////////////
// CControlUnit Class


CControlUnit::CControlUnit()
{
	m_strUnitName.Empty();
}

CControlUnit::~CControlUnit()
{
	CControlPoint* pCtrlPoint = NULL;
	while(m_plPointList.GetCount() > 0)
	{
		pCtrlPoint = (CControlPoint*)m_plPointList.RemoveHead();
		delete pCtrlPoint;
	}
}

CString CControlUnit::GetUnitName()
{
	return m_strUnitName;
}

CString CControlUnit::GetUnitLongName()
{
    if (m_pSegment==NULL)
        return this->m_strUnitName;
    else
		return m_pSegment->GetSegmentName()+"."+GetUnitName();
}

BOOL CControlUnit::SetUnitName(CString strUnitName)
{
	if(strUnitName.IsEmpty())
		return FALSE;
	
	if(m_strUnitName == strUnitName)
		return FALSE;
	
	m_strUnitName = strUnitName;
	return TRUE;
}

CControlSegment* CControlUnit::GetControlSegment()
{
	return m_pSegment;
}

void CControlUnit::SetControlSegment(CControlSegment* pSegment)
{
	m_pSegment = pSegment;
}

WORD CControlUnit::GetUnitID()
{
	return m_wUnitID;
}

BOOL CControlUnit::SetUnitID(WORD wUnitID)
{
	if(m_wUnitID == wUnitID)
		return FALSE;
	
	m_wUnitID = wUnitID;
	return TRUE;
}

int CControlUnit::GetPointCount()
{
	return m_plPointList.GetCount();
}

CControlPoint* CControlUnit::GetPoint(int nIndex)
{
	POSITION pos = m_plPointList.FindIndex(nIndex);
	
	if(pos != NULL)
		return (CControlPoint*) m_plPointList.GetAt(pos);
	
	return NULL;
}

CControlPoint* CControlUnit::GetPoint(CString strPointName)
{
	POSITION pos = m_plPointList.GetHeadPosition();
	CControlPoint* pCtrlPoint = NULL;
	
	while(pos != NULL)
	{
		pCtrlPoint = (CControlPoint*) m_plPointList.GetNext(pos);
		
		if(pCtrlPoint != NULL)
		{
			if(pCtrlPoint->GetPointName() == strPointName)
				return pCtrlPoint;
		}
	}
	
	return NULL;
}

CControlPoint* CControlUnit::GetPoint(WORD wPointID)
{
	POSITION pos = m_plPointList.GetHeadPosition();
	CControlPoint* pCtrlPoint = NULL;
	
	while(pos != NULL)
	{
		pCtrlPoint = (CControlPoint*) m_plPointList.GetNext(pos);
		
		if(pCtrlPoint != NULL)
		{
			if(pCtrlPoint->GetPointID() == wPointID)
				return pCtrlPoint;
		}
	}
	
	return NULL;
}

CString CControlUnit::GetPointTableName()
{
	CString strUnitID,strSegmentID;
	strUnitID.Format("%d",this->m_wUnitID);
	strSegmentID.Format("%d",this->m_pSegment->GetSegmentID());
	
	if (this->m_pSegment==NULL)
	{
		return "U"+strUnitID+"_PointData";
	}
    else
	{
		return "S"+strSegmentID+"_U"+strUnitID+"_PointData";
	}
}

BOOL CControlUnit::AddPoint(CControlPoint* pPoint)
{
	if(m_plPointList.Find(pPoint) != NULL)
		return FALSE;
	
	if(GetPoint(pPoint->GetPointName()) != NULL)
		return FALSE;
	
	if(GetPoint(pPoint->GetPointID()) != NULL)
		return FALSE;
	
	pPoint->SetControlUnit(this);
	
    CDaoRecordset m_Recordset(&this->m_pSegment->m_pModule->m_Database);
	
	m_Recordset.Open(dbOpenDynaset,"Select * from "+
		this->GetPointTableName());
	m_Recordset.AddNew();

⌨️ 快捷键说明

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