
2.11 数据库维护模块设计

视频讲解
2.11.1 数据库维护模块概述
在系统的日常使用过程中,数据库损坏或数据库丢失的现象时有发生,为了避免该现象对用户造成影响,本系统中加入了数据库维护模块,用户可以通过该模块对数据库进行备份、还原及初始化等操作,大大提高了用户数据的安全性。数据库维护模块的运行效果如图2.40和图2.41所示。

图2.40 数据库备份运行效果

图2.41 数据库还原运行效果
2.11.2 数据库维护模块技术分析
由于本系统采用的是Access 2010数据库,所以在数据库的操作方面与SQL Server数据库有一定的不同,例如,数据库的备份操作,SQL Server数据库直接使用Backup语句即可实现,而Access数据库中没有Backup语句供程序员使用。在Access数据库中备份、还原数据库的方法其实与读者在Windows中备份文件的方法一样。在Access数据库中,备份数据库就是将源数据库复制到相应文件夹的过程,而还原数据库则是备份操作的逆操作,即将以前备份好的数据库复制并粘贴到现在数据库所在的文件夹中,对现有数据库进行覆盖操作以达到还原的目的。以备份操作为例,在系统进行复制前首先要获得当前数据库所在的位置,这时可以用GetCurrentDirectory方法获取当前数据库所在的地址路径。

2.11.3 数据库维护模块实现过程
1.数据库备份
数据库备份的具体实现过程如下:
(1)在Resources选项卡中插入一个对话框资源,为其新建一个CCopydlg类,在对话框中添加3个静态文本控件、两个编辑框控件和3个按钮控件。将“路径”编辑框控件的属性设置为Read-only,对其添加一个CEdit类型变量m_Edit;再对“请输入文件名”编辑框添加一个CString类型变量m_Name。
(2)在单击“浏览”按钮时,弹出一个文件路径选择对话框方便用户选择备份路径,代码如下:

(3)在添加完想要保存的路径后,用户要在编辑框中输入想保存的文件名称,随后给“确定”按钮添加如下代码:

2.数据库还原
Access数据库的还原操作其实就是备份操作的一个逆过程,备份操作是将原有数据库复制到指定文件夹,而还原操作则是将指定文件夹中的数据库文件复制到当前数据库文件夹中并进行覆盖,从而实现数据库的还原。
(1)在Resources选项卡中插入一个对话框资源,为其新建一个CReturndlg类,在对话框中添加两个静态文本控件、一个编辑框控件和3个按钮控件。将“路径”编辑框的属性设置为Read-only并为其添加一个CEdit类型变量m_Edit。
(2)在“还原”对话框中单击“浏览”按钮后,需要显示文件目录中某个文件,代码如下:

(3)在进行数据库还原操作前,系统自动判断当前程序数据库存放地址路径,以便用户复制数据库文件。为类添加一个WM_INITDIAOLG消息,代码如下:

(4)单击“还原”按钮时,系统自动将用户选取的数据库文件复制到当前数据库所在文件,代码如下:

3.数据库初始化
当数据库中存储的信息已经失效时,手动删除数据无疑增加了用户的工作量。为减轻用户的工作量,本系统添加了数据库初始化功能,执行该功能后将清空除用户信息表外其他所有数据表中的数据。
为菜单中的“数据库初始化”菜单项添加响应事件代码:

2.11.4 单元测试
在数据库还原过程中,有时会发生数据库不能正常还原到源数据库目录的情况,主要原因是将GetCurrentDirectory语句放在了“还原”按钮中,而GetCurrentDirectory语句的作用是获取当前目录,如果在数据库还原操作前进行了数据库备份操作,那么再次执行还原操作的结果就将文件直接复制到了刚刚备份操作所选择的目录中。
为解决这一问题,笔者在数据库还原类中定义了一个OnInitDialog消息,在打开还原窗口时,系统将通过这个消息初始化对话框找到正确的数据库目录,代码如下:
