版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VC学生成绩管理系统1. VC操作数据库简介本章节主要介绍VC中操作数据库的一般方法,有ADO Data控件的连接、ADODB对象的使用,当然在可视化的开发系统中用控件是的方法是比较简单的,但不是很灵活,相比较ADODB对象的方法比较灵活,但使用相对麻烦;这里读者会问,那这两个又是怎么去访问到数据库的呢?其实他们是通过一些接口去访问不同数据库的,而这些接口会屏蔽掉数据库访问协议和各个数据库之间的差别,这里最常用的有两种接口,一种就是ODBC、还有一种是OLE DB,下面我们介绍他们的结构:(a)数据库访问接口:(1) ODBC:ODBC其实是开放式数据库互连(Open Database Con
2、nectivity),是微软公司推出的一种实现应用程序和关系数据库之间通讯的方法标准,是一个接口标准。所以它实际上是一种标准,符合标准的数据库就可以通过SQL语言编写的命令对数据库进行操作,但只能针对关系数据库进行操作(如SQL Server,Oracle,Access,Excel等),目前所有的关系数据库都符合该标准。ODBC本质上是一组数据库访问API(应用程序编程接口),由一组函数调用组成,核心是SQL语句,他的结构图如下图1:图 1.1在具体操作时,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的
3、联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。(2) OLE DB:OLE DB:数据库链接和嵌入对象(Object Linking and Embedding DataBase)。OLE DB是微软提出的基于COM思想且面向对象的一种技术标准,目的是提供一种统一的数据访问接口访问各种数据源,这里所说的"数据"除了标准的关系型数据库中的数据之外,还包括邮件数据、Web上的文本或图形、目录服务(Directory Services)、以及主机系统中的文件和地理数据以及自定义业务对象等。OLE DB标准的核心内容就是要求对以上这些各种各
4、样的数据存储(Data Store)都提供一种相同的访问接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型,他的结构图如下图2:图 1.2(b)VC中数据库访问对象:(1) ADO Data控件:ADO Data 控件使用 Microsoft ActiveX 数据对象(ADO) 来快速建立数据绑定的控件和数据提供者之间的连接。数据绑定控件是任何具有“数据源”属性的控件。数据提供者可以是任何符合 OLEDB 规范的数据源,这里可能是对ADO的一个封装,他访问数据库的接口可以使用ODBC、也可以使用OLEDB,但OLEDB灵活,不用在系统中配
5、置数据源,而且效率高,所以现在使用OLEDB更多点,下面程序中也是用OLEDB来介绍的,这里简单介绍一下ADODC控件的使用层次图。ADODC在VC数据库程序设计中起了一个桥梁的作用,可以方便VC中的一些控件直接和数据库关联,他的使用示意图如下: 图 1.3(2) ADODB对象ADO是ActiveX Data Objects的缩写,是一项新的数据库的存取技术,他最主要包含三个对象,Connection、Recordset、Command,Connection对象:连接对象,负责通过OLEDB或ODBC建立与数据库之间的连接。Recordset对象:记录集对象,存放从数据库中得到的记录,这些可
6、能是执行某条SQL语句的结果。Command对象:执行SQL语句返回Recordset类型的结果。基本的用法:(1) 连接数据源(2) 打开记录集对象(3) 使用记录集(4) 断开连接具体的应用后面在学生成绩录入中会介绍到。2. VC连接SQL Server数据库a) 用可视ADODC控件连接数据库,从ProjectàAdd To ProjectàComponents And Controls,如图将ADO、DBGird组控件选择到工具栏。(1) 设置ADODC的ConnectionString属性。选择组件控件图 2.1 (2)打开ADO的属性页,选择Control下的生
7、成连接字符串。生成连接字符串点击打开属性页图 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 pCo
8、nnection = 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
9、,"","",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 *
10、 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"
11、;,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
12、->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(pPar
13、am);/执行存储过程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(_
14、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控件和AD
15、ODB对象来访问后台数据库服务器的,包含学生信息的查询、学生休息的录入修改删除、学生成绩的录入修改,下面就分别说明各模块的具体实现。4. 系统主界面创建XSCJ多文档MFC工程,会生成框架,MainFrm、XSCJDoc、XSCJView等对象,这里演示的程序比较简单,所以代码主要加在XSCJView对象里,创建两个Dialog来实现学生信息修改和学生成绩修改。主界面菜单和工具条框架如下:菜单工具条图 4.1主要功能:主界面,导航作用,点击可进入操作窗口。创建过程:(1) 创建菜单: 图 4.2因为学生信息查询作为默认的界面,所以创建学生信息修改、学生成绩修改,打开VC的ClassWizad,
16、添加菜单处理事件,这里选择映射到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();学生成绩
17、录入菜单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
18、();成绩录入工具条Click的处理void CXSCJView:OnButton32774() / TODO: Add your command handler code hereCStuAddScore myStuAddScoreWin;myStuAddScoreWin.DoModal();5. 学生信息查询目的与要求:了解使用控件显示用SQL语句查询到的数据库中的数据,同时了解模糊查询的基本方法。程序界面:DataGrid控件ADODC控件学生选课表 图 5.1主要功能:实现简单查询的需要,输入条件进行模糊查询,各条件之间为与的关系,在查询的结果中移动记录指针可以查看这个学生的具体选课信
19、息创建过程:(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_STUVIEW
20、ADODC, 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_STUVIE
21、WADODC。(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的DataS
22、ource属性为IDC_StuKCADO。(8) 使用ClassWizad对这些控件设定变量的绑定,选顶绑定的类型,Edit只要输入输出,所以简单的CString类型就可以满足,ADO则要选择CAdodc的变量类型,这样才能访问其属性和调用函数,如图5.3、5.4。图 5.3图 5.4完成的开发窗体如图:图 5.5实现过程:直接打开时由于控件属性的设置,所以显示所有记录,当输入查询条件时点击查询按钮则调用MakeSqlStr函数产生查询字符串,然后重新设置控件的属性,打开控件显示查询结果集。当查询结果学生信息记录集中移动记录指针时,可以在下面的选课表中看到学生选课的信息。主要代码:CXSCJV
23、iew对象的构造函数,为了避免在未初始化完成就做一些操作,所以定义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(&qu
24、ot;");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;/
25、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.u
26、intVal = 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&q
27、uot;);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=co
28、ls.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
29、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 =
30、 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:OnSear
31、chb() / 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
32、_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); p
33、Recordset->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
34、39;",strXH);m_StuKCADO.SetRecordSource(SqlStr);m_StuKCADO.Refresh();注:为了方便控件显示学生性别,这里建立了一个表CXB(XB bit,XBM varchar(4))存放数据1,男;0,女,这样把要显示的表与其连接便可以显示中文的性别,如有类似情况可参照此方法。6. 学生信息修改目的与要求:了解使用Recordset对象对数据库操作的基本方法(增、删、改),以及存储显示图像的操作。程序界面:图 6.1主要功能:用户可以点击下面的DataGrid表格,移动记录指针,用户资料便同步映到上面的控件中去,修改控件中的信息,点
35、击“更新”实现修改。如输入一个新的学号点击“更新”实现记录的添加,当选中当前记录点击“删除”时则可以删除此学生记录,点击“载入照片”可以选择学生照片,用于更新学生照片信息。创建过程:(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 Sou
36、rce=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事件中取出本条记录显示在上
37、面的控件中,可以在控件中修改学生信息,点击载入照片可以选择学生照片,按更新按钮更新到数据库中,按删除按钮删除当前此记录,删除记录时系统会调用CheckXs触发器来保持数据的参照完整性。主要代码:CStuInfoModify 类中定义的全局变量class CStuInfoModify : public CDialog/ Constructionpublic:int m_InitCompleteFlags; /初始化标记CString m_StuZPPath;/照片路径IStream *m_pStuZPStm; /照片流变量longm_StuZPLen; /照片长度char * m_pStuZPB
38、uf;/照片缓冲指针_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 = CO
39、leDateTime: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 =
40、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&quo
41、t;);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=col
42、s.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(&quo
43、t;备注");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->GetSafeHw
44、nd(),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
45、 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 =
46、 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"
47、)->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 = varFVal;varFld = pRs->Fields->GetItem("ZY&
48、quot;)->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_p
49、StuZPStm流中,在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_
50、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
51、*) 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 =
52、(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)/ Noti
53、fy 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();/窗口重绘消息,显示照片:PostMessa
54、ge(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;_va
55、riant_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->
56、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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿玩具使用安全
- 私立中学门卫管理合同
- 产品经理聘用合同模板
- 增值税转型企业应对与调整
- 画室翻新敲墙施工合同
- 软件开发顾问服务合同样本
- 保健品生产合同管理指导文本
- 创意园区个人车位租赁合同
- 汽车维修店装修施工合同
- 城市物流简明施工合同
- 了解孩子陪伴成长
- (完整版)【钢琴谱】大鱼钢琴谱
- (完整word版)英语四级单词大全
- 线束生产控制计划CP实例
- 基于风险的软件测试策略
- 大锁孙天宇小品《时间都去哪了》台词剧本完整版-一年一度喜剧大赛
- 双重血浆置换
- 2023北京海淀区高二上学期期末英语试题及答案
- 从分数到分式教学设计-
- 酒店长期租房合同模板(16篇)
- 场域与对话-公共空间里的雕塑 课件-2023-2024学年高中美术人美版(2019)美术鉴赏
评论
0/150
提交评论