二.訪問資料庫程序
1需求分析:
此系統實現如下系統功能:
(1)使得學生的管理工作更加清晰、條理化、自動化。
(2)查詢學生基本資料,容易地完成學生信息的查詢操作。
(3)
設計人機友好
界面
,功能安排合理,操作使用方便,並且進一步考慮系統在安全性,完整性,並發控制,
備份
和恢復等方面的功能要求。
2.系統功能設計:
實現功能:對表實行刪除一個記錄、移除一個
記錄
和増加一個錄。
ODBC應用程序
3.
程序流程:
應用程序使用基於
對話框
的MFC應用程序實現,各種操作都是通過對話框中的
控制項
來實現。
(1)建立一個ACCESS資料庫。
(2)建立ODBC數據源,並且連接
數據源
。
(3)資料庫應用程序中的
文檔
和
視圖
文檔視圖和資料庫有很密切的關系,它關繫到程序的設計
結構
。
(4)連接ACCESS資料庫
4.
部分實現代碼。
BOOL
CODBC2View::OnMove(UINT
nIDMoveCommand)
{
switch(nIDMoveCommand)
{case
ID_RECORD_PREV:
m_pSet-MovePrev();
if(!m_pSet-IsBOF())
break;
//如果移到記錄集的開始,
自動執行
MoveFirst
函數
case
ID_RECORD_FIRST:
m_pSet-MoveFirst();
break;
case
ID_RECORD_NEXT:
m_pSet-MoveNext();
if(!m_pSet-IsEOF())
break;
if(!m_pSet-CanScroll())
{//清空屏幕
m_pSet-SetFieldNull(NULL);
break;
}
case
ID_RECORD_LAST:
m_pSet-MoveLast();
break;
default:
//異常情況
ASSERT(FALSE);
}
//交換數據
UpdateData(FALSE);
return
TRUE;
//不再需要這個父類的函數
//return
CRecordView::OnMove(nIDMoveCommand);
}
void
CODBC2View::OnMoveToRecord()
{
CMoveToRecord
dlgMoveTo;
//創建CMoveToRecord類的對象
實例
if(dlgMoveTo.DoModal()==IDOK)
{CRecordset
*pSet=OnGetRecordset();
//獲得指向資料庫記錄的指針
if(pSet-CanUpdate()
!pSet-IsDeleted())
//確認所有的修改已經保存
{pSet-Edit();
if(!UpdateData())
return;
pSet-Update();
}
pSet-SetAbsolutePosition(dlgMoveTo.m_RecordID);
//設置新的位置
UpdateData(FALSE);
//更新表單
}
}
void
CODBC2View::OnDeleteRecord()
{
CRecordsetStatus
m_cStatus;
try{m_pSet-Delete();}
catch(CDBException*
m_pEx)
{AfxMessageBox(m_pEx-m_strError);
m_pEx-Delete();
m_pSet-MoveFirst();
//失敗的話,將
記錄指針
移到第一個記錄
UpdateData(FALSE);
return;
}
m_pSet-GetStatus(m_cStatus);
if(m_cStatus.m_lCurrentRecord==0)
m_pSet-MoveFirst();
//刪除了最後一個記錄
else
m_pSet-MoveNext();
UpdateData(FALSE);
}
void
CODBC2View::OnUpdateDeleteRecord(CCmdUI*
pCmdUI)
{
pCmdUI-Enable(!m_pSet-IsEOF());
}
void
CODBC2View::OnAddRecord()
{
CRecordset
*
pSet=OnGetRecordset();//獲取指向
數據集
的指針
if(pSet-CanUpdate()
!pSet-IsDeleted())//確認對數據集的任何修改均已經保存
{pSet-Edit();
if(!UpdateData())
return;
pSet-Update();
}
long
m_lNewID=m_pSet-GetMaxID()+1;
//獲取新的ID值
m_pSet-AddNew();
//添加一個新記錄
m_pSet-m___ID=m_lNewID;
//設置新的ID
標識
m_pSet-Update();
//保存新的記錄
m_pSet-Requery();
//刷新數據集
m_pSet-MoveLast();
//游標移
到最後
一條記錄
UpdateData(FALSE);
//更新表單
}
5.經編譯運行得