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):排序和篩選 |
---|