二.访问数据库程序
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.经编译运行得