VC++数据库实验实验七Word格式文档下载.docx

上传人:b****4 文档编号:16599113 上传时间:2022-11-24 格式:DOCX 页数:16 大小:118.53KB
下载 相关 举报
VC++数据库实验实验七Word格式文档下载.docx_第1页
第1页 / 共16页
VC++数据库实验实验七Word格式文档下载.docx_第2页
第2页 / 共16页
VC++数据库实验实验七Word格式文档下载.docx_第3页
第3页 / 共16页
VC++数据库实验实验七Word格式文档下载.docx_第4页
第4页 / 共16页
VC++数据库实验实验七Word格式文档下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

VC++数据库实验实验七Word格式文档下载.docx

《VC++数据库实验实验七Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《VC++数据库实验实验七Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。

VC++数据库实验实验七Word格式文档下载.docx

varchar(10)

姓名

age

int

年龄

dept

char(4)

所在系号

comment

varchar(8)

评语

s表的创建方法在此不详述。

2基于ADO方式的实验步骤

此例中所用数据库与上例中相同;

此例中无需创建数据源。

(1)创建VC应用程序

打开VC++6.0,新建工程。

选择MFCAppWizard(exe),工程名为exec2,存放在D盘实验文件夹里。

点击“确定”,在弹出的窗口中选择“基本对话框”,以后的步骤没有需要修改的地方,可以直接点击“完成。

”这样一个基于基本对话框的工程就创建好了。

(2)界面设计

在工作区左边的树型结构中,选择ResourceView,展开Dialog节点,双击IDD_EXEC2_DIALOG,打开该对话框。

在这里添加所需控件。

如图17所示。

图17

为编辑框和列表框添加变量。

在界面右键单击,选择“建立类向导”,弹出如图18所示窗口。

图18

本例中需要为编辑框IDC_AGE,IDC_COMMENT,IDC_DEPT,IDC_NAME,IDC_SNO,列表框IDC_LIST添加变量。

以IDC_AGE为例,点击“ADDVariable”弹出如图19所示窗口。

图19

这里变量名为m_age,类型可从下拉框里选。

添加变量完成之后类向导如图20所示。

图20

为按钮添加函数,双击按钮可为其添加函数,在exec2Dig.cpp文件里。

(3)与ADO相关的代码设计

引入ADO库文件,使用ADO前必须在工程的StdAfx.h头文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。

代码如下所示:

//加入ADO支持库

#import"

c:

\programfiles\commonfiles\system\ado\msado15.dll"

\

no_namespace\

rename("

EOF"

"

adoEOF"

定义ADO连接变量指针,在exec2.h文件的classCExec2App:

publicCwinApp方法中添加代码如下:

//定义ADO连接变量指针

_ConnectionPtrm_pConnection;

该指针为整个应用程序共享,所以放在public下面。

定义ADO连接、命令、记录集变量指针,在exec2Dlg.h文件的classCExec2Dlg:

publicCDialog方法中添加如下代码:

//定义ADO连接、命令、记录集变量指针

_CommandPtrm_pCommand;

_RecordsetPtrm_pRecordset;

初始化OLE/COM库环境。

必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。

在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。

在本例中,在exec2.cpp文件的BOOLCExec2App:

:

InitInstance()成员函数里添加如下代码:

//初始化COM,创建ADO连接等操作

AfxOleInit();

m_pConnection.CreateInstance(__uuidof(Connection));

//在ADO操作中建议语句中要常用try...catch()来捕获错误信息,

//因为它有时会经常出现一些想不到的错误

try

{

//打开本地SqlServer库student

m_pConnection->

Open("

Provider=Microsoft.Jet.OLEDB.4.0;

DataSource=student.mdb"

"

"

adModeUnknown);

"

//DataSource后是数据库名

//这里使用的windows验证,没有设置用户名和密码,

}

catch(_com_errore)

{

AfxMessageBox("

数据库连接失败!

);

returnFALSE;

}

在exec2Dlg.cpp文件中添加代码。

在#endif下面添加如下代码:

externCExec2ApptheApp;

//在此引用应用类中的theApp来获取库连接指针

在BOOLCExec2Dlg:

OnInitDialog()函数中添加如下代码:

//TODO:

Addextrainitializationhere

//使用ADO创建数据库记录集

m_pRecordset.CreateInstance(__uuidof(Recordset));

//在ADO操作中建议语句中要常用try...catch()来捕获错误信息,

//因为它有时会经常出现一些想不到的错误

try

m_pRecordset->

SELECT*FROMs"

//查询s表中所有字段

theApp.m_pConnection.GetInterfacePtr(),//获取库接库的IDispatch指针

adOpenDynamic,

adLockOptimistic,

adCmdText);

catch(_com_error*e)

AfxMessageBox(e->

ErrorMessage());

至此,与ADO相关的代码都已添加完了。

下面在exec2Dlg.cpp文件中添加应用代码。

(4)与功能相关的代码设计

在界面上用到列表框,当鼠标点击列表框的某一行时,其中的数据能够在编辑框中显示出来,这要用到列表框的一个函数。

添加此函数的方法如下:

摁住Ctrl和w键,进入类向导,如图21所示。

 

图21

选择IDC_LIST,在右边的Messages下面选择LBN_SELCHANGE,然后点击“AddFunction”按钮,最后点击“确定”按钮,即为列表框添加了此函数。

具体代码如下:

//名称:

OnSelchangeList

//功能:

当每次选择新的记录时,都会移动指针到新的记录位置并将值显示出来

voidCExec2Dlg:

OnSelchangeList()

{

intcurSel=m_list.GetCurSel();

_variant_tvar,varIndex;

if(curSel<

0)

return;

//先将指针移向第一条记录,然后就可以相对第一条记录来随意移动记录指针

MoveFirst();

Move(long(curSel));

var=m_pRecordset->

GetCollect("

sname"

if(var.vt!

=VT_NULL)

m_sname=(LPCSTR)_bstr_t(var);

age"

m_age=(LPCSTR)_bstr_t(var);

sno"

m_sno=(LPCSTR)_bstr_t(var);

dept"

m_dept=(LPCSTR)_bstr_t(var);

comment"

m_comment=(LPCSTR)_bstr_t(var);

UpdateData(false);

}

将数据库中的数据显示在列表框中,添加函数ListData()。

添加的方法是,在工作区左边的树型结构中,选择ClassView,右键单击CExec2Dlg,在弹出的菜单中选择AddMemberFunction,出现如图22所示的窗口,类型为void,函数描述为ListData()。

图22

此函数的具体代码如下:

ListData

将数据库中的数据显示在列表框中

ListData()

_variant_tvar;

CStringstrname,strage,strsno,strdept,strcom;

//清空列表框

m_list.ResetContent();

strname=strage=strsno=strdept=strcom="

;

//因为它有时会经常出现一些想不到的错误。

if(!

m_pRecordset->

BOF)

m_pRecordset->

else

{

AfxMessageBox("

表内数据为空"

return;

}

//读入库中各字段并加入列表框中

while(!

adoEOF)

var=m_pRecordset->

if(var.vt!

strsno=(LPCSTR)_bstr_t(var);

strname=(LPCSTR)_bstr_t(var);

strage=(LPCSTR)_bstr_t(var);

strdept=(LPCSTR)_bstr_t(var);

strcom=(LPCSTR)_bstr_t(var);

m_list.AddString(strsno+"

-->

"

+strname+"

+strage+"

+strdept+"

+strcom);

MoveNext();

//默认列表指向第一项,同时移动记录指针并显示

m_list.SetCurSel(0);

OnSelchangeList();

插入按钮对应的函数代码如下:

OnWritedata

将编辑框中输入的学生信息插入到s表中

OnWritedata()

UpdateData();

if(m_sname=="

||m_sno=="

学号和姓名信息不能为空!

//写入各字段值

AddNew();

PutCollect("

_variant_t(m_sno));

_variant_t(m_sname));

atol(m_age));

_variant_t(m_dept));

_variant_t(m_comment));

Update();

插入成功!

//更新显示其库内容

intnCurSel=m_list.GetCurSel();

ListData();

m_list.SetCurSel(nCurSel);

//移动记录指针到新的位置

修改按钮对应的函数代码如下:

OnModify

修改学生信息

OnModify()

//更新对话框数据

if(m_list.GetCount()==0)

表中记录数为空!

elseif(m_list.GetCurSel()<

0||m_list.GetCurSel()>

m_list.GetCount())

//修改当前记录的字段值

//重新读入库记录更新显示

删除按钮对应的函数代码如下:

OnDelete

删除选中的学生信息

OnDelete()

//删除当前行记录

Delete(adAffectCurrent);

//删除列表中当前值

m_list.DeleteString(nCurSel);

if(nCurSel==0&

&

(m_list.GetCount()!

=0))

m_list.SetCurSel(nCurSel);

elseif(m_list.GetCount()!

=0)

m_list.SetCurSel(nCurSel-1);

查询按钮对应的函数代码如下:

OnQuery()

按照学号和姓名查询学生信息,如果只输入学号则只按照学号查询

//只输入姓名则只按照姓名查询,两者都没有输入则查询所有学生信息

UpdateData(TRUE);

//构造Sql语句

//为简单考虑,这里只把学号和姓名作为查询条件

CStringstrSql;

if(m_sname!

="

&

m_sno!

strSql.Format("

SELECT*FROMsWHEREsname='

%s'

ANDsno='

m_sname,m_sno);

elseif(m_sname!

m_sno=="

m_sname);

elseif(m_sname=="

SELECT*FROMsWHEREsno='

m_sno);

else

strSql="

//先关闭已经打开的记录集对象

Close();

//根据新的Sql查询语句,重新打开记录集对象

Open(strSql.AllocSysString(),

theApp.m_pConnection.GetInterfacePtr(),

adOpenDynamic,

adLockOptimistic,

adCmdText);

//将查询后得到的新记录集显示出来

ListData();

刷新按钮对应的函数代码如下:

OnRefresh

刷新编辑框和列表框

OnRefresh()

m_sno="

m_sname="

m_age="

m_dept="

m_comment="

UpdateData(false);

(5)运行结果

图23

五、实验总结

1.通过上面两个例子可以看出,基于ODBC的连接需要事先建立数据源,但连接时代码相对简单;

基于ADO的连接不需要建立数据源,连接代码比较复杂。

2.vc中与数据库相关的控件比较多,在第二个例子中仅使用了ListBox一种,实际上常用的还有ListCtrl,DataGrid等,这里不能一一介绍,同学们用到时可以再学习。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1