VC学生成绩管理系统及源码

上传人:痛*** 文档编号:57756151 上传时间:2022-02-24 格式:DOC 页数:44 大小:779.50KB
返回 下载 相关 举报
VC学生成绩管理系统及源码_第1页
第1页 / 共44页
VC学生成绩管理系统及源码_第2页
第2页 / 共44页
VC学生成绩管理系统及源码_第3页
第3页 / 共44页
点击查看更多>>
资源描述
VC学生成绩管理系统1. VC操作数据库简介本章节主要介绍VC中操作数据库的一般方法,有ADO Data控件的连接、ADODB对象的使用,当然在可视化的开发系统中用控件是的方法是比较简单的,但不是很灵活,相比较ADODB对象的方法比较灵活,但使用相对麻烦;这里读者会问,那这两个又是怎么去访问到数据库的呢?其实他们是通过一些接口去访问不同数据库的,而这些接口会屏蔽掉数据库访问协议和各个数据库之间的差别,这里最常用的有两种接口,一种就是ODBC、还有一种是OLE DB,下面我们介绍他们的结构:(a)数据库访问接口:(1) ODBC:ODBC其实是开放式数据库互连(Open Database Connectivity),是微软公司推出的一种实现应用程序和关系数据库之间通讯的方法标准,是一个接口标准。所以它实际上是一种标准,符合标准的数据库就可以通过SQL语言编写的命令对数据库进行操作,但只能针对关系数据库进行操作(如SQL Server,Oracle,Access,Excel等),目前所有的关系数据库都符合该标准。ODBC本质上是一组数据库访问API(应用程序编程接口),由一组函数调用组成,核心是SQL语句,他的结构图如下图1:图 1.1在具体操作时,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。(2) OLE DB:OLE DB:数据库链接和嵌入对象(Object Linking and Embedding DataBase)。OLE DB是微软提出的基于COM思想且面向对象的一种技术标准,目的是提供一种统一的数据访问接口访问各种数据源,这里所说的数据除了标准的关系型数据库中的数据之外,还包括邮件数据、Web上的文本或图形、目录服务(Directory Services)、以及主机系统中的文件和地理数据以及自定义业务对象等。OLE DB标准的核心内容就是要求对以上这些各种各样的数据存储(Data Store)都提供一种相同的访问接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型,他的结构图如下图2:图 1.2(b)VC中数据库访问对象:(1) ADO Data控件:ADO Data 控件使用 Microsoft ActiveX 数据对象(ADO) 来快速建立数据绑定的控件和数据提供者之间的连接。数据绑定控件是任何具有“数据源”属性的控件。数据提供者可以是任何符合 OLEDB 规范的数据源,这里可能是对ADO的一个封装,他访问数据库的接口可以使用ODBC、也可以使用OLEDB,但OLEDB灵活,不用在系统中配置数据源,而且效率高,所以现在使用OLEDB更多点,下面程序中也是用OLEDB来介绍的,这里简单介绍一下ADODC控件的使用层次图。ADODC在VC数据库程序设计中起了一个桥梁的作用,可以方便VC中的一些控件直接和数据库关联,他的使用示意图如下: 图 1.3(2) ADODB对象ADO是ActiveX Data Objects的缩写,是一项新的数据库的存取技术,他最主要包含三个对象,Connection、Recordset、Command,Connection对象:连接对象,负责通过OLEDB或ODBC建立与数据库之间的连接。Recordset对象:记录集对象,存放从数据库中得到的记录,这些可能是执行某条SQL语句的结果。Command对象:执行SQL语句返回Recordset类型的结果。基本的用法:(1) 连接数据源(2) 打开记录集对象(3) 使用记录集(4) 断开连接具体的应用后面在学生成绩录入中会介绍到。2. VC连接SQL Server数据库a) 用可视ADODC控件连接数据库,从ProjectAdd To ProjectComponents And Controls,如图将ADO、DBGird组控件选择到工具栏。(1) 设置ADODC的ConnectionString属性。选择组件控件图 2.1 (2)打开ADO的属性页,选择Control下的生成连接字符串。生成连接字符串点击打开属性页图 2.2图 2.3图 2.4(3)设置ADO Data Control的RecordSource属性。命令类型图 2.5 命令类型:adCmdText :值1,表示命令为SQL语句。adCmdTable :值2,表示命令为一表名。adCmdStoredProc:值4,表示命令是一存储过程名。adCmdUnknown :值8,表示不确定命令类型。(4)此时数据源控件已连接好数据库,可以直接访问它,或者可以充当数据表格控件的数据源使用。b) 用Connection对象连接数和操作据库(1) 创建Connection对象_ConnectionPtr pConnection = NULL;pConnection.CreateInstance(_uuidof(Connection);(2) 使用Connection对象HRESULT hr;_bstr_t strCnn(Provider=SQLOLEDB;Server=microsof-cee903dcr;DataBase=XSCJ;UID=wmx;PWD=1234;);/ “SQLOLEDB”使用OLEDB, “microsof-cee903dcr”SQL数据库服务器名,”XSCJ”数据库名,后面是用户明和密码hr = pConnection-Open(strCnn,NULL);(3) Command对象用来执行SQL语句来操作数据库的对象,根据参数的不同可以执行存储过程_CommandPtr pCmd = NULL;/定义command 对象指针_ParameterPtr pParam = NULL;_RecordsetPtr pRs = NULL;CString SqlStr;pCmd.CreateInstance(_uuidof(Command);pCmd-ActiveConnection = pConnection;/执行SQL语句SqlStr.Format(Select * from KC);pCmd-CommandText = (_bstr_t)SqlStr;pRs = pCmd-Execute(&vNULL,&vNULL,adCmdText);/返回记录集/执行存储过程SqlStr.Format(AddStuScore);pCmd-CommandText = (_bstr_t)SqlStr;pCmd-CommandType = adCmdStoredProc;/为存储过程创建输入参数pParam = pCmd-CreateParameter(XH,adVarChar,adParamInput,16);pParam-Value = _variant_t(“081101”);pCmd-Parameters-Append(pParam);/为存储过程创建输入参数pParam = pCmd-CreateParameter(KCM,adVarChar,adParamInput,16);pParam-Value = _variant_t(“计算机基础”);pCmd-Parameters-Append(pParam);/为存储过程创建输入参数pParam = pCmd-CreateParameter(CJ,adInteger,adParamInput,4);pParam-Value = _variant_t(long)80);pCmd-Parameters-Append(pParam);/为存储过程创建输入参数pParam = pCmd-CreateParameter(XF,adInteger,adParamInput,4);pParam-Value = _variant_t(long)0);pCmd-Parameters-Append(pParam);/执行存储过程pCmd-Execute(&vNULL,&vNULL,adCmdStoredProc);/关闭连接pConnection-Close();(4) Recordset对象用来操作表的更新删除等的对象_RecordsetPtr pRs = NULL;CString SqlStr;pRs.CreateInstance(_uuidof(Recordset);SqlStr.Format(select * from XS where XH = %s,”081101”);/打开记录集pRs-Open(_variant_t(SqlStr),_variant_t(IDispatch *) pConnection,true),adOpenKeyset,adLockOptimistic,adCmdText);if(!pRs-adoEOF)pRs-PutCollect(CSSJ, _variant_t(DATE)”1991-2-5”);/更新记录集pRs-Update();pRs-Close();pConnection-Close();3. 学生成绩管理系统本演示系统是一个用VC实现的简单的学生成绩管理系统,使用用可视ADODC控件和ADODB对象来访问后台数据库服务器的,包含学生信息的查询、学生休息的录入修改删除、学生成绩的录入修改,下面就分别说明各模块的具体实现。4. 系统主界面创建XSCJ多文档MFC工程,会生成框架,MainFrm、XSCJDoc、XSCJView等对象,这里演示的程序比较简单,所以代码主要加在XSCJView对象里,创建两个Dialog来实现学生信息修改和学生成绩修改。主界面菜单和工具条框架如下:菜单工具条图 4.1主要功能:主界面,导航作用,点击可进入操作窗口。创建过程:(1) 创建菜单: 图 4.2因为学生信息查询作为默认的界面,所以创建学生信息修改、学生成绩修改,打开VC的ClassWizad,添加菜单处理事件,这里选择映射到View对象里面。图 4.3(2) 创建工具条:学生信息修改、学生成绩修改图 4.4创建工具条,打开VC的ClassWizad,添加菜单处理事件,这里选择映射到View对象里面。图 4.5主要菜单代码:菜单Click的处理过程在CXSCJView对象里面,对应与CXSCJView.cpp文件学生信息修改菜单void CXSCJView:OnMenuitem32771() / TODO: Add your command handler code hereCStuInfoModify myStuInfoWin;myStuInfoWin.DoModal();学生成绩录入菜单void CXSCJView:OnMenuitem32772() / TODO: Add your command handler code hereCStuAddScore myStuAddScoreWin;myStuAddScoreWin.DoModal();工具条Click的处理,分别对应调用菜单中的处理过程学生信息修改工具条Click的处理void CXSCJView:OnButton32773() / TODO: Add your command handler code hereCStuInfoModify myStuInfoWin;myStuInfoWin.DoModal();成绩录入工具条Click的处理void CXSCJView:OnButton32774() / TODO: Add your command handler code hereCStuAddScore myStuAddScoreWin;myStuAddScoreWin.DoModal();5. 学生信息查询目的与要求:了解使用控件显示用SQL语句查询到的数据库中的数据,同时了解模糊查询的基本方法。程序界面:DataGrid控件ADODC控件学生选课表 图 5.1主要功能:实现简单查询的需要,输入条件进行模糊查询,各条件之间为与的关系,在查询的结果中移动记录指针可以查看这个学生的具体选课信息创建过程:(1) 在View的主窗体IDD_XSCJ_FORM上放入两个学生信息查询的ADODC和学生选课信息的ADODC、创建两个学生信息显示的DataGrid和学生选课信息显示的DataGrid,并分别起名为IDC_STUVIEWADODC, IDC_StuKCADO, IDC_STUVIEWDATAGRID,IDC_DGKC。放入IDC_StuXH学号Edit、IDC_StuXM姓名Edit和IDC_StuZYCB专业下拉列表框,为了美观IDC_StuKCADO隐藏在IDC_DGKC后面,增加IDC_StuZYCB专业下拉列表项,如图5.2。图 5.2(2) 设置IDC_STUVIEWADODC, IDC_StuKCADO的ConnectionString属性为Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=XSCJ;Data Source=microsof-cee903dcr(3) 设置IDC_STUVIEWADODC的RecordSource属性为select * from XS,CXB where XS.XB=CXB.XB(4) 设置IDC_STUVIEWDATAGRID的DataSource属性为IDC_STUVIEWADODC。(5) 设置IDC_StuKCADO的ConnectionString属性为Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=XSCJ;Data Source=microsof-cee903dcr(6) 设置IDC_StuKCADO的RecordSource属性为select * from XS,KC,XS_KCwhere XS.XH=XS_KC.XH and KC.KCH=XS_KC.KCH(7) 设置IDC_DGKC的DataSource属性为IDC_StuKCADO。(8) 使用ClassWizad对这些控件设定变量的绑定,选顶绑定的类型,Edit只要输入输出,所以简单的CString类型就可以满足,ADO则要选择CAdodc的变量类型,这样才能访问其属性和调用函数,如图5.3、5.4。图 5.3图 5.4完成的开发窗体如图:图 5.5实现过程:直接打开时由于控件属性的设置,所以显示所有记录,当输入查询条件时点击查询按钮则调用MakeSqlStr函数产生查询字符串,然后重新设置控件的属性,打开控件显示查询结果集。当查询结果学生信息记录集中移动记录指针时,可以在下面的选课表中看到学生选课的信息。主要代码:CXSCJView对象的构造函数,为了避免在未初始化完成就做一些操作,所以定义m_AdoInitFlag为初始化完成标记,标记有效才能做进一步操作。class CXSCJView : public COleDBRecordViewpublic:int m_AdoInitFlag;/添加成员变量CXSCJView类的构造函数,初始化成员对象CXSCJView:CXSCJView(): COleDBRecordView(CXSCJView:IDD)/AFX_DATA_INIT(CXSCJView)m_pSet = NULL;m_StuXH = _T();m_StuXM = _T();m_AdoInitFlag = 0;/初始化成0/AFX_DATA_INIT/ TODO: add construction code hereCXSCJView初始化函数,这里初始化IDC_STUVIEWDATAGRID的显示格式,添加表格头以及和数据库字段的绑定关系。void CXSCJView:OnInitialUpdate()m_pSet = &GetDocument()-m_xSCJSet;COleDBRecordView:OnInitialUpdate();CColumns cols; CColumn col;VARIANT vIndex;/ TODO: Add extra initialization here/增加表格列cols = m_ViewDBGrid.GetColumns();cols.Add(2);cols.Add(3);cols.Add(4);cols.Add(5);cols.Add(6);vIndex.vt = VT_UINT;/分别设定每列的属性,包括表头、绑定的数据库字段vIndex.uintVal = long(0);col=cols.GetItem(vIndex);col.SetDataField(XH);col.SetCaption(学号);vIndex.uintVal = long(1);col=cols.GetItem(vIndex);col.SetDataField(XM);col.SetCaption(姓名);vIndex.uintVal = long(2);col=cols.GetItem(vIndex);col.SetDataField(XBM);col.SetCaption(性别);vIndex.uintVal = long(3);col=cols.GetItem(vIndex);col.SetDataField(CSSJ);col.SetCaption(出生日期);vIndex.uintVal = long(4);col=cols.GetItem(vIndex);col.SetDataField(ZY);col.SetCaption(专业);vIndex.uintVal = long(5);col=cols.GetItem(vIndex);col.SetDataField(ZXF);col.SetCaption(总学分);vIndex.uintVal = long(6);col=cols.GetItem(vIndex);col.SetDataField(BZ);col.SetCaption(备注);/初始化标记设置m_AdoInitFlag = 1;m_ViewDBGrid.ReBind();m_ViewDBGrid.Refresh();m_StuViewAdodc.GetRecordset().MoveFirst();根据输入产生查询SQL语句的函数,以学号、姓名的输入信息和专业的选择生成模糊查询的SQL字符串CString CXSCJView:MakeSqlStr(void)CString SqlStr;CString TempStr;UpdateData(TRUE);if(!m_StuXH.IsEmpty()SqlStr += and XH like %;SqlStr += m_StuXH;SqlStr += % ;if(!m_StuXM.IsEmpty()/strcat(SqlStr,and XH like );SqlStr += and XM like %;SqlStr += m_StuXM;SqlStr += % ;/取选择的专业int index = m_StuZYCB.GetCurSel();m_StuZYCB.GetLBText(index,TempStr);TempStr.TrimRight();if(!TempStr.IsEmpty()SqlStr += and ZY = ;SqlStr += TempStr;SqlStr += ;return SqlStr;“查询”Click事件处理,用生成的模糊查询的SQL字符串,来刷新IDC_STUVIEWADODC,并显示到关联的DataGrid中,在DataGrid显示查询到的结果void CXSCJView:OnSearchb() / TODO: Add your control notification handler code hereCString SqlStr;SqlStr = select * from XS,CXB where XS.XB=CXB.XB + MakeSqlStr();m_StuViewAdodc.SetRecordSource(SqlStr);m_StuViewAdodc.Refresh();IDC_STUVIEWADODC控件有记录Move的消息的时候,以当前学生信息的学号作为查询条件,从XS_KC表中查找当前学生的选课记录,并显示到学生课程显示的IDC_DGKC中void CXSCJView:OnMoveCompleteStuviewadodc(long adReason, LPDISPATCH pError, long FAR* adStatus, LPDISPATCH pRecordset) / TODO: Add your control notification handler code hereif(m_AdoInitFlag = 0)return;_RecordsetPtr pRs;_variant_t varFld;CString SqlStr; pRs.CreateInstance(_uuidof(Recordset); pRecordset-QueryInterface(IID_IDispatch, (void *)&pRs);varFld = pRs-Fields-GetItem(XH)-Value;CString strXH(_T(varFld.bstrVal);strXH.TrimRight();SqlStr.Format(select XM,KCM,CJ,KC.XF from XS,KC,XS_KC Where XS.XH = XS_KC.XH And KC.KCH = XS_KC.KCH and XS.XH=%s,strXH);m_StuKCADO.SetRecordSource(SqlStr);m_StuKCADO.Refresh();注:为了方便控件显示学生性别,这里建立了一个表CXB(XB bit,XBM varchar(4))存放数据1,男;0,女,这样把要显示的表与其连接便可以显示中文的性别,如有类似情况可参照此方法。6. 学生信息修改目的与要求:了解使用Recordset对象对数据库操作的基本方法(增、删、改),以及存储显示图像的操作。程序界面:图 6.1主要功能:用户可以点击下面的DataGrid表格,移动记录指针,用户资料便同步映到上面的控件中去,修改控件中的信息,点击“更新”实现修改。如输入一个新的学号点击“更新”实现记录的添加,当选中当前记录点击“删除”时则可以删除此学生记录,点击“载入照片”可以选择学生照片,用于更新学生照片信息。创建过程:(1)在IDD_STU_INFO窗体上放入ADODC、DataGrid并起名为IDC_ADODC2, IDC_DATAGRID2。(2)设置StuADO的ConnectionString属性为Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=XSCJ;Data Source=microsof-cee903dcr(3)置IDC_ADODC2的RecordSource属性为select * from XS,CXB where XS.XB=CXB.XB(4)置IDC_DATAGRID2的DataSource属性为IDC_ADODC2。(5)在窗体上放入Image控件并起名为IDC_STUPIC,用来显示学生照片。(6)并在窗体上放入如图所需控件,并在ClassWizad定义关联变量,如图6.2。图 6.2设计好的窗体如图:图 6.3实现过程:当点击DataGrid中的记录时记录集游标也跟着移动,在OnMoveCompleteAdodc2事件中取出本条记录显示在上面的控件中,可以在控件中修改学生信息,点击载入照片可以选择学生照片,按更新按钮更新到数据库中,按删除按钮删除当前此记录,删除记录时系统会调用CheckXs触发器来保持数据的参照完整性。主要代码:CStuInfoModify 类中定义的全局变量class CStuInfoModify : public CDialog/ Constructionpublic:int m_InitCompleteFlags; /初始化标记CString m_StuZPPath;/照片路径IStream *m_pStuZPStm; /照片流变量longm_StuZPLen; /照片长度char * m_pStuZPBuf;/照片缓冲指针_variant_t m_varChunk;/可变类型,用来从COM接口中获取数据CStuInfoModify类构造函数CStuInfoModify:CStuInfoModify(CWnd* pParent /*=NULL*/): CDialog(CStuInfoModify:IDD, pParent)/AFX_DATA_INIT(CStuInfoModify)m_StuXH = _T();m_StuXM = _T();m_StuZXF = 0;m_StuBZ = _T();m_StuCSSJ = COleDateTime:GetCurrentTime();m_StuXBN = -1;/AFX_DATA_INITthis-m_InitCompleteFlags = 0;m_pStuZPStm = NULL;窗口初始化函数,定义IDC_DATAGRID2的显示风格,添加表格头以及和数据库字段的绑定关系。BOOL CStuInfoModify:OnInitDialog() CDialog:OnInitDialog();CColumns cols; CColumn col;VARIANT vIndex;/ TODO: Add extra initialization herecols = m_StuIMDBGrid.GetColumns();cols.Add(2);cols.Add(3);cols.Add(4);cols.Add(5);cols.Add(6);vIndex.vt = VT_UINT;vIndex.uintVal = long(0);col=cols.GetItem(vIndex);col.SetDataField(XH);col.SetCaption(学号);vIndex.uintVal = long(1);col=cols.GetItem(vIndex);col.SetDataField(XM);col.SetCaption(姓名);vIndex.uintVal = long(2);col=cols.GetItem(vIndex);col.SetDataField(XBM);col.SetCaption(性别);vIndex.uintVal = long(3);col=cols.GetItem(vIndex);col.SetDataField(CSSJ);col.SetCaption(出生日期);vIndex.uintVal = long(4);col=cols.GetItem(vIndex);col.SetDataField(ZY);col.SetCaption(专业);vIndex.uintVal = long(5);col=cols.GetItem(vIndex);col.SetDataField(ZXF);col.SetCaption(总学分);vIndex.uintVal = long(6);col=cols.GetItem(vIndex);col.SetDataField(BZ);col.SetCaption(备注);m_StuIMDBGrid.ReBind();m_StuIMDBGrid.Refresh();/添加专业项m_StuZY.InsertString(0,计算机);m_StuZY.InsertString(1,通信工程);/ TODO: Add extra initialization here/初始化完成标记m_InitCompleteFlags = 1;/移动记录指针到第一个m_StuADO.GetRecordset().MoveFirst();/重绘窗口消息:PostMessage(this-GetSafeHwnd(),WM_PAINT,0,0);return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE学生信息记录集记录指针移动完成事件,取出当前记录中的学生信息,更新到学号、姓名等显示控件中去,从ADO中取出学生照片,并以流的方式保存,调用重绘,在OnPaint中显示照片void CStuInfoModify:OnMoveCompleteAdodc2(long adReason, LPDISPATCH pError, long FAR* adStatus, LPDISPATCH pRecordset) /窗口初始化判断if(m_InitCompleteFlags = 0)return;_RecordsetPtr pRsZP = NULL;_ConnectionPtr pConnection = NULL;HRESULT hr;_RecordsetPtr pRs;_variant_t varFld; pRs.CreateInstance(_uuidof(Recordset); pRecordset-QueryInterface(IID_IDispatch, (void *)&pRs);varFld = pRs-Fields-GetItem(XH)-Value;CString strXH(_T(varFld.bstrVal);strXH.TrimRight();m_StuXH = strXH;varFld = pRs-Fields-GetItem(XM)-Value;CString strXM(_T(varFld.bstrVal);strXM.TrimRight();m_StuXM = strXM;varFld = pRs-Fields-GetItem(BZ)-Value;CString strBZ(_T(varFld.bstrVal);strBZ.TrimRight();m_StuBZ = strBZ;varFld = pRs-Fields-GetItem(CSSJ)-Value;m_StuCSSJ = varFld.date;varFld = pRs-Fields-GetItem(ZXF)-Value;m_StuZXF = varFld.intVal;varFld = pRs-Fields-GetItem(ZY)-Value;CString str(_T(varFld.bstrVal);str.TrimRight();/remove place on leftint index = m_StuZY.FindStringExact(0,(LPCTSTR)str);m_StuZY.SetCurSel(index);varFld = pRs-Fields-GetItem(XB)-Value;if(varFld.boolVal)m_StuXBN = 0;elsem_StuXBN = 1;/根据当前学号,从数据库中读出照片数据流,并保存在m_pStuZPStm流中,在OnPaint中会把他显示出来_bstr_t strCnn(SQLCONSTR);try_StreamPtr pStream = NULL; CString Sql;pStream.CreateInstance(_uuidof(Stream); variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR); pStream-PutType(adTypeBinary); pStream-Open(varOptional, adModeUnknown, adOpenStreamUnspecified, _bstr_t(), _bstr_t(); /打开连接,提取学生照片Sql.Format(Select ZP from XS where XH = %s,strXH);pConnection.CreateInstance(_uuidof(Connection);hr = pConnection-Open(strCnn,NULL);pRsZP.CreateInstance(_uuidof(Recordset);pRsZP-Open(_bstr_t)Sql,_variant_t(IDispatch *) pConnection,true),adOpenKeyset,adLockOptimistic,adCmdText);/取照片数据长度long lDataLength = pRsZP-Fields-GetItem(ZP)-ActualSize;if(lDataLength = 0)m_varChunk.Clear();else/取照片数据m_varChunk = pRsZP-Fields-GetItem(ZP)-GetChunk(lDataLength);if(m_varChunk.vt = (VT_ARRAY | VT_UI1)/复制照片数据到流中SafeArrayAccessData(m_varChunk.parray,(void *)&m_pStuZPBuf);HRESULT hr=CreateStreamOnHGlobal(m_pStuZPBuf,TRUE,&m_pStuZPStm);m_StuZPLen = lDataLength;SafeArrayUnaccessData (m_varChunk.parray);pRsZP-Close();pConnection-Close();catch(_com_error &e)/ Notify the user of errors if any._bstr_t bstrSource(e.Source();_bstr_t bstrDescription(e.Description();CString sError;sError.Format(Source : %s Description : %s ,(LPCSTR)bstrSource,(LPCSTR)bstrDescription);AfxMessageBox(sError);pRsZP-Close();pConnection-Close();/窗口重绘消息,显示照片:PostMessage(this-GetSafeHwnd(),WM_PAINT,0,0);UpdateData(FALSE);“删除”Click事件处理,取出当前记录的学号,然后通过commad对象执行delete语句来删除当前的学生记录,Delete语句的调用会引起CheckXs触发器的动作void CStuInfoModify:OnDelete() / TODO: Add your control notification handler code here_ConnectionPtr pConnection = NULL;_CommandPtr pCmd = NULL;HRESULT hr;_variant_t vNULL; vNULL.vt = VT_ERROR; vNULL.scode = DISP_E_PARAMNOTFOUND;/定义为无参数_bstr_t strCnn(SQLCONSTR);try/Open a connectionUpdateData(TRUE);pConnection.CreateInstance(_uuidof(Connection);hr = pConnection-Open(strCnn,NULL);pCmd.CreateInstance(_uuidof(Command);pCmd-ActiveConnection = pConnection;CString SqlStr;SqlStr.Format(delete from XS where XH = %s,m_StuXH);pCmd-CommandText = (_bstr_t)SqlStr;pCmd-Execute(&vNULL,&vNULL,adCmdText);pConnection-Close();AfxMessageBox(删除成功!);catch(_com_error &e)/ Notify the user of errors if any._bstr_t bstrSource(e.Source();_bstr_t bstrDescription(e.Description();CString sError;pConnection-Close();sError.Format(Source : %s Description : %s ,(LPCSTR)bstrSource,(LPCSTR)bstrDescription);AfxMessageBox(sError);“载入照片”Click事件的处理,打开对话框,给用户选择照片,打开照片把照片数据写入到流中,在OnPaint 消息中显示照片,同时记录下选择的文件名和路径到全局m_StuZPPath变量中,给后面的更新学生信息使用void CStuInfoModify:OnBtzp() / TODO: Add your control notification handler code hereCFileStatus fstatus;CFile file;/LONG cb; LONG cb; / TODO: Add your control notification handler code here/打开文件选择对话框CFileDialog dlg(TRUE,jpg,*.jpg,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,JPEG(*.jpg)|*.jpg,GIF(*.gif)|*.gif,NULL); if(dlg.DoModal()=IDOK) /保存文件名m_StuZPPath=dlg.GetPathName(); Invalidate(); elsem_StuZPPath = ;/重文件中读出照片数据流,存放到m_pStuZPStm中,在OnPaint中会把他显示出来if (file.Open(m_StuZPPath,CFile:modeRead) & file.GetStatus(m_StuZPPath,fstatus) & (cb = fstatus.m_size) != -1) HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); LPVOID pvData = NULL; if (hGlobal != NULL) if (pvData = GlobalLock(hGlobal) != NULL) file.ReadHuge(pvData, cb); GlobalUnlock(hGlobal); m_StuZPLen = fstatus.m_size;CreateStreamOnHGlobal(hGlobal, TRUE, &m_pStuZPStm); file.Close();elsem_StuZPPath = ;/窗口重绘消息,显示照片:PostMessage(this-GetSafeHwnd(),WM_PAINT,0,0);窗口OnPaint消息,调用OleLoadPicture来解析照片,并显示到指定的Picture控件中去void CStuInfoModify:OnPaint() CPaintDC dc(this); / device context for paintingIPicture *pPic;CDC *pPicDC;/创建照片显示的设备DCCStatic *pStatic = (CStatic *)this-GetDlgItem(IDC_STUPIC);pPicDC = pStatic-GetDC();CRect rect;/解析照片数据if(SUCCEEDED(OleLoadPicture(m_pStuZPStm,m_StuZPLen,TRUE,IID_IPicture,(LPVOID*)&pPic) OLE_XSIZE_HIMETRIC hmWidth; OLE_YSIZE_HIMETRIC hmHeight; pPic-get_Width(&hmWidth); pPic-get_Height(&hmHeight); double fX,fY; /fX = (double)pPicDC-
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!