📄 gearview.cpp
字号:
// gearView.cpp : implementation of the CGearView class
//
#include "stdafx.h"
#include "gear.h"
#include "gearDoc.h"
#include "gearView.h"
#include "InsertDialog.h"
#include "DataAsk.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGearView
IMPLEMENT_DYNCREATE(CGearView, CListView)
BEGIN_MESSAGE_MAP(CGearView, CListView)
//{{AFX_MSG_MAP(CGearView)
ON_COMMAND(ID_SHOW, OnShow)
ON_COMMAND(ID_DEL, OnDel)
ON_COMMAND(ID_ADD, OnAdd)
ON_COMMAND(ID_EDIT, OnEdit)
ON_WM_DESTROY()
ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
ON_COMMAND(ID_ASK, OnAsk)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGearView construction/destruction
CGearView::CGearView()
{
// TODO: add construction code here
}
CGearView::~CGearView()
{
}
BOOL CGearView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style|=LVS_REPORT;
return CListView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CGearView drawing
void CGearView::OnDraw(CDC* pDC)
{
CGearDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
void CGearView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
try{
m_pdatabase=new CDatabase;
m_pdatabase->Open(_T("gear"),FALSE,FALSE,_T("ODBC;DSN=gear"),FALSE);
m_pset=new CRecordset();
m_pset->m_pDatabase=m_pdatabase;
}
catch(CDBException* e){
e->ReportError();
delete m_pdatabase;
delete m_pset;
m_pdatabase=NULL;
m_pset=NULL;
e->Delete();
return;
}
// TODO: You may populate your ListView with items by directly accessing
// its list control through a call to GetListCtrl().
}
/////////////////////////////////////////////////////////////////////////////
// CGearView printing
BOOL CGearView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CGearView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CGearView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CGearView diagnostics
#ifdef _DEBUG
void CGearView::AssertValid() const
{
CListView::AssertValid();
}
void CGearView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
CGearDoc* CGearView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGearDoc)));
return (CGearDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CGearView message handlers
BOOL CGearView::ShowInformation(CString strSQL)
{
CListCtrl& ctrlList=(CListCtrl&)GetListCtrl();
if(!m_pdatabase->IsOpen()) return FALSE;
if(!m_pset) return FALSE;
try{
BeginWaitCursor();
if(m_pset->IsOpen()) m_pset->Close();//如果打开一条记录,这关闭
m_pset->Open(CRecordset::dynaset,strSQL);//按照strSQL重新打开一条记录,数据源和用户操作同步,
if(!m_pset->IsEOF())
{m_pset->MoveLast();
m_pset->MoveFirst();}//移动到第一条记录
int nFieldCount=m_pset->GetODBCFieldCount();//记下记录的数目
CODBCFieldInfo fieldinfo;
for(int n=0;n<nFieldCount;n++){
m_pset->GetODBCFieldInfo(n,fieldinfo);
int nWidth=ctrlList.GetStringWidth(fieldinfo.m_strName)+70;
ctrlList.InsertColumn(n,fieldinfo.m_strName,LVCFMT_CENTER,nWidth);
}
CString strValue;
m_pset->MoveFirst();
int nCount=0;
while(!m_pset->IsEOF()){
ctrlList.InsertItem(nCount,strValue);
for(int j=0;j<nFieldCount;j++){
m_pset->GetFieldValue(j,strValue);
ctrlList.SetItemText(nCount,j,strValue);
}
m_pset->MoveNext();
nCount++;
}
EndWaitCursor();
}
catch(CDBException *e){
e->ReportError();
e->Delete();
EndWaitCursor();
return FALSE;
}
return TRUE;
}
void CGearView::OnShow()
{
// TODO: Add your command handler code here
CListCtrl& ctrlList=(CListCtrl&)GetListCtrl();
ctrlList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
ctrlList.DeleteAllItems();
while(ctrlList.DeleteColumn(0));
UpdateWindow();
CString strSQL;
strSQL=_T("select * from gear;");
ShowInformation(strSQL);
}
void CGearView::OnDel()
{
// TODO: Add your command handler code here
CListCtrl& ctrlList=(CListCtrl&)GetListCtrl();
UINT i,uSelectedCount=ctrlList.GetSelectedCount();
if(uSelectedCount==0) {MessageBox("要选择一条记录!","提示",MB_ICONWARNING+MB_OK);return;}
if(MessageBox("是否真的要删除这条记录!","提示",MB_ICONQUESTION+MB_OKCANCEL)!=IDOK)
return;
if(!m_pdatabase->IsOpen()) {MessageBox("数据获取失败!","提示",MB_ICONWARNING+MB_OK);return;}
if(!m_pset) {MessageBox("数据获取失败!","提示",MB_ICONWARNING+MB_OK);return;}
if(m_pset->IsOpen()) m_pset->Close();
int nItemSel=0;
if(uSelectedCount>0)
{
for(i=0;i<uSelectedCount;i++)
{
nItemSel=ctrlList.GetNextItem(nItemSel-1,LVNI_SELECTED);
CString str("");
str=ctrlList.GetItemText(nItemSel,0);
CString strSQL;
strSQL="delete from gear where 齿轮号='"+str+"'";
try
{
m_pdatabase->ExecuteSQL(strSQL);
}
catch(CDBException* e)
{
e->ReportError();
e->Delete();
return;
}
ctrlList.DeleteItem(nItemSel);
UpdateWindow();
}
}
}
void CGearView::OnAdd()
{
// TODO: Add your command handler code here
if(!m_pdatabase->IsOpen()) {MessageBox("数据获取失败!","提示",MB_ICONWARNING+MB_OK);return;}
CInsertDialog AddDlg;
AddDlg.mark=0;
if(AddDlg.DoModal()==IDOK)
{
CString strnum=AddDlg.num;
float m=AddDlg.m;
int z=AddDlg.z;
float a=AddDlg.a;
float b=AddDlg.b;
float w=AddDlg.w;
if(strnum=="") {MessageBox("齿轮号不能为空!","提示",MB_ICONWARNING+MB_OK);AddDlg.m_num.SetFocus();return;}
CString strsql;
strsql.Format("insert into gear(齿轮号,模数,齿数,压力角,螺旋角,齿宽) values('%s',%f,%d,%f,%f,%f)",strnum,m,z,a,b,w);
try
{
if(m_pdatabase->CanUpdate())
m_pdatabase->ExecuteSQL(strsql);
}
catch(CDBException* e)
{
e->ReportError();
e->Delete();
return;
}
OnShow();
}
}
void CGearView::OnEdit()
{
// TODO: Add your command handler code here
CListCtrl& ctrlList=(CListCtrl&)GetListCtrl();
if(!m_pdatabase->IsOpen()) {MessageBox("数据获取失败!","提示",MB_ICONWARNING+MB_OK);return;}
if(!m_pset) {MessageBox("数据获取失败!","提示",MB_ICONWARNING+MB_OK);return;}
UINT i,uSelectedCount=ctrlList.GetSelectedCount();
if(uSelectedCount>1||uSelectedCount==0)
{
if(uSelectedCount==0)
{
MessageBox("要选择一条记录!","提示",MB_ICONWARNING+MB_OK);
//AfxMessageBox("要选择一条记录!");
return;
}
if(uSelectedCount>1)
{
MessageBox("只能选择一条记录!","提示",MB_ICONWARNING+MB_OK);
//AfxMessageBox("只能选择一条记录!");
return;
}
}
else
{
int nItemSel=0;
nItemSel=ctrlList.GetNextItem(nItemSel-1,LVNI_SELECTED);
CString strID,strSQL;
strID=ctrlList.GetItemText(nItemSel,0);
strSQL="select * from gear where 齿轮号='"+strID+"'";
try
{
m_pset1.m_pDatabase=m_pdatabase;
if(m_pset1.IsOpen()) m_pset1.Close();
m_pset1.Open(CRecordset::dynaset,strSQL);
}
catch(CDBException* e)
{
e->ReportError();
e->Delete();
MessageBox("数据获取失败!","提示",MB_ICONWARNING+MB_OK);
return;
}
}
CInsertDialog DialogEdit;
i=0;
DialogEdit.mark=1;
for(i=0;i<6;i++)
m_pset1.GetFieldValue(i,DialogEdit.str[i]);
if(DialogEdit.DoModal()==IDOK)
{
CString strnum=DialogEdit.num;
float m=DialogEdit.m;
int z=DialogEdit.z;
float a=DialogEdit.a;
float b=DialogEdit.b;
float w=DialogEdit.w;
CString strsql;
strsql.Format("update gear set 齿轮号='%s',模数=%f,齿数=%d,压力角=%f,螺旋角=%f,齿宽=%f where 齿轮号='%s'",strnum,m,z,a,b,w,strnum);
try
{
if(m_pdatabase->CanUpdate())
m_pdatabase->ExecuteSQL(strsql);
}
catch(CDBException* e)
{
e->ReportError();
e->Delete();
return;
}
OnShow();
}
}
void CGearView::OnDestroy()
{
CListView::OnDestroy();
// TODO: Add your message handler code here
delete m_pset;
delete m_pdatabase;
}
void CGearView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
OnEdit();
*pResult = 0;
}
void CGearView::OnAsk()
{
// TODO: Add your command handler code here
CString table_name="gear";
CString strSQL;
CDataAsk DataAskDialog;
strSQL="select * from "+table_name;
try
{
if(m_pset->IsOpen()) m_pset->Close();
m_pset->Open(CRecordset::dynaset,strSQL);
if(!m_pset->IsEOF())
{m_pset->MoveLast();
m_pset->MoveFirst();}
int nFieldCount=m_pset->GetODBCFieldCount();
DataAskDialog.nF=nFieldCount;
CODBCFieldInfo fieldinfo;
for(int n=0;n<nFieldCount;n++){
m_pset->GetODBCFieldInfo(n,fieldinfo);
DataAskDialog.sF[n]=fieldinfo.m_strName;
}
}
catch(CDBException *e)
{
e->ReportError();
delete m_pdatabase;
delete m_pset;
m_pdatabase=NULL;
m_pset=NULL;
e->Delete();
}
int r=DataAskDialog.DoModal();
if(r==0)
{
CListCtrl& ctrlList=(CListCtrl&)GetListCtrl();
ctrlList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
ctrlList.DeleteAllItems();
while(ctrlList.DeleteColumn(0));
UpdateWindow();
CString strSQL;
CString attri,rela,sV;
attri=DataAskDialog.attri;
rela=DataAskDialog.rela;
sV=DataAskDialog.sV;
if(attri==""||rela==""||sV=="")
{
MessageBox("请输入完整的查询条件!","提示",MB_ICONWARNING+MB_OK);
return;
}
if(attri=="齿轮号")
strSQL="select * from "+table_name+" where "+attri+rela+"'"+sV+"'";
else
strSQL="select * from "+table_name+" where "+attri+rela+sV;
if(!ShowInformation(strSQL)) MessageBox("对不起,没有您所需要的数据!","提示",MB_ICONWARNING+MB_OK);
}
else if(r==1)
{
OnShow();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -