今天突发奇想,想试试在应用程序中访问本机中的某个数据库,看看电脑装了VC6.0,同事还有office access于是想
从VC6.0中访问本地的Access数据库文件,结果居然成功了,故事是这样的:
第一步:建立数据库
首先,我打开office
access 2007 新建立了一个数据库文件,student.accdb,
我准备用它来管理学生的学号、姓名,然后我从应用程序中去检索这些信息。我在数据库中建立了一个表叫“class1”表示一班的同学,不懂数据库的问度娘去,class1的内容我编辑如下:
注意:“ID”表示学号,是数字类型,
“姓名”和“爱好”是文本类型;
仅仅实验一下而已,所以就一个表“class1”就行了,保存好这个数据库;
第二步:配置ODBC数据源
ODBC就是“Open
Database
Connevtivity”的意思,即开放式数据库连接,具体的还是去问度娘吧。那么如果要在windows应用程序中动态加载数据源,就要利用到windows中的ODBC数据源管理器。你要问数据源管理器是什么?我的理解是,它是windows操作系统提供的一项服务,它负责为应用程序管理和加载数据源,为开发者屏蔽一些繁琐的工作。在windowsODBC数据源管理器中加入数据源的步骤如下:
“控制面板”->
“管理工具”-> "ODBC数据源管理器", 弹出界面...
在“用户DSN”面板中单击“添加”按钮,在弹出的界面中选择Microsoft
Access Driver(*.mdb, *.accdb)那一项;
注意.mdb,和.accdb都是access数据库文件,只是accdb是较新版本access的格式....
单击“完成”弹出如下界面:
数据源名输入你喜欢的名字即可,建议和你建立的数据库文件同名;
然后点击“选择”按钮,定位到先前建立的“Student.accdb”数据库文件;
最后点击“确定”退出此管理器,配置就完成了。
第三步:建立VisualC++6.0
MFC工程
为了好看,还是用MFC搭个框架吧。
1.新建一个MFC工程,命名为“StudentManager";
2.MFC向导第一步选择”Single
Document“,即单文档应用程序;
3.MFC向导第二步选择”Database
view wiht file support“;
4.点击”Data
source“弹出界面,在ODBC下拉框中选择前面配置的Student数据源,且”Recordset type“
选择Dynaset,即动态的,如果没有找到Student,说明你配置有问题,重来一遍,仔细点.............
5.点击”OK“又弹出一个界面,让你选择数据库中具体的表,这里就一个,”calss1“,选中确定.....
6.MFC向导第三步,取消”ActiveX
Control“;
7.MFC向导第四步取消”Printing
and print preview“
8.MFC向导第五步和第六步全部默认,然后点击”Finish“完成工程的创建;
打开工程的源码,你会发现有一个CStudentManagerSet类,并且该类有m_ID,m_column1,m_column2三个变量,这些就对应class1表中的”学号“、”姓名“和”爱好“,该类在其成员函数DoFieldExchange中完成这三个变量到数据库表class1中内容的绑定,自己打开看吧....
第四步:代码编写
1.首先设置下主界面,如下
其中”学号“、”姓名“、”爱好“是三个静态文本框;
右上方三个编辑框(Edit
Box)的ID号分别是"ID_EDIT_NUMBER"、"ID_EDIT_NAME"、"ID_EDIT_HOBBY";
下两个按钮(Button)的ID号分别是"ID_BUTTON_PREV","ID_BUTTON_NEXT";
(不知道我在说什么的人,自己找本VC6.0的书看看去吧........O(∩_∩)O哈哈~)
2.打开MFC类向导,为三个编辑框(Edit
Box)分别关联三个变量,如下(点击”Add Variable“添加....):
3.在左边的类视图一栏中,点选CStudentManagerView类,为其添加一个成员函数,如下(右键,”Add member
function“...):
4.补充函数RefreshData的内容如下:
void CStudentManagerView::RefreshData()
{
char
tmp[10] = "";
itoa(m_pSet->m_ID, tmp, 10);//将数字格式的学号转换成文本格式
m_str_number = tmp;
m_str_name = m_pSet->m_column1;
m_str_hobby = m_pSet->m_column2;
UpdateData(FALSE);
}
5.打开CStudentManagerView类的函数OnInitialUpdate,编辑如下:
void CStudentManagerView::OnInitialUpdate()
{
m_pSet
=
&GetDocument()->m_studentManagerSet;
CRecordView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
try
{
//创建并打开数据集
m_pSet = new CStudentManagerSet();
m_pSet->Open();
}
catch(CDBException * pe)
{
//如果发生数据库异常则报告错误
AfxMessageBox(pe->m_strError);
pe->Delete();
}
RefreshData();
}
到这个时候,按”F5“编译并运行,已经可以出现如下效果了:
哇塞,居然看到数据库中的内容了.....是不是很激动啊,接着往下看。。。!!
下面为连个按钮(BUTTON)”下一个“和”上一个“实现响应函数,使得能够查看上一个或下一个学生信息....
6.回到主界面的资源编辑状态,双击按钮”上一个“,弹出对话框要求为响应函数输入名称,我们默认即可,
这样就建立了一个按钮的响应函数,同样的方法为”下一个“也建立一个响应函数...
7."上一个"的响应函数CStudentManagerView::OnButtonPrev内容编辑如下:
void CStudentManagerView::OnButtonPrev()
{
//
TODO: Add your control notification handler code here
if(m_pSet->IsBOF())
{
AfxMessageBox("已经到最前一项!");
return;
}
m_pSet->MovePrev();
RefreshData();
}
”下一个“的响应函数CStudentManagerView::OnButtonNext内容编辑如下:
void CStudentManagerView::OnButtonNext()
{
//
TODO: Add your control notification handler code here
if(m_pSet->IsEOF())
{
AfxMessageBox("已经到最后一项!");
return;
}
m_pSet->MoveNext();
RefreshData();
}
8.让我们再按下”F5“运行吧,这时,你已经可以通过点击按钮来逐个查看学生的信息了...
至于还能干出什么激动人心的是,自己发挥去吧!
总结:
CStudentManagerSet类是继承自类CRecordSet,
CRecordSet是微软为我们提供的支持类,利用它可以方便
对数据库中的表项进行编辑,查询等操作。整个过程最关键的步骤在于ODBC数据源的配置,和类CRecordSet的使用,当然中间诸多细节也很重要。看到这里,对于能够举一反三的同学,已经足够了...嗨嗨...
加载中,请稍候......