南昌大学数据库实验报告8文档格式.docx
《南昌大学数据库实验报告8文档格式.docx》由会员分享,可在线阅读,更多相关《南昌大学数据库实验报告8文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
BOOLExecuteSQL(_bstr_tbstrSQL);
voidExitConnect();
};
建立到数据源的连接
voidADOConn:
:
OnInitADOConn()//ADOConn.cpp
{:
CoInitialize(NULL);
//初始化OLE/COM库环境
try
{//创建Connection对象
m_pConnection.CreateInstance("
ADODB.Connection"
);
//设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_tstrConnect="
Provider=SQLOLEDB;
Server=a5;
Database=HrMan;
uid=sa;
pwd=;
"
;
m_pConnection->
Open(strConnect,"
adModeUnknown);
}//捕捉异常
catch(_com_errore)
{//显示错误信息
AfxMessageBox(e.Description());
}
}
取得表中的记录到记录集
_RecordsetPtr&
ADOConn:
GetRecordSet(_bstr_tbstrSQL)
{try
{//连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
//创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
//取得表中的记录
m_pRecordset->
Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}//返回记录集
returnm_pRecordset;
}
执行SQL语句
{//_variant_tRecordsAffected;
try{//是否已经连接数据库
if(m_pConnection==NULL)
//Connection对象的Execute方法:
(_bstr_tCommandText,
//VARIANT*RecordsAffected,longOptions)
//其中CommandText是命令字串,通常是SQL命令。
//参数RecordsAffected是操作完成后所影响的行数,
//参数Options表示CommandText的类型:
adCmdText-文本命令;
adCmdTable-表名
//adCmdProc-存储过程;
adCmdUnknown-未知
Execute(bstrSQL,NULL,adCmdText);
returntrue;
{AfxMessageBox(e.Description());
returnfalse;
}}
关闭连接
ExitConnect()
{
//关闭记录集和连接
if(m_pRecordset!
=NULL)
Close();
m_pConnection->
//释放环境
:
CoUninitialize();
4.为表创建类
classCEmployees//Employees.h
{private:
intEmp_id;
CStringEmp_name;
CStringSex;
CStringTitle;
floatWage;
intDep_id;
CEmployees();
virtual~CEmployees();
//设置和读取成员变量值
intGetEmp_id();
voidSetEmp_id(intvEmpId);
CStringGetEmp_name();
voidSetEmp_name(CStringvEmpName);
CStringGetSex();
voidSetSex(CStringvSex);
CStringGetTitle();
voidSetTitle(CStringvTitle);
floatGetWage();
voidSetWage(floatvWage);
intGetDep_id();
voidSetDep_id(intvDepId);
//数据库操作
voidsql_insert();
voidsql_update(CStringcEmpId);
voidsql_delete(CStringcEmpId);
//根据员工编号读取所有字段值
voidGetData(CStringcEmpId);
表类成员函数的实现
CEmployees:
CEmployees()
Emp_id=0;
Emp_name="
Sex="
Title="
Wage=0;
Dep_id=0;
intCEmployees:
GetEmp_id()
returnEmp_id;
voidCEmployees:
SetEmp_id(intvEmpId)
Emp_id=vEmpId;
CStringCEmployees:
GetEmp_name()
{returnEmp_name;
SetEmp_name(CStringvEmpName)
{Emp_name=vEmpName;
GetSex()
{returnSex;
SetSex(CStringvSex)
Sex=vSex;
GetTitle()
returnTitle;
SetTitle(CStringvTitle)
Title=vTitle;
floatCEmployees:
GetWage()
returnWage;
SetWage(floatvWage)
Wage=vWage;
GetDep_id()
returnDep_id;
SetDep_id(intvDepId)
Dep_id=vDepId;
5.表类成员插入函数
sql_insert()
{//连接数据库
ADOConnm_AdoConn;
m_AdoConn.OnInitADOConn();
//设置INSERT语句
CStringstrWage;
strWage.Format("
%f"
Wage);
_bstr_tvSQL;
vSQL="
INSERTINTOEmployees(Emp_name,Sex,Title,Wage,Dep_id)VALUES('
+Emp_name+"
'
'
+Sex+"
+Title+"
+strWage+"
1)"
//执行INSERT语句
m_AdoConn.ExecuteSQL(vSQL);
//断开与数据库的连接
m_AdoConn.ExitConnect();
sql_update(CStringcEmpId)
{ADOConnm_AdoConn;
//连接数据库
//设置UPDATE语句
UPDATEEmployeesSETEmp_name='
+Emp_name+"
Sex='
+Sex+"
Title='
Wage="
+strWage+"
WHEREEmp_id="
+cEmpId;
//执行UPDATE语句
表类成员删除函数
sql_delete(CStringcEmpId)
//连接数据库
//设置DELETE语句
DELETEFROMEmployeesWHEREEmp_id="
//执行DELETE语句
读取员工信息
GetData(CStringcEmpId)
//设置SELECT语句
SELECT*FROMEmployeesWHEREEmp_id="
//执行SELETE语句
m_pRecordset=m_AdoConn.GetRecordSet(vSQL);
if(m_pRecordset->
adoEOF==1)//返回各列的值
else
{Emp_id=atoi(cEmpId);
Emp_name=(LPCTSTR)(_bstr_t)m_pRecordset->
GetCollect("
Emp_Name"
Sex=(LPCTSTR)(_bstr_t)m_pRecordset->
Sex"
Title=(LPCTSTR)(_bstr_t)m_pRecordset->
Title"
Wage=atof((LPCTSTR)(_bstr_t)m_pRecordset->
Wage"
));
Dep_id=atoi((LPCTSTR)(_bstr_t)m_pRecordset->
Dep_id"
}//断开与数据库的连接
添加:
IDC_ADD_BUTTON
修改:
IDC_MODI_BUTTON
删除:
IDC_DEL_BUTTON
关闭:
IDC_CLOSE_BUTTON
IDC_ADODC1
COMMANDTYPE1-TEXTCOMMANDTYPE
RecordSourceSELECT*FROMEmployees
IDC_DATAGRID1
CAPTION:
员工信息
DataSource:
IDC_ADODC1
6.添加成员变量
添加成员函数
voidCAdoDlg:
RefreshData()
{//设置ADOData控件的数据源
m_adodc.SetRecordSource("
SELECTEmp_id,Emp_nameAS员工姓名,SexAS性别,TitleAS职务,WageAS工资FROMEmployees"
m_adodc.Refresh();
//设置列宽度
_variant_tvIndex;
vIndex=long(0);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(0);
vIndex=long
(1);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100);
vIndex=long
(2);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(80);
vIndex=long(3);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100);
vIndex=long(4);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(90);
在AdoDlg.cpp中的成员函数OnInitDialog()中添加代码:
RefreshData();
并在其中包括
#include"
Columns.h"
Column.h"
COMDEF.H"
EditDlg.h"
_recordset.h"
datagrid.h"
Employees.h"
在datagrid.cpp中添加成员函数
CStringCDataGrid:
GetItem(intColNum)
{CColumnscols=GetColumns();
VARIANTv_ColNum,v_Value;
//设置列编号
v_ColNum.vt=VT_I2;
v_ColNum.iVal=ColNum;
//根据列编号返回CColumn对象
CColumncol=cols.GetItem(v_ColNum);
//读取列的
v_Value=col.GetValue();
returnv_Value.bstrVal;
并添加#include"
并在datagrid.h中声明
CStringGetItem(intColNum);
6.添加对话框资源
IDD_DIALOG1编辑员工信息。
为这个对话框创建新类CEditDlg。
为其添加成员变量:
CStringcEmpId;
//员工号添加时为空
CStringstrSex;
//员工性别
设置控件属性和连接成员变量
为CEditDlg成员变量初始化
CEditDlg:
CEditDlg(CWnd*pParent/*=NULL*/)
CDialog(CEditDlg:
IDD,pParent)
{//{{AFX_DATA_INIT(CEditDlg)
m_EmpName=_T("
m_Title=_T("
m_Wage=0.0f;
//}}AFX_DATA_INIT
voidCEditDlg:
DoDataExchange(CDataExchange*pDX)
{CDialog:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEditDlg)
DDX_Control(pDX,IDC_SEX_COMBO,m_Sex);
DDX_Text(pDX,IDC_EMPNAME_EDIT,m_EmpName);
DDX_Text(pDX,IDC_TITLE_EDIT,m_Title);
DDX_Text(pDX,IDC_WAGE_EDIT,m_Wage);
//}}AFX_DATA_MAP
OnOK()
{CEmployeesemp;
//TODO:
Addextravalidationhere
UpdateData(true);
if(m_EmpName=="
)//检查数据有效性
{MessageBox("
请输入员工姓名"
return;
}//对CEmployees对象赋值
m_Sex.GetLBText(m_Sex.GetCurSel(),strSex);
emp.SetEmp_name(m_EmpName);
emp.SetSex(strSex);
emp.SetTitle(m_Title);
emp.SetWage(m_Wage);
emp.SetDep_id
(1);
//根据成员变量cEmpId的值,决定是插入数据,还是修改数据
if(cEmpId=="
)//插入数据emp.sql_insert();
elseemp.sql_update(cEmpId);
CDialog:
OnOK();
OnCancel()
OnCancel();
Addextracleanuphere
BOOLCEditDlg:
OnInitDialog()
OnInitDialog();
if(strSex=="
男"
)//TODO:
Addextrainitializationhere
m_Sex.SetCurSel(0);
m_Sex.SetCurSel
(1);
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
在EditDlg.cpp中添加
#include"
Employees.h“
在Employees.cpp中添加
ADOConn.h
在AdoDlg.cpp中添加成员函数
OnAddButton()
{//TODO:
Addyourcontrolnotificationhandlercodehere
CEditDlgdlg;
dlg.cEmpId="
dlg.strSex="
if(dlg.DoModal()==IDOK)
RefreshData();
OnCloseButton()
OnCancel();
}voidCAdoDlg:
OnModiButton()
if(m_adodc.GetRecordset().GetEof()==1)
没有数据"
return;
dlg.cEmpId=m_datagrid.GetItem(0);
dlg.m_EmpName=m_datagrid.GetItem
(1);
dlg.strSex=m_datagrid.GetItem
(2);
dlg.m_Title=m_datagrid.GetItem(3);
dlg.m_Wage=atof(m_datagrid.GetItem(4));
OnDelButton()
请选择要删除的数据"
if(MessageBox("
是否删除当前记录?
请确认"
MB_YESNO)==IDYES)
{CEmployeesemp;
emp.sql_delete(m_data