?? odbcemailbookview.cpp
字號:
// ODBCEmailBookView.cpp : implementation of the CODBCEmailBookView class
//
#include "stdafx.h"
#include "ODBCEmailBook.h"
#include "MainFrm.h"
#include "ClassInfoSet.h"
#include "ODBCEmailBookSet.h"
#include "ODBCEmailBookDoc.h"
#include "ODBCEmailBookView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CODBCEmailBookView
IMPLEMENT_DYNCREATE(CODBCEmailBookView, CRecordView)
BEGIN_MESSAGE_MAP(CODBCEmailBookView, CRecordView)
//{{AFX_MSG_MAP(CODBCEmailBookView)
ON_COMMAND(ID_MENU_CLEAR, OnMenuClearClick)
ON_COMMAND(ID_MENU_DELETE, OnMenuDeleteClick)
ON_COMMAND(ID_MENU_UPDATE, OnMenuUpdateClick)
ON_UPDATE_COMMAND_UI(ID_MENU_UPDATE, OnUpdateMenuUpdate)
ON_UPDATE_COMMAND_UI(ID_MENU_DELETE, OnUpdateMenuDelete)
ON_COMMAND(ID_MENU_ADD, OnMenuAddClick)
ON_BN_CLICKED(IDC_BUTTON_FIND, OnButtonFind)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CODBCEmailBookView construction/destruction
CODBCEmailBookView::CODBCEmailBookView()
: CRecordView(CODBCEmailBookView::IDD)
{
//{{AFX_DATA_INIT(CODBCEmailBookView)
m_pSet = NULL;
m_key = _T("");
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CODBCEmailBookView::~CODBCEmailBookView()
{
}
void CODBCEmailBookView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CODBCEmailBookView)
DDX_FieldText(pDX, IDC_STUEMAIL, m_pSet->m_email, m_pSet);
DDV_MaxChars(pDX, m_pSet->m_email, 50);
DDX_FieldText(pDX, IDC_STUSEX, m_pSet->m_sex, m_pSet);
DDV_MaxChars(pDX, m_pSet->m_sex, 2);
DDX_FieldText(pDX, IDC_STUCLASSID, m_pSet->m_stuclassid, m_pSet);
DDX_FieldText(pDX, IDC_STUID, m_pSet->m_stuid, m_pSet);
DDX_FieldText(pDX, IDC_STUMEMO, m_pSet->m_stumemo, m_pSet);
DDX_FieldText(pDX, IDC_STUNAME, m_pSet->m_stuname, m_pSet);
DDX_FieldText(pDX, IDC_STUAGE, m_pSet->m_age, m_pSet);
DDV_MinMaxInt(pDX, m_pSet->m_age, 15, 45);
DDX_Text(pDX, IDC_EDIT_KEY, m_key);
//}}AFX_DATA_MAP
}
BOOL CODBCEmailBookView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CRecordView::PreCreateWindow(cs);
}
void CODBCEmailBookView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_ODBCEmailBookSet;//獲得記錄集對象引用,該對象已自動打開
m_pClassSet = &GetDocument()->m_ClassInfoSet;//獲得記錄集對象引用
if(!(m_pClassSet->IsOpen()))//打開記錄集
m_pClassSet->Open();
//初始化視圖,顯示數據顯示窗口
CRecordView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
if (m_pSet->IsEOF()){//計算當前記錄號
m_nRecordNumber=0;
}
else
{
m_nRecordNumber=1;
//滾動記錄集,使GetRecordCount函數能夠返回總記錄數
while(!m_pSet->IsEOF()){m_pSet->MoveNext();}
m_pSet->MoveFirst(); //恢復當前記錄位置
}
ShowRecordNews();//顯示記錄號、記錄總數及當前學生班級名稱
}
/////////////////////////////////////////////////////////////////////////////
// CODBCEmailBookView printing
BOOL CODBCEmailBookView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CODBCEmailBookView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CODBCEmailBookView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CODBCEmailBookView diagnostics
#ifdef _DEBUG
void CODBCEmailBookView::AssertValid() const
{
CRecordView::AssertValid();
}
void CODBCEmailBookView::Dump(CDumpContext& dc) const
{
CRecordView::Dump(dc);
}
CODBCEmailBookDoc* CODBCEmailBookView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CODBCEmailBookDoc)));
return (CODBCEmailBookDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CODBCEmailBookView database support
CRecordset* CODBCEmailBookView::OnGetRecordset()
{
return m_pSet;
}
/////////////////////////////////////////////////////////////////////////////
// CODBCEmailBookView message handlers
void CODBCEmailBookView::OnMenuAddClick()
{
m_pSet->AddNew();
UpdateData(true);//用窗體數據更新記錄集
if (m_pSet->CanUpdate()) {
m_pSet->Update();//將記錄集更新返回數據庫
m_nRecordNumber++;
}
m_pSet->Requery(); //重新執行查詢,刷新記錄集
//瀏覽整個記錄集,使GetRecordCount可以返回準確的記錄數
while(!m_pSet->IsEOF()){m_pSet->MoveNext();}
ShowRecordNews();//顯示記錄號和記錄數
UpdateData(false);//刷新窗體
}
void CODBCEmailBookView::OnMenuClearClick()
{
m_pSet->SetFieldNull(NULL);//清除字段
UpdateData(false); //刷新窗體
}
void CODBCEmailBookView::OnMenuDeleteClick()
{
CRecordsetStatus status;//定義記錄集狀態變量
try {
m_pSet->Delete();//刪除當前記錄
}
catch(CDBException* e) {
//如果刪除操作發生錯誤,則顯示錯誤信息
AfxMessageBox(e->m_strError);//顯示錯誤信息
e->Delete();//刪除錯誤對象
m_pSet->MoveFirst(); //使第一條記錄成為當前記錄
UpdateData(false);//刷新窗口
return;
}
m_pSet->GetStatus(status);//獲得記錄集狀態
if (status.m_lCurrentRecord == 0) {
//如果刪除的是最后兩條記錄中的第2條,
//則使第一條記錄成為當前記錄
m_pSet->MoveFirst();
}
else {
m_pSet->MoveNext();//使下一條記錄成為當前記錄
}
UpdateData(false);//刷新窗口
}
void CODBCEmailBookView::OnMenuUpdateClick()
{
m_pSet->Edit();//使當前記錄進入編輯狀態
UpdateData(true);//將窗體中顯示的數據存入記錄集
if (m_pSet->CanUpdate()){
m_pSet->Update();//將記錄集的更新返回數據庫
}
}
void CODBCEmailBookView::OnUpdateMenuUpdate(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!m_pSet->IsEOF());
}
void CODBCEmailBookView::OnUpdateMenuDelete(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!m_pSet->IsEOF());
}
BOOL CODBCEmailBookView::OnMove(UINT nIDMoveCommand)
{
switch (nIDMoveCommand/*記錄指針移動命令消息ID*/)
{
case ID_RECORD_PREV:
//若第一條記錄已經是當前記錄,則不再向前移動記錄指針
if(!(m_nRecordNumber==1)){
m_pSet->MovePrev(); //使前一條記錄成為當前記錄
m_nRecordNumber-=1; //使記錄號減1
}
break;
case ID_RECORD_FIRST:
m_pSet->MoveFirst();//使第一條記錄成為當前記錄
m_nRecordNumber=1;//使記錄號為1
break;
case ID_RECORD_NEXT:
//若最后一條記錄已經是當前記錄,則不再向后移動記錄指針
if(!(m_nRecordNumber==m_pSet->GetRecordCount())){
m_pSet->MoveNext();//使下一條記錄成為當前記錄
m_nRecordNumber+=1;//記錄號加1
}
break;
case ID_RECORD_LAST:
m_pSet->MoveLast();//使最后一條記錄成為當前記錄
m_nRecordNumber=m_pSet->GetRecordCount();//使記錄號等于記錄數
break;
default:
ASSERT(false); //若發生其他情況,則終止程序運行
}
ShowRecordNews();//顯示記錄號、記錄數和當前學生班級名稱
UpdateData(false);//刷新窗體,顯示新的當前記錄數據
return 1;
}
void CODBCEmailBookView::ShowRecordNews(){
CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;//獲得主窗口引用
CStatusBar* pStatus=&pFrame->m_wndStatusBar;//獲得狀態欄引用
CString str;
pStatus->SetPaneText(1,"");
str.Format("記錄號:%d",m_nRecordNumber);//構造記錄號字符串
pStatus->SetPaneText(1,str);//顯示記錄號字符串
str.Format("記錄數:%d",m_pSet->GetRecordCount());//構造記錄數字符串
pStatus->SetPaneText(2,str);//顯示記錄號字符串
CEdit* pName=(CEdit*)GetDlgItem(IDC_STUCLASSNAME);//獲得班級名稱顯示編輯框控件引用
m_pClassSet->m_strFilter.Format("id=%d",m_pSet->m_stuclassid);//用當前學生班級編號設置過濾條件
m_pClassSet->Requery();//使用過濾條件重新檢索數據
pName->SetWindowText(m_pClassSet->m_name);//顯示班級名稱
return;
}
void CODBCEmailBookView::OnButtonFind()
{
//按姓名查找記錄
//使用在“姓名”文本框中輸入的字符串篩選記錄集
UpdateData(true);
m_pSet->m_strFilter="name like '"+m_key+"%'";
m_pSet->Requery();
if(m_pSet->IsEOF())
MessageBox("無滿足條件的記錄");
else{
while(!m_pSet->IsEOF())
m_pSet->MoveNext();
}
OnMove(ID_RECORD_FIRST);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -