《数据库技术及应用》实验报告文档格式.docx
《《数据库技术及应用》实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《《数据库技术及应用》实验报告文档格式.docx(41页珍藏版)》请在冰豆网上搜索。
源的操作,进而操作数据库。
下面是注册数据源的操作:
打开ODBC数据库管理器
在“ODBC数据源管理器”对话框中,单击“添加”按钮,弹出创建新数据源对话框,此处选择SQLSERVER为数据源驱动程序,如下图。
单击“完成”按钮后,弹出创建到SQLSERVER的新的数据源。
如下图。
成功建立数据源
以
2.创建单文档应用程序
1)启动VisualC++6.0,选择File|New,弹出New对话框,选择Projects标签,然后再列
表中选中选择MFCAppWizard[exe]选项,在“Projectname”文本框中输入工程文件名
(根据需要自己确定),在“Location”中指定应用文件创建的位置,如下图所示:
单击确定,选择单文档
点击数据源,按钮,弹出DatabaseOptions对话框如下图所示,在ODBC的下拉列
表中选择学生信息数据源。
单击OK,弹出SelectDatabaseTables对话框,如下图所示,选择自己要链接的表S。
单击OK,单击Next按钮,这一步中选择文档类型为容器类型,如下图所示。
单击Next,之后都是默认,单击Finish完成。
到此初步的工程已经建好,下面进行界
面的设计。
3.新建界面按钮
在项目工作窗口中选择ResourceView页面,双击Menu中的IDD_LIANXI2_FORM,
弹出文档模板和控件工具栏,构建界面如下图:
将学生信息系统部分的Editbox的ID分别改为IDC_ID_EDIT、IDC_NAME_EDIT、IDC_AGE_EDIT、IDC_DEPT_EDIT、IDC_CHECKNAME。
将按钮改为ID改为IDC_ADD、IDC_MODI、IDC_DEL、IDC_CHECK
4.添加新类CRecordsetAdd:
在工具栏上选择Insert|NewClass,添加一个新类CRecordset
Add,如下图所示:
单击OK,弹出DatabaseOptions对话框,如图所示,同样的选择数据源“学生信息”后,单击OK按钮,弹出SelectDatabaseTables对话框,选择表S,单击OK
5.数据的显示
在CRecordsetAdd中添加四个成员变量如下所示:
CStringm_Sno;
CStringm_Sname;
CStringm_Sage;
CStringm_Sdept;
同时其成员函数DoFieldExchange如下:
voidCRecordsetAdd:
:
DoFieldExchange(CFieldExchange*pFX)
{
//{{AFX_FIELD_MAP(CRecordsetAdd)
pFX->
SetFieldType(CFieldExchange:
outputColumn);
RFX_Text(pFX,_T("
[Sno]"
),m_Sno);
[Sname]"
),m_Sname);
RFX_Int(pFX,_T("
[Sage]"
),m_Sage);
[Sdept]"
),m_Sdept);
//}}AFX_FIELD_MAP
}
即采用了RFX机制实现了数据的交换。
在CLianxi2View:
DoDataExchange()函数中添加代码如下所示:
voidCLianxi2View:
DoDataExchange(CDataExchange*pDX)
CRecordView:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLianxi2View)
DDX_Text(pDX,IDC_EDID_QUERY,m_strQuery);
DDX_Text(pDX,IDC_SQL_EDIT,m_sql);
DDX_FieldText(pDX,IDC_EDIT1,m_pSet->
m_Sno,m_pSet);
DDX_FieldText(pDX,IDC_EDIT2,m_pSet->
m_Sname,m_pSet);
DDX_FieldText(pDX,IDC_EDIT4,m_pSet->
m_Sdept,m_pSet);
DDX_FieldText(pDX,IDC_EDIT3,m_pSet->
m_Sage,m_pSet);
//}}AFX_DATA_MAP
这样就实现了数据的显示问题。
点击界面上的红色圆圈里的翻页按钮,可以逐个查看记录或查看第一页、最后页的记录:
。
6.“添加”的实现:
为了添加记录,添加一个对话框资源:
在项目工作去窗口中选择ResourceView页面,右键单击Dialog选择插入Dialog,则添加了一个对话框,为其添加四个Editbox,其ID分别为IDC_ID、IDC_NAME、IDC_AGE、IDC_DEPT。
同时按照前面所描述的方法为该对话框添加类CAddNew,如下图所示:
单击View|MFCClassWizard,在Project中选择lianxi2,在Classname中选择CAddNew,
则在下面的界面中显示对话框中的界面,选中IDC_AGE,单击AddVariable,弹出如图的
对话框,添加变量的名称,选择其类型。
7.实现添加功能的函数
在主对话框中,即在ResourceView页面中,双击IDD_LIANXI2_FORM,出现已经设
计好的主对话框后,双击添加按钮,出现对话框如下:
单击OK,为其添加函数如下所示:
OnAdd()
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
CAddNewdlg;
CStringstr;
CStringstr1;
CDatabasedb;
if(IDOK==dlg.DoModal())
{
try
{
str1.Format("
INSERTINTOS(Sno,Sname,Sage,Sdept)values('
%s'
'
)"
dlg.m_id,dlg.m_name,dlg.m_age,dlg.m_dept);
db.Open("
学生信息"
);
db.ExecuteSQL(str1);
}
catch(CDBException*e)
AfxMessageBox(e->
m_strError);
return;
str.Format("
添加[%s]成功!
"
dlg.m_name);
MessageBox(str,NULL,MB_OK|MB_ICONINFORMATION);
m_pSet->
m_Sno=dlg.m_id;
m_Sname=dlg.m_name;
m_Sage=dlg.m_age;
m_Sdept=dlg.m_dept;
UpdateData(FALSE);
}
执行结果:
点击添加按钮,弹出对话框,填写信息如下:
点击确定按钮,
被添加的记录在界面上成功显示
8.实现删除功能的函数
OnDel()
//CAddNewdlg;
CRecordsetAddm_pdatabase;
if(m_pdatabase.IsOpen())
m_pdatabase.Close();
删除记录[%s]成功!
m_pSet->
m_Sname);
m_pdatabase.Open(CRecordset:
snapshot,NULL,CRecordset:
none);
CRecordsetStatusstatus;
/////cl
GetStatus(status);
//////cl
m_pdatabase.Delete();
if(!
m_pdatabase.IsEOF())
m_pdatabase.MoveLast();
else
m_pdatabase.SetFieldNull(NULL);
Requery();
}
catch(CDBException*e)
执行结果如下:
删除成功,界面显示其他记录。
9.实现修改功能的函数
OnModi()
UPDATESSETSname='
Sage='
Sdept='
WHERESno='
dlg.m_name,dlg.m_age,dlg.m_dept,dlg.m_id);
修改[%s]成功!
;
}
修改前
点击修改按钮,弹出对话框,填写信息
修改结果:
10.为查询添加函数
OnCheck()
m_checkname.TrimLeft();
if(m_checkname.IsEmpty())
MessageBox("
要查询的学号不能为空!
CRecordsetrecset(&
db);
CStringstrSQL;
strSQL.Format("
SELECT*FROMSWHERESno='
m_checkname);
//执行的SQL语句
//打开查询结果集
recset.Open(CRecordset:
forwardOnly,strSQL,CRecordset:
readOnly);
if(recset.IsEOF())//查询结果集为空
没有查到你要找的学生记录!
MessageBox("
查询成功!
CStringtemp1,temp2,temp4;
CStringtemp3;
recset.GetFieldValue("
Sno"
temp1);
Sname"
temp2);
Sage"
temp3);
Sdept"
temp4);
//(int)(LPCTSTR)
m_Sno=temp1;
m_Sname=temp2;
m_Sage=temp3;
m_Sdept=temp4;
m_pSet->
IsEOF())
recset.Close();
输入查询信息:
点击主键查询后:
11.数据库记录显示
在MainFrm.cpp中,将indicators数组修改成如下代码:
staticUINTindicators[]=
ID_SEPARATOR,
ID_SEPARATOR,//statuslineindicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
在MainFrm.h中,将m_wndStatusBar改为public:
public:
//controlbarembeddedmembers
CStatusBarm_wndStatusBar;
CToolBarm_wndToolBar;
在“建立类向导”中,选中OnCommand,点击AddFunction如下图:
在该函数中添加代码:
BOOLCLianxi2View:
OnCommand(WPARAMwParam,LPARAMlParam)
Addyourspecializedcodehereand/orcallthebaseclass
CMainFrame*pFrame=(CMainFrame*)AfxGetApp()->
m_pMainWnd;
CStatusBar*pStatus=&
pFrame->
m_wndStatusBar;
if(pStatus)
CRecordsetStatusrStatus;
GetStatus(rStatus);
当前记录:
%d/总记录:
%d"
1+rStatus.m_lCurrentRecord,m_pSet->
GetRecordCount());
pStatus->
SetPaneText(1,str);
returnCRecordView:
OnCommand(wParam,lParam);
执行结果如图红色部分:
12.新建表。
添加按钮”新建表”,ID改为IDC_CreateTalbebutton1,函数如下:
OnCreateTalbebutton1()
//if(!
SQLConfigDataSource(NULL,ODBC_ADD_DSN,"
SQLServer"
"
DSN=学生信息"
));
try
db.ExecuteSQL("
CREATETABLETEACHERS(TeacherIDCHAR(4)"
TeacherNameCHAR(10)"
CourseCHAR(10))"
新建表成功!
点击按钮前,数据库中的表如下图:
点击新建表按钮:
打开数据库进行查看:
13.删除表
添加按钮“删除表”,ID改为IDC_DelNewtalbeButton。
函数代码如下:
OnDelNewtalbeButton()
DROPTABLETEACHERS"
m_xiugaiflag=0;
删除表成功!
数据库中已没有TEACHERS表
14.添加数据
添加了一个对话框,为其添加三个Editbox,其ID分别为IDC_TeacherID、IDC_TeacherName、IDC_Course。
在类向导里为其添加cstring类型的变量m_teacherid,m_teachername,m_Course.为其建立类CSHUJUNew,该类继承自类Cdialog。
再添加一个对话框,为其添加四个Editbox,其ID分别为IDC_TeacherID、IDC_TeacherName、IDC_Course、IDC_TeacherAge。
在类向导里为其添加cstring类型的变量m_teacherid,m_teachername,m_Course,m_teacherage.为其建立类CSHUJUNew2,该类继承自类Cdialog。
设置一个xiugaiflag标志,当表被修改时,xiugaiflag标志置为1。
否则,置为0。
当xiugaiflag==0时调用教师信息表1,xiugaiflag==1时调用教师信息表2
添加按钮“添加数据”,ID改为IDC_AddNewtableButton。
OnAddNewtableButton()
CSHUJUNewdlg;
CSHUJUNew2dlg2;
if(m_xiugaiflag==0)
{if(IDOK==dlg.DoModal())
str1.Format("
INSERTINTOTEACHERS(TeacherID,TeacherName,Course)VALUES('
dlg.m_teacherid,dlg.m_teachername,dlg.m_Course);
catch(CDBException*e)
e->
ReportError();
添加数据成功!
elseif(m_xiugaiflag==1)
if(IDOK==dlg2.DoModal())
INSERTINTOTEACHERS(TeacherID,TeacherName,Course,TeacherAge)VALUES('
dlg2.m_teacherid,dlg2.m_teachername,dlg2.m_Course,dlg2.m_teacherage);
点击添加数据按钮,填写教师信息表
点击确定,查看数据库
点击修改表后,再点击添加数据按钮,
查看数据库
15.修改表
添加按钮“修改表”,ID修改为IDC_ModButton,
否则,置为0
OnModButton()
Addyourcontrol