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

📄 dlg_query.cpp

📁 功能非常强大的数据采集系统
💻 CPP
字号:
// DLG_QUERY.cpp : implementation file
//

#include "stdafx.h"
#include "Ncap.h"
#include "DLG_QUERY.h"
#include "ADOConn.h"
#include "DLG_QUERY_TEXT.h"
#include "DLG_DRAW.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern CNcapApp theApp;
/////////////////////////////////////////////////////////////////////////////
// DLG_QUERY dialog


DLG_QUERY::DLG_QUERY(CWnd* pParent /*=NULL*/)
	: CDialog(DLG_QUERY::IDD, pParent)
{
	//{{AFX_DATA_INIT(DLG_QUERY)
	m_iNum = 0;
	m_iSum = 0;
	//}}AFX_DATA_INIT
}


void DLG_QUERY::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(DLG_QUERY)
	DDX_Control(pDX, IDC_QUERY_TEXT, m_cText);
	DDX_Control(pDX, IDC_QUERY_DRAW, m_cDraw);
	DDX_Control(pDX, IDC_DLETE, m_cDelete);
	DDX_Control(pDX, IDC_LIST1, m_cList);
	DDX_Text(pDX, IDC_NUM, m_iNum);
	DDX_Text(pDX, IDC_SUM, m_iSum);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(DLG_QUERY, CDialog)
	//{{AFX_MSG_MAP(DLG_QUERY)
	ON_BN_CLICKED(IDC_DLETE, OnDlete)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnItemchangedList1)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
	ON_BN_CLICKED(IDC_QUERY_TEXT, OnQueryText)
	ON_BN_CLICKED(IDC_QUERY_DRAW, OnQueryDraw)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// DLG_QUERY message handlers

//-------------------------------------------------------------------------------------------------
// 消息预处理(主要针对按键处理)
//-------------------------------------------------------------------------------------------------
BOOL DLG_QUERY::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
	{
		CDialog* Pwnd=(CDialog*)GetActiveWindow();						//取得对话框指针 
		Pwnd->NextDlgCtrl();											//切换到下一个输入焦点 
		return true;
	}
	
	return CDialog::PreTranslateMessage(pMsg);
}

//-------------------------------------------------------------------------------------------------
// 初始化对话窗信息
//-------------------------------------------------------------------------------------------------
BOOL DLG_QUERY::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	v_iMax=0;															//选取的数量

	//初始化列表窗: m_cList
	::SendMessage(m_cList.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
	m_cList.InsertColumn(0,"选取",LVCFMT_CENTER,36);
	m_cList.InsertColumn(1," 实 验 编 号",LVCFMT_CENTER,100);
	m_cList.InsertColumn(2,"  实  验  名  称  ",LVCFMT_CENTER,160);
	m_cList.InsertColumn(3,"时间间隔",LVCFMT_CENTER,60);
	m_cList.InsertColumn(4,"采集点数",LVCFMT_CENTER,60);
	m_cList.InsertColumn(5,"物理量",LVCFMT_CENTER,60);
	m_cList.InsertColumn(6,"通道",LVCFMT_CENTER,40);
  	m_cList.InsertColumn(7," 时    间",LVCFMT_CENTER,130);
	m_cList.InsertColumn(8,"         备          注   ",LVCFMT_LEFT,300);
	m_cList.SetExtendedStyle(m_cList.GetExtendedStyle()|LVS_EX_GRIDLINES);//|LVS_EX_CHECKBOXES);

	//初始化主对话窗信息内容
	if (!We_open())														//读取数据库信息
		return false;  
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//-------------------------------------------------------------------------------------------------
// 删除数据库数据
//-------------------------------------------------------------------------------------------------
void DLG_QUERY::OnDlete() 
{
	// TODO: Add your control notification handler code here
	if(::MessageBox(NULL,"是否真要删除全部数据 ?  ","删除确认",MB_OKCANCEL|MB_ICONQUESTION)==IDOK)
	{
		CString v_sSql="DELETE from query";								//SQL语句
		if (We_save(v_sSql))											//删除:实验信息数据库
		{
			v_sSql="DELETE from information";							//SQL语句
			if (We_save(v_sSql))										//删除:实验数据数据库
				We_open();												//重新读取数据库内容,更新显示
		}
	}
	m_cList.SetFocus();													//焦点放在列表窗
	
}

//-------------------------------------------------------------------------------------------------
// 功能:图形绘制
//-------------------------------------------------------------------------------------------------
void DLG_QUERY::OnQueryDraw() 
{
	// TODO: Add your control notification handler code here
	DLG_DRAW	v_cDlg;													//实验信息类实例

	v_cDlg.DoModal();													//打开实验信息窗口	
}

//-------------------------------------------------------------------------------------------------
// 功能:实验信息显示
//-------------------------------------------------------------------------------------------------
void DLG_QUERY::OnQueryText() 
{
	// TODO: Add your control notification handler code here
	DLG_QUERY_TEXT v_cDlg;												//实验信息类实例

	int v_iSelect=m_iNum-1;
	if (v_iSelect>=0)
	{
		v_cDlg.m_sChannel=m_cList.GetItemText(v_iSelect,6);				//实验通道
		v_cDlg.m_sDate=m_cList.GetItemText(v_iSelect,7);				//实验日期
		v_cDlg.m_sDemo=m_cList.GetItemText(v_iSelect,8);				//实验备注
		v_cDlg.m_sDs_time=m_cList.GetItemText(v_iSelect,3);				//实验时间间隔
		v_cDlg.m_sName=m_cList.GetItemText(v_iSelect,2);				//实验名称
		v_cDlg.m_sNum=m_cList.GetItemText(v_iSelect,1);					//实验编号
		v_cDlg.m_sNum.TrimLeft();										//去掉前面的空格
		v_cDlg.m_sNumber=m_cList.GetItemText(v_iSelect,4);				//实验采集点数
		v_cDlg.m_sUnit=m_cList.GetItemText(v_iSelect,5);				//实验物理量

		v_cDlg.DoModal();												//打开实验信息窗口
		if (v_cDlg.v_iReturn!=0)										//删除实验信息或修改备注返回
		{
			We_open();													//重新读取数据库内容,更新显示
			m_cList.SetFocus();											//焦点放在列表窗			
		}
	}	
}

//-------------------------------------------------------------------------------------------------
// 功能:单击记录内容,显示记录序号
//-------------------------------------------------------------------------------------------------
void DLG_QUERY::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	if(pNMListView->uNewState&LVIS_SELECTED)
	{
		m_iNum=pNMListView->iItem+1;
		m_cText.EnableWindow(true);
		UpdateData(false);
	}
	
	*pResult = 0;
}

//-------------------------------------------------------------------------------------------------
// 功能:双击记录内容,开窗口显示记录内容
//-------------------------------------------------------------------------------------------------
void DLG_QUERY::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CString		v_sTemp;												//临时变量

	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	int v_iSelect=pNMListView->iItem;
	if (v_iSelect>=0)
	{
		v_sTemp=m_cList.GetItemText(v_iSelect,0);						//选取
		if(v_sTemp==" □")
		{
			m_cList.SetItemText(v_iSelect,0,(_bstr_t)" √");			//选取有效
			v_iMax++;													//数量加一
			m_cDraw.EnableWindow(true);									//图形绘制有效
		}
		else
		{
			m_cList.SetItemText(v_iSelect,0,(_bstr_t)" □");			//选取无效
			v_iMax--;
			if(v_iMax==0)
				m_cDraw.EnableWindow(false);							//图形绘制无效
		}

	}	
	*pResult = 0;
}

//-------------------------------------------------------------------------------------------------
// 功能:读取数据库信息
//-------------------------------------------------------------------------------------------------
bool DLG_QUERY::We_open()
{
 	int v_iItem,v_iDs_time,v_iNumber,v_iChan;							//临时变量
 	CString v_sDate,v_sNum,v_sText,v_sNuit,v_sDemo,v_sTemp;				//临时变量
	_RecordsetPtr v_pRecordset;											//数据库记录指针
	
	try
	{
		m_cList.DeleteAllItems();										//删除列表窗内容
		m_iSum=0;														//记录总数
		m_iNum=0;														//记录当前序号
		ADOConn v_cAdoConn;												// 数据库实例
		v_cAdoConn.OnInitADOConn(theApp.a_iDatabase_Type,theApp.a_sDatabase_Ip,theApp.a_sDatabase_Name,theApp.a_sDatabase_User,theApp.a_sDatabase_Password);
																		//连接数据库
		if (!v_cAdoConn.m_bFlag)
		{
			v_cAdoConn.ExitConnect();									//断开连接
			return false;
		}
		_bstr_t v_sSql="SELECT * FROM query";							//设置查询语句
		v_pRecordset = v_cAdoConn.GetRecordSet(v_sSql);					//执行SELETE语句
		if (!v_cAdoConn.m_bFlag)
			return false;
		while(!v_pRecordset->adoEOF)
 		{
			if(v_pRecordset->Fields->GetItem("zdate")->ActualSize>0)	//读取 数据采集日期
			{
				v_sDate=v_pRecordset->GetCollect("zdate").bstrVal;
			}
			else v_sDate="";
			if(v_pRecordset->Fields->GetItem("znum")->ActualSize>0)		//读取 数据编号
				v_sNum=v_pRecordset->GetCollect("znum").bstrVal;
			else v_sNum="";
			if(v_pRecordset->Fields->GetItem("zname")->ActualSize>0)	//读取 项目名称
				v_sText=v_pRecordset->GetCollect("zname").bstrVal;
			else v_sText="";
			if(v_pRecordset->Fields->GetItem("zds_time")->ActualSize>0)	//读取 时间间隔
				v_iDs_time = v_pRecordset->GetCollect("zds_time").iVal;
			else v_iDs_time = 0;
			if(v_pRecordset->Fields->GetItem("znumber")->ActualSize>0)	//读取 采集点数
				v_iNumber = v_pRecordset->GetCollect("znumber").iVal;
			else v_iNumber = 0;
			if(v_pRecordset->Fields->GetItem("zunit")->ActualSize>0)	//读取 数据物理量
				v_sNuit=v_pRecordset->GetCollect("zunit").bstrVal;
			else v_sNuit="";
			if(v_pRecordset->Fields->GetItem("zchannel")->ActualSize>0)	//读取 通道
				v_iChan = v_pRecordset->GetCollect("zchannel").iVal;
			else v_iChan = 0;
			if(v_pRecordset->Fields->GetItem("zdemo")->ActualSize>0)	//读取 备注
				v_sDemo=v_pRecordset->GetCollect("zdemo").bstrVal;
			else v_sDemo="";

			v_iItem=m_cList.InsertItem(0xffff,(_bstr_t)" □");			//加入列表窗
			m_cList.SetItemText(v_iItem,1,(_bstr_t)v_sNum);
			m_cList.SetItemText(v_iItem,2,(_bstr_t)v_sText);
 			v_sTemp.Format("%d",v_iDs_time);
			m_cList.SetItemText(v_iItem,3,(_bstr_t)v_sTemp);
			v_sTemp.Format("%d",v_iNumber);
			m_cList.SetItemText(v_iItem,4,(_bstr_t)v_sTemp);
 			m_cList.SetItemText(v_iItem,5,(_bstr_t)v_sNuit);
			v_sTemp.Format("%d",v_iChan);
			m_cList.SetItemText(v_iItem,6,(_bstr_t)v_sTemp);
 			m_cList.SetItemText(v_iItem,7,(_bstr_t)v_sDate);
			m_cList.SetItemText(v_iItem,8,(_bstr_t)v_sDemo);

			v_pRecordset->MoveNext();
 		}
		v_cAdoConn.ExitConnect();										//断开连接
		m_iSum=m_cList.GetItemCount();									//获得记录总数
		m_iNum=1;														//记录当前序号
		if (m_iSum==0)
		{
			m_iNum=0;												
			m_cDelete.EnableWindow(false);								//删除按钮无效
		}
		else
			m_cDelete.EnableWindow(true);								//删除按钮有效
		m_cList.SetFocus();												//焦点放在列表窗
	}
	catch(_com_error e)													//捕捉异常
	{
		UpdateData(false);
		MessageBox("  数据库操作失败!  ","信息提示",MB_OK);
		return false;
	}
	UpdateData(false);
	return true;
}

//-------------------------------------------------------------------------------------------------
// 功能:执行数据库命令
//-------------------------------------------------------------------------------------------------
bool DLG_QUERY::We_save(CString v_sSql) 
{
	// TODO: Add your control notification handler code here
	bool v_bReturn=true;
	ADOConn v_cAdoConn;													// 数据库实例
	v_cAdoConn.OnInitADOConn(theApp.a_iDatabase_Type,theApp.a_sDatabase_Ip,theApp.a_sDatabase_Name,theApp.a_sDatabase_User,theApp.a_sDatabase_Password);
																		// 连接数据库
	if (!v_cAdoConn.ExecuteSQL((_bstr_t)v_sSql))						// 执行数据库操作
		v_bReturn=false;
	v_cAdoConn.ExitConnect();											//断开连接
	return v_bReturn;
}

//-------------------------------------------------------------------------------------------------
// 结束
//-------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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