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

📄 adoadrbookview.cpp

📁 数据库课件。适用于培训、教学。PPT格式。
💻 CPP
字号:
// AdoAdrBookView.cpp : implementation of the CAdoAdrBookView class
/*
This file was created by Haimag (haimag@263.net).
This file is distributed "as is", e.g. there are no warranties 
and obligations and you could use it in your applications on your
own risk. 
Your comments and questions are welcome.
*/

#include "stdafx.h"
#include "AdoAdrBook.h"

#include "AdoAdrBookDoc.h"
#include "AdoAdrBookView.h"
#include "UserSheet.h"

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

/////////////////////////////////////////////////////////////////////////////
// CAdoAdrBookView

IMPLEMENT_DYNCREATE(CAdoAdrBookView, CListView)

BEGIN_MESSAGE_MAP(CAdoAdrBookView, CListView)
	//{{AFX_MSG_MAP(CAdoAdrBookView)
	ON_COMMAND(ID_DELETE_RECORD, OnDeleteRecord)
	ON_UPDATE_COMMAND_UI(ID_DELETE_RECORD, OnUpdateDeleteRecord)
	ON_COMMAND(ID_UPDATA_RECORD, OnUpdataRecord)
	ON_UPDATE_COMMAND_UI(ID_UPDATA_RECORD, OnUpdateUpdataRecord)
	ON_WM_LBUTTONDBLCLK()
	ON_COMMAND(ID_REFRASH_RECORD, OnRefrashRecord)
	ON_COMMAND(ID_NEW_RECORD, OnNewRecord)
	ON_WM_RBUTTONDOWN()
	ON_COMMAND(ID_POP_DELETE, OnPopDelete)
	ON_COMMAND(ID_POP_UPDATA, OnPopUpdata)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CAdoAdrBookView construction/destruction

CString CAdoAdrBookView::m_ColumnLabelStr [] = 
{
	"Name",
	"Address",
	"EmailAddress",
	"WorkPhone",
	"HomePhone",
};
CAdoAdrBookView::CAdoAdrBookView()
{
	// TODO: add construction code here
	m_pUserSet.CreateInstance(__uuidof(Recordset));

}

CAdoAdrBookView::~CAdoAdrBookView()
{
	if(m_pImageList!=NULL) delete m_pImageList;
}

BOOL CAdoAdrBookView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
		cs.style |= LVS_REPORT     |
			 LVS_SINGLESEL     |
			 LVS_SHOWSELALWAYS |
			 LVS_ICON          ;

	return CListView::PreCreateWindow(cs);

	return CListView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CAdoAdrBookView drawing

void CAdoAdrBookView::OnDraw(CDC* pDC)
{
	CAdoAdrBookDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

void CAdoAdrBookView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();

    CAdoAdrBookDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);



	CListCtrl	&lc	= GetListCtrl();
	int Column;
	LV_COLUMN		LVColumn;		
	
	DWORD dwStyle = ListView_GetExtendedListViewStyle(GetListCtrl());
	//Add the full row select and grid line style to the existing extended styles
	dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |
				LVS_EX_HEADERDRAGDROP | LVS_EX_TRACKSELECT;
	ListView_SetExtendedListViewStyle (GetListCtrl(),dwStyle);


	lc.DeleteAllItems ();// regular cleanup

	m_pImageList = new CImageList();
	m_pImageList->Create(IDB_BITMAP2, 16, 1, RGB(0,0,0));
	GetListCtrl().SetImageList(m_pImageList, LVSIL_SMALL);

	LVColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

	{
		for (Column = 0; (Column < 5); Column++)
		{
			CString		HeaderString;
		
			// fill header data
			LVColumn.iSubItem	= Column;
			LVColumn.pszText	= (LPTSTR) (LPCTSTR)m_ColumnLabelStr[Column];
			LVColumn.cx			= 120;
			LVColumn.fmt		= LVCFMT_LEFT;
			lc.InsertColumn (Column, &LVColumn);
		}
	}
	pDoc->UpdateAllViews(NULL);



}

/////////////////////////////////////////////////////////////////////////////
// CAdoAdrBookView printing

BOOL CAdoAdrBookView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CAdoAdrBookView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CAdoAdrBookView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CAdoAdrBookView diagnostics

#ifdef _DEBUG
void CAdoAdrBookView::AssertValid() const
{
	CListView::AssertValid();
}

void CAdoAdrBookView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}

CAdoAdrBookDoc* CAdoAdrBookView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAdoAdrBookDoc)));
	return (CAdoAdrBookDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CAdoAdrBookView message handlers
extern CAdoAdrBookApp theApp;
void CAdoAdrBookView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{ 
	CListCtrl	&lc	= GetListCtrl();

	lc.DeleteAllItems ();
	try 
	{
		int index=0;
		CString sql = "select * from Data";
		m_pUserSet->Open("select * from Data",
			theApp.m_pConnection.GetInterfacePtr(),
			adOpenDynamic,
			adLockOptimistic,
			adCmdText);
		while (!m_pUserSet->adoEOF)
		{
			m_pFieldsPtr = m_pUserSet->Fields;
			m_pFieldPtr   = m_pFieldsPtr->Item["NAME"];
		  	CString str="";
			if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
			else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
			int itemIndex = lc.InsertItem(LVIF_TEXT | LVIF_PARAM, index, str, 0, 0, 0, 0);

			int SubitemIndex;
			for(SubitemIndex=1;SubitemIndex<5;SubitemIndex++)
			{
				m_pFieldPtr   = m_pFieldsPtr->Item[_variant_t(m_ColumnLabelStr[SubitemIndex])];
				if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
			    else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );			    
				lc.SetItem(itemIndex,SubitemIndex,LVIF_TEXT, str , 0, 0, 0, 0);
			}   
			
			m_pUserSet->MoveNext();
			index++;
 
		}
		m_pUserSet->Close();

	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}
	catch(...)
	{
		AfxMessageBox("访问数据库服务器时发生异常.\n请与系统管理员联系,谢谢使用.");
		return;
	}
}

void CAdoAdrBookView::OnDeleteRecord() 
{
	// TODO: Add your command handler code here
	CListCtrl&	lc = GetListCtrl ();
	int nItem = lc.GetNextItem (-1, LVNI_SELECTED);
	if(nItem==-1) 
	{
		AfxMessageBox("请选择要删除的纪录");
		return ;
	}

	try
	{
		CString sql = "Select * from data where Name = " ;
		CString str = lc.GetItemText(nItem, 0);
		sql +="'";
		sql +=str;
		sql+= "'";
		if ( (AfxMessageBox("要删除: " +
	    	str+"吗?\n该删除不可恢复!", 
			MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2)) == IDYES ) 
		{
			m_pUserSet->Open((_variant_t)sql,
			    theApp.m_pConnection.GetInterfacePtr(),
			    adOpenDynamic,
			    adLockOptimistic,
			    adCmdText);

			m_pUserSet->Delete(adAffectCurrent);
			m_pUserSet->Update();
			m_pUserSet->Close();
			lc.DeleteItem(nItem);
		}
		
	}

	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}
	catch(...)
	{
		AfxMessageBox("访问数据库服务器时发生异常.\n请与系统管理员联系,谢谢使用.");
		return;
	}

}

void CAdoAdrBookView::OnUpdateDeleteRecord(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CListCtrl&	lc		= GetListCtrl();
	int nItem = lc.GetNextItem (-1, LVNI_SELECTED);
	if (nItem == -1) pCmdUI->Enable(0);
}

void CAdoAdrBookView::OnUpdataRecord() 
{
	CListCtrl&	lc = GetListCtrl ();
	
	int nItem = lc.GetNextItem(-1,LVNI_SELECTED);
	if(nItem==-1) 
	{
		AfxMessageBox("请选择要更新的纪录");
		return ;
	}

	CUserSheet sheet("个人资料") ;

	CString  sql = "select * from Data where Name =";    
	CString   str =lc.GetItemText(nItem,0);
	sql +="'";
	sql +=str;
	sql+= "'";
  
	try
	{
		m_pUserSet->Open((_variant_t)sql,
			    theApp.m_pConnection.GetInterfacePtr(),
			    adOpenDynamic,
			    adLockOptimistic,
			    adCmdText);
		m_pFieldsPtr = m_pUserSet->Fields;

		m_pFieldPtr   = m_pFieldsPtr->Item["NAME"];		
		if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
		else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
		sheet.m_UserPage1.m_name = str;

		m_pFieldPtr   = m_pFieldsPtr->Item["Address"];		
		if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
		else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
		sheet.m_UserPage1.m_address = str;

		m_pFieldPtr   = m_pFieldsPtr->Item["HomePhone"];		
		if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
		else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
		sheet.m_UserPage1.m_homePhone = str;

		m_pFieldPtr   = m_pFieldsPtr->Item["MobilePhone"];		
		if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
		else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
		sheet.m_UserPage1.m_mobilePhone = str;

		m_pFieldPtr   = m_pFieldsPtr->Item["workphone"];		
		if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
		else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
		sheet.m_UserPage1.m_workPhone = str;

		m_pFieldPtr   = m_pFieldsPtr->Item["emailaddress"];		
		if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
		else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
		sheet.m_UserPage1.m_email = str;

		m_pFieldPtr   = m_pFieldsPtr->Item["Notes"];		
		if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
		else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
		sheet.m_UserPage2.m_notes = str;

		if(sheet.DoModal()==IDOK)
		{
			m_pFieldPtr   = m_pFieldsPtr->Item["NAME"];
			str = sheet.m_UserPage1.m_name;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;
            
		    m_pFieldPtr   = m_pFieldsPtr->Item["workphone"];	
			str = sheet.m_UserPage1.m_workPhone;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;

			m_pFieldPtr   = m_pFieldsPtr->Item["Address"];	
			str = sheet.m_UserPage1.m_address;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;

			m_pFieldPtr   = m_pFieldsPtr->Item["emailAddress"];	
			str = sheet.m_UserPage1.m_email;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;

			m_pFieldPtr   = m_pFieldsPtr->Item["mobilephone"];	
			str = sheet.m_UserPage1.m_mobilePhone;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;

			m_pFieldPtr   = m_pFieldsPtr->Item["homephone"];	
			str = sheet.m_UserPage1.m_homePhone;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;

			m_pFieldPtr   = m_pFieldsPtr->Item["Notes"];	
			str = sheet.m_UserPage2.m_notes;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;
  
			m_pUserSet->Update();
			m_pUserSet->Close();	

			GetDocument()->UpdateAllViews(NULL);
		} 
		else
			m_pUserSet->Close();

	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}
	catch(...)
	{
		AfxMessageBox("访问数据库服务器时发生异常.\n请与系统管理员联系,谢谢使用.");
		return;
	}
	


}

void CAdoAdrBookView::OnUpdateUpdataRecord(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CListCtrl&	lc = GetListCtrl ();
	int nItem = lc.GetNextItem (-1, LVNI_SELECTED);
	if (nItem == -1) pCmdUI->Enable(0);
}

void CAdoAdrBookView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	OnUpdataRecord() ;
	CListView::OnLButtonDblClk(nFlags, point);
}

void CAdoAdrBookView::OnRefrashRecord() 
{
	// TODO: Add your command handler code here
	GetDocument()->UpdateAllViews(NULL);	
}

void CAdoAdrBookView::OnNewRecord() 
{
	// TODO: Add your command handler code here
	CUserSheet sheet("添加记录");
	CListCtrl&	lc = GetListCtrl ();

	if(sheet.DoModal()!=IDOK) return ;
	try
	{	
		CString sql = "select * from data where Name =";
		CString str = "'" + sheet.m_UserPage1.m_name +"'";
		sql += str;

		m_pUserSet->Open((_variant_t)sql,
			    theApp.m_pConnection.GetInterfacePtr(),
			    adOpenDynamic,
			    adLockOptimistic,
			    adCmdText);
		if(!m_pUserSet->adoEOF)
		{
			m_pUserSet->Close();
			AfxMessageBox("此姓名已存在");
			return ;
		}
		m_pUserSet->Close();
		
		m_pUserSet->Open("select * from data",
			    theApp.m_pConnection.GetInterfacePtr(),
			    adOpenDynamic,
			    adLockOptimistic,
			    adCmdText);
		m_pFieldsPtr = m_pUserSet->Fields;
		m_pUserSet->AddNew();
		{		
			m_pFieldPtr   = m_pFieldsPtr->Item["NAME"];
			str = sheet.m_UserPage1.m_name;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;
            
		    m_pFieldPtr   = m_pFieldsPtr->Item["workphone"];	
			str = sheet.m_UserPage1.m_workPhone;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;

			m_pFieldPtr   = m_pFieldsPtr->Item["Address"];	
			str = sheet.m_UserPage1.m_address;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;

			m_pFieldPtr   = m_pFieldsPtr->Item["emailAddress"];	
			str = sheet.m_UserPage1.m_email;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;

			m_pFieldPtr   = m_pFieldsPtr->Item["mobilephone"];	
			str = sheet.m_UserPage1.m_mobilePhone;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;

			m_pFieldPtr   = m_pFieldsPtr->Item["homephone"];	
			str = sheet.m_UserPage1.m_homePhone;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;

			m_pFieldPtr   = m_pFieldsPtr->Item["Notes"];	
			str = sheet.m_UserPage2.m_notes;
			if(str.IsEmpty()) str = " ";
			m_pFieldPtr->Value = (_variant_t)str;
		}
		m_pUserSet->Update();
		m_pUserSet->Close();
		
		GetDocument()->UpdateAllViews(NULL);


	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}
	catch(...)
	{
		AfxMessageBox("访问数据库服务器时发生异常.\n请与系统管理员联系,谢谢使用.");
		return;
	}

}

void CAdoAdrBookView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	CMenu PopMenu;
	CMenu *pMenu;
	CPoint pt;
	pt= point ;

	PopMenu.LoadMenu(IDR_POP_MENU);
	ClientToScreen (&pt);
			// show the menu (returns, when menu is closed again!)
	pMenu = PopMenu.GetSubMenu (0);
	pMenu->TrackPopupMenu (TPM_LEFTALIGN | TPM_RIGHTBUTTON,
				pt.x, pt.y, this);
	
	//CListView::OnRButtonDown(nFlags, point);
}

void CAdoAdrBookView::OnPopDelete() 
{
	// TODO: Add your command handler code here
	OnDeleteRecord() ;
}

void CAdoAdrBookView::OnPopUpdata() 
{
	// TODO: Add your command handler code here
	OnUpdataRecord();
}

⌨️ 快捷键说明

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