📄 dlg_query.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 + -