1. 程式人生 > >MFC介面程式設計基礎(26):更新記錄

MFC介面程式設計基礎(26):更新記錄

上一篇:MFC介面程式設計基礎(25):設計記錄操作介面 下一篇:MFC介面程式設計基礎(27):排序和篩選

更新記錄操作包括修改,新增和刪除記錄,CRecordSet類提供了AddNew()、Delete()、Edit()、Update()、CancelUpdate()、Requery()等成員函式用於更新記錄。
AddNew()函式用於新增一個新的空記錄,所有欄位資料成員的值都為NULL。Delete()函式用於刪除當前記錄,Edit()函式用於修改當前記錄各欄位資料成員的值。Update()函式用於AddNew和Edit操作後的資料的最後儲存,CancelUpdate()函式用於取消任何由AddNew和Edit操作產生的待處理的更新。Requery()函式用於重新執行對記錄集的查詢,當記錄集型別是快照型時,快照不反映使用者新增的記錄,這時需要呼叫該函式重新查詢更新後的記錄集。
下面在Exam2_1中增加新增新記錄和刪除記錄的功能。

〖例〗在“record”記錄下新增三個選單項如下圖所示。一個選單項是分割線,另外兩個選單項分別是“增加記錄”和“刪除記錄”。選單ID設定為ID_RECORD_ADD和ID_RECORD_DELETE。
在這裡插入圖片描述
在選單項上使用右鍵選單在檢視類中為選單項ID_RECORD_ADD和ID_RECORD_DELETE對映COMMAND訊息處理函式, 得到成員函式OnRecordAdd()和OnRecordDelete()。
在這裡插入圖片描述
在這裡插入圖片描述
新增CExam2_1View的BOOL類資料成員m_addflg,用以記錄是否進入新增模式,當m_addflg的值為true時,進入新增模式。在CExam2_1View的建構函式中初始化m_addflg的值為false。
為成員函式OnRecordAdd()新增程式碼,增加一條空記錄,並清除ID編輯框的只讀屬性。實現程式碼如程式清單2-2所示。

程式清單2-2:Add Record 選單訊息處理函式

void CExam2_1View::OnRecordAdd() 
{
	// TODO: Add your command handler code here
	m_pSet->AddNew();  //進入新增模式
    m_addflg=true;    //設定新增模式標誌
	CEdit* m_pCtrl=(CEdit*)GetDlgItem(IDC_CustomerID);
	m_pCtrl->SetReadOnly(false); //清除ID編輯框的只讀屬性
	UpdateData(false);   //用新記錄的欄位資料成員值更新控制元件顯示
}

使用ClassWizard新增CExam2_1View類的虛擬函式OnMove()函式,並在OnMove()函式中新增程式碼,通過移動記錄將新增的新記錄儲存到表中。實現程式碼如程式清單2-3所示

程式清單2-3:OnMove()函式

BOOL CExam2_1View::OnMove(UINT nIDMoveCommand) 
{
	// TODO: Add your specialized code here and/or call the base class
	//新增模式處理
	if (m_addflag)
	{
		m_addflag = false;
		//使用控制元件值更新記錄集欄位資料成員
		UpdateData(true);
		//將記錄集更新儲存到表中
		if (m_pSet->CanUpdate())
		{
			m_pSet->Update();
		}
		//重新查詢記錄集
		m_pSet->Requery();
		//以更新後的記錄集資料成員更新控制元件顯示
		UpdateData(false);
		CEdit* m_pCtrl = (CEdit*)GetDlgItem(IDC_CUSTOMERID);
		//設定ID編輯框為只讀
		m_pCtrl->SetReadOnly(true); 
		return true;
	}
	else
	{
		return CRecordView::OnMove(nIDMoveCommand);
	}
}

為成員函式OnRecordDelete()新增程式碼,刪除當前記錄,實現程式碼如程式清單2-4所示。

程式清單2-4:Delete Record選單處理函式

void CExam2_1View::OnRecordDelete() 
{
	// TODO: Add your command handler code here
	m_pSet->Delete();//刪除當前記錄
	m_pSet->MoveNext();//移到下一記錄
	if (m_pSet->IsEOF())//刪除記錄為最後一條記錄處理
	{
		m_pSet->MoveLast();
	}
	if (m_pSet->IsBOF())//刪空記錄集處理
	{
		m_pSet->SetFieldNull(NULL);
	}
	UpdateData(false);//更新控制元件顯示
}
上一篇:MFC介面程式設計基礎(25):設計記錄操作介面 下一篇:MFC介面程式設計基礎(27):排序和篩選