MFC:Microsoft Foundation Classes (微软基础类库)
基本思路:
使用Microsoft Access建立数据库,然后使用VS2015其进行连接与一些基本操作:
显示、增加、删除、排序、筛选
<文章最后会给出本工程文件压缩包的下载地址>
************************************************************************************************************************************
一:运行结果示范
1> 基本界面:
2> 增加记录
3> 删除记录(直接删除当前的数据,并移到下一个数据)
4> 排序(按照基本工资)
5> 筛选记录(按照基本工资筛选)
二:具体操作步骤
1> 使用Microsoft Access建立基本数据库
2> 为表格配置数据源(ODBC)
* 开放数据库连接(Open Database Connectivity,ODBC)
控制面板 -> 管理工具(在系统与安全中,如果找不到直接在控制面板页面搜索即可) -> 双击数据源 -> 点击添加(如图所示)
然后选择刚刚创建的数据库文件( .accdb ) ,然后填上数据源名点击确定
到此,已经完成了数据源的配置(已经做好了让VS连接Access的准备)
3> 新建MFC程序
选择单个文档:
然后下一步直到以下界面:
然后点击下一步,找到自己刚刚创建的数据库文件:
然后会再跳出这个页面,继续选择刚刚的数据库文件,点击确定:
在跳出一个警告框后,就会在你的数据库文件同名目录下新建一个数据源文件:
选择数据库中的表,即可完成这一步的配置:
然后直接点击完成,后面的设置直接默认:(这里有一个安全问题的警告会后面在解决)
4> 窗体界面的打开与构建
使用VS主界面最右侧的工具箱进行添加(如果没有工具箱,视图-> 工具箱打开)
设置成果图:
5> 为每个编辑框绑定数据源
(将数据库中的数据和编辑框中需要显示的数据进行关联,方便修改与显示)
1.首先右键编辑框,对每个数据框进行改名:
2.全部改名完成后,使用代码将二者进行绑定
代码部分:
void C人事管理系统View::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
// 可以在此处插入 DDX_Field* 函数以将控件“连接”到数据库字段,例如
// DDX_FieldText(pDX, IDC_MYEDITBOX, m_pSet->m_szColumn1, m_pSet);
// DDX_FieldCheck(pDX, IDC_MYCHECKBOX, m_pSet->m_bColumn2, m_pSet);
// 有关详细信息,请参阅 MSDN 和 ODBC 示例
DDX_FieldText(pDX, IDC_EDIT_JL, m_pSet->column_JL, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_ZGBH, m_pSet->column_ZGBH, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_ZGNL, m_pSet->column_ZGNL, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_ZGXB, m_pSet->column_ZGXB, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_GZSJ, m_pSet->column_GZSJ, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_SZBM, m_pSet->column_SZBM, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_Salary, m_pSet->column_JBGZ, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_ZGXM, m_pSet->column_ZGXM, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_ZC, m_pSet->column_ZC, m_pSet);
}
绑定的时候,第二个参数是编辑框的ID,第三个参数是数据库的表中的列名,列名默认为column1~n,可以在以下头文件中修改:
代码部分:
long column_ZGBH;
CStringW column_ZGXM;
CStringW column_ZGXB;
CStringW column_SZBM;
long column_ZGNL;
CStringW column_GZSJ; //这里设置为时间总是一大堆bug,将时间类型改为CStringW类型也OK
long column_JBGZ;
CStringW column_ZC;
CStringW column_JL;
3.修改错误部分,并初步运行显示数据库数据
双击该错误进行定位,然后将其注释掉:
至此,已经可以初步显示并进行修改了(修改后的数据会直接同步到数据库中)
六:实现记录的增加
<本篇文章将使用弹出一个新的窗体的方式来实现数据库中数据的增加,因为不使用这种方法,会产生各种各样的Bug>
1.右键新建一个窗体并对其进行一系列操作
复制第一个窗体的空间到这里来:
为新建的窗体添加一个类:
2.打开ADD.h,添加公有数据成员:
代码部分:
long column_ZGBH;
CStringW column_ZGXM;
CStringW column_ZGXB;
CStringW column_SZBM;
long column_ZGNL;
CStringW column_GZSJ; //这里设置为时间总是一大堆bug,将时间类型改为CStringW类型也OK
long column_JBGZ;
CStringW column_ZC;
CStringW column_JL;
再打开ADD.cpp文件(注意要在该文件中包含ADD.h头文件)
代码部分:
void ADD::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_JL, column_JL);
DDX_Text(pDX, IDC_EDIT_ZGBH, column_ZGBH);
DDX_Text(pDX, IDC_EDIT_ZGNL, column_ZGNL);
DDX_Text(pDX, IDC_EDIT_ZGXB, column_ZGXB);
DDX_Text(pDX, IDC_EDIT_GZSJ, column_GZSJ);
DDX_Text(pDX, IDC_EDIT_SZBM, column_SZBM);
DDX_Text(pDX, IDC_EDIT_Salary, column_JBGZ);
DDX_Text(pDX, IDC_EDIT_ZGXM, column_ZGXM);
DDX_Text(pDX, IDC_EDIT_ZC, column_ZC);
//下面的函数声明只能对于数据库元框架有效,对于额外定义的窗体,可以使用上面的方式
//DDX_FieldText(pDX, IDC_EDIT_JL, m_pSet->column_JL, m_pSet);
//DDX_FieldText(pDX, IDC_EDIT_ZGBH, m_pSet->column_ZGBH, m_pSet);
//DDX_FieldText(pDX, IDC_EDIT_ZGNL, m_pSet->column_ZGNL, m_pSet);
//DDX_FieldText(pDX, IDC_EDIT_ZGXB, m_pSet->column_ZGXB, m_pSet);
//DDX_FieldText(pDX, IDC_EDIT_GZSJ, m_pSet->column_GZSJ, m_pSet);
//DDX_FieldText(pDX, IDC_EDIT_SZBM, m_pSet->column_SZBM, m_pSet);
//DDX_FieldText(pDX, IDC_EDIT_Salary, m_pSet->column_JBGZ, m_pSet);
//DDX_FieldText(pDX, IDC_EDIT_ZGXM, m_pSet->column_ZGXM, m_pSet);
//DDX_FieldText(pDX, IDC_EDIT_ZC, m_pSet->column_ZC, m_pSet);
}
3.双击主窗体的“增加记录”Button进入相应单击事件代码区域:
代码部分:
void C人事管理系统View::OnBnClickedButtonAdd()
{
// TODO: 在此添加控件通知处理程序代码
ADD add;
if (add.DoModal() == IDOK)
{
m_pSet->AddNew();
m_pSet->column_GZSJ = add.column_GZSJ;
m_pSet->column_ZGXM = add.column_ZGXM;
m_pSet->column_ZGXB = add.column_ZGXB;
m_pSet->column_ZGNL = add.column_ZGNL;
m_pSet->column_JL = add.column_JL;
m_pSet->column_ZC = add.column_ZC;
m_pSet->column_JBGZ = add.column_JBGZ;
m_pSet->column_SZBM = add.column_SZBM;
m_pSet->column_ZGBH = add.column_ZGBH;
//这两个用来更新数据库中显示的内容并重新提取数据
m_pSet->Update();
m_pSet->Requery();
//数据移动到最后一个
m_pSet->MoveLast();
//更新显示视图
UpdateData(FALSE);
}
}
到这里已经可以实现数据库中的记录的增加了(运行截图就像文章开头那样)~
<到这里一路上一定会遇到各种各样Bug,有的可能没有解决,在文章最后会附上工程关键文件源码下载地址,选择使用>
七:实现记录的删除
void C人事管理系统View::OnBnClickedButtonDelete()
{
// TODO: 在此添加控件通知处理程序代码
m_pSet->Delete();
m_pSet->MoveNext();
if (m_pSet->IsEOF())
{
m_pSet->MoveLast();
}
if (m_pSet->IsEOF())
{
m_pSet->SetFieldNull(NULL);
}
UpdateData(FALSE);
}
八:实现记录的筛选
1> 首先新建一个窗体,为添加相应的类,在新定义头文件所对应的.cpp文件中进行编辑框与数据的绑定
绑定代码部分:
void SELECT::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_SELECT, search_value); //选框与数据变量的绑定
}
九:实现记录的排序
双击主窗体的"排序记录"Button:
void C人事管理系统View::OnBnClickedButtonSort() //按照基本工资排序
{
// TODO: 在此添加控件通知处理程序代码
m_pSet->m_strSort = "基本工资";
m_pSet->Requery();
UpdateData(FALSE);
}