版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、VC學生成績管理系統(tǒng)1. VC操作數(shù)據(jù)庫簡介本章節(jié)主要介紹VC中操作數(shù)據(jù)庫的一般方法,有ADO Data控件的連接、ADODB對象的使用,當然在可視化的開發(fā)系統(tǒng)中用控件是的方法是比較簡單的,但不是很靈活,相比較ADODB對象的方法比較靈活,但使用相對麻煩;這里讀者會問,那這兩個又是怎么去訪問到數(shù)據(jù)庫的呢?其實他們是通過一些接口去訪問不同數(shù)據(jù)庫的,而這些接口會屏蔽掉數(shù)據(jù)庫訪問協(xié)議和各個數(shù)據(jù)庫之間的差別,這里最常用的有兩種接口,一種就是ODBC、還有一種是OLE DB,下面我們介紹他們的結(jié)構(gòu):(a)數(shù)據(jù)庫訪問接口:(1) ODBC:ODBC其實是開放式數(shù)據(jù)庫互連(Open Database Con
2、nectivity),是微軟公司推出的一種實現(xiàn)應(yīng)用程序和關(guān)系數(shù)據(jù)庫之間通訊的方法標準,是一個接口標準。所以它實際上是一種標準,符合標準的數(shù)據(jù)庫就可以通過SQL語言編寫的命令對數(shù)據(jù)庫進行操作,但只能針對關(guān)系數(shù)據(jù)庫進行操作(如SQL Server,Oracle,Access,Excel等),目前所有的關(guān)系數(shù)據(jù)庫都符合該標準。ODBC本質(zhì)上是一組數(shù)據(jù)庫訪問API(應(yīng)用程序編程接口),由一組函數(shù)調(diào)用組成,核心是SQL語句,他的結(jié)構(gòu)圖如下圖1:圖 1.1在具體操作時,首先必須用ODBC管理器注冊一個數(shù)據(jù)源,管理器根據(jù)數(shù)據(jù)源提供的數(shù)據(jù)庫位置、數(shù)據(jù)庫類型及ODBC驅(qū)動程序等信息,建立起ODBC與具體數(shù)據(jù)庫的
3、聯(lián)系。這樣,只要應(yīng)用程序?qū)?shù)據(jù)源名提供給ODBC,ODBC就能建立起與相應(yīng)數(shù)據(jù)庫的連接。(2) OLE DB:OLE DB:數(shù)據(jù)庫鏈接和嵌入對象(Object Linking and Embedding DataBase)。OLE DB是微軟提出的基于COM思想且面向?qū)ο蟮囊环N技術(shù)標準,目的是提供一種統(tǒng)一的數(shù)據(jù)訪問接口訪問各種數(shù)據(jù)源,這里所說的"數(shù)據(jù)"除了標準的關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)之外,還包括郵件數(shù)據(jù)、Web上的文本或圖形、目錄服務(wù)(Directory Services)、以及主機系統(tǒng)中的文件和地理數(shù)據(jù)以及自定義業(yè)務(wù)對象等。OLE DB標準的核心內(nèi)容就是要求對以上這些各種各
4、樣的數(shù)據(jù)存儲(Data Store)都提供一種相同的訪問接口,使得數(shù)據(jù)的使用者(應(yīng)用程序)可以使用同樣的方法訪問各種數(shù)據(jù),而不用考慮數(shù)據(jù)的具體存儲地點、格式或類型,他的結(jié)構(gòu)圖如下圖2:圖 1.2(b)VC中數(shù)據(jù)庫訪問對象:(1) ADO Data控件:ADO Data 控件使用 Microsoft ActiveX 數(shù)據(jù)對象(ADO) 來快速建立數(shù)據(jù)綁定的控件和數(shù)據(jù)提供者之間的連接。數(shù)據(jù)綁定控件是任何具有“數(shù)據(jù)源”屬性的控件。數(shù)據(jù)提供者可以是任何符合 OLEDB 規(guī)范的數(shù)據(jù)源,這里可能是對ADO的一個封裝,他訪問數(shù)據(jù)庫的接口可以使用ODBC、也可以使用OLEDB,但OLEDB靈活,不用在系統(tǒng)中配
5、置數(shù)據(jù)源,而且效率高,所以現(xiàn)在使用OLEDB更多點,下面程序中也是用OLEDB來介紹的,這里簡單介紹一下ADODC控件的使用層次圖。ADODC在VC數(shù)據(jù)庫程序設(shè)計中起了一個橋梁的作用,可以方便VC中的一些控件直接和數(shù)據(jù)庫關(guān)聯(lián),他的使用示意圖如下: 圖 1.3(2) ADODB對象ADO是ActiveX Data Objects的縮寫,是一項新的數(shù)據(jù)庫的存取技術(shù),他最主要包含三個對象,Connection、Recordset、Command,Connection對象:連接對象,負責通過OLEDB或ODBC建立與數(shù)據(jù)庫之間的連接。Recordset對象:記錄集對象,存放從數(shù)據(jù)庫中得到的記錄,這些可
6、能是執(zhí)行某條SQL語句的結(jié)果。Command對象:執(zhí)行SQL語句返回Recordset類型的結(jié)果。基本的用法:(1) 連接數(shù)據(jù)源(2) 打開記錄集對象(3) 使用記錄集(4) 斷開連接具體的應(yīng)用后面在學生成績錄入中會介紹到。2. VC連接SQL Server數(shù)據(jù)庫a) 用可視ADODC控件連接數(shù)據(jù)庫,從ProjectàAdd To ProjectàComponents And Controls,如圖將ADO、DBGird組控件選擇到工具欄。(1) 設(shè)置ADODC的ConnectionString屬性。選擇組件控件圖 2.1 (2)打開ADO的屬性頁,選擇Control下的生
7、成連接字符串。生成連接字符串點擊打開屬性頁圖 2.2圖 2.3圖 2.4(3)設(shè)置ADO Data Control的RecordSource屬性。命令類型圖 2.5 命令類型:adCmdText :值1,表示命令為SQL語句。adCmdTable :值2,表示命令為一表名。adCmdStoredProc:值4,表示命令是一存儲過程名。adCmdUnknown :值8,表示不確定命令類型。(4)此時數(shù)據(jù)源控件已連接好數(shù)據(jù)庫,可以直接訪問它,或者可以充當數(shù)據(jù)表格控件的數(shù)據(jù)源使用。b) 用Connection對象連接數(shù)和操作據(jù)庫(1) 創(chuàng)建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數(shù)據(jù)庫服務(wù)器名,”XSCJ”數(shù)據(jù)庫名,后面是用戶明和密碼hr = pConnection->Open(strCnn
9、,"","",NULL);(3) Command對象用來執(zhí)行SQL語句來操作數(shù)據(jù)庫的對象,根據(jù)參數(shù)的不同可以執(zhí)行存儲過程_CommandPtr pCmd = NULL;/定義command 對象指針_ParameterPtr pParam = NULL;_RecordsetPtr pRs = NULL;CString SqlStr;pCmd.CreateInstance(_uuidof(Command);pCmd->ActiveConnection = pConnection;/執(zhí)行SQL語句SqlStr.Format("Select *
10、 from KC");pCmd->CommandText = (_bstr_t)SqlStr;pRs = pCmd->Execute(&vNULL,&vNULL,adCmdText);/返回記錄集/執(zhí)行存儲過程SqlStr.Format("AddStuScore");pCmd->CommandText = (_bstr_t)SqlStr;pCmd->CommandType = adCmdStoredProc;/為存儲過程創(chuàng)建輸入?yún)?shù)pParam = pCmd->CreateParameter("XH"
11、;,adVarChar,adParamInput,16);pParam->Value = _variant_t(“081101”);pCmd->Parameters->Append(pParam);/為存儲過程創(chuàng)建輸入?yún)?shù)pParam = pCmd->CreateParameter("KCM",adVarChar,adParamInput,16);pParam->Value = _variant_t(“計算機基礎(chǔ)”);pCmd->Parameters->Append(pParam);/為存儲過程創(chuàng)建輸入?yún)?shù)pParam = pCmd
12、->CreateParameter("CJ",adInteger,adParamInput,4);pParam->Value = _variant_t(long)80);pCmd->Parameters->Append(pParam);/為存儲過程創(chuàng)建輸入?yún)?shù)pParam = pCmd->CreateParameter("XF",adInteger,adParamInput,4);pParam->Value = _variant_t(long)0);pCmd->Parameters->Append(pPar
13、am);/執(zhí)行存儲過程pCmd->Execute(&vNULL,&vNULL,adCmdStoredProc);/關(guān)閉連接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. 學生成績管理系統(tǒng)本演示系統(tǒng)是一個用VC實現(xiàn)的簡單的學生成績管理系統(tǒng),使用用可視ADODC控件和AD
15、ODB對象來訪問后臺數(shù)據(jù)庫服務(wù)器的,包含學生信息的查詢、學生休息的錄入修改刪除、學生成績的錄入修改,下面就分別說明各模塊的具體實現(xiàn)。4. 系統(tǒng)主界面創(chuàng)建XSCJ多文檔MFC工程,會生成框架,MainFrm、XSCJDoc、XSCJView等對象,這里演示的程序比較簡單,所以代碼主要加在XSCJView對象里,創(chuàng)建兩個Dialog來實現(xiàn)學生信息修改和學生成績修改。主界面菜單和工具條框架如下:菜單工具條圖 4.1主要功能:主界面,導(dǎo)航作用,點擊可進入操作窗口。創(chuàng)建過程:(1) 創(chuàng)建菜單: 圖 4.2因為學生信息查詢作為默認的界面,所以創(chuàng)建學生信息修改、學生成績修改,打開VC的ClassWizad,
16、添加菜單處理事件,這里選擇映射到View對象里面。圖 4.3(2) 創(chuàng)建工具條:學生信息修改、學生成績修改圖 4.4創(chuàng)建工具條,打開VC的ClassWizad,添加菜單處理事件,這里選擇映射到View對象里面。圖 4.5主要菜單代碼:菜單Click的處理過程在CXSCJView對象里面,對應(yīng)與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的處理,分別對應(yīng)調(diào)用菜單中的處理過程學生信息修改工具條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語句查詢到的數(shù)據(jù)庫中的數(shù)據(jù),同時了解模糊查詢的基本方法。程序界面:DataGrid控件ADODC控件學生選課表 圖 5.1主要功能:實現(xiàn)簡單查詢的需要,輸入條件進行模糊查詢,各條件之間為與的關(guān)系,在查詢的結(jié)果中移動記錄指針可以查看這個學生的具體選課信
19、息創(chuàng)建過程:(1) 在View的主窗體IDD_XSCJ_FORM上放入兩個學生信息查詢的ADODC和學生選課信息的ADODC、創(chuàng)建兩個學生信息顯示的DataGrid和學生選課信息顯示的DataGrid,并分別起名為IDC_STUVIEWADODC, IDC_StuKCADO, IDC_STUVIEWDATAGRID,IDC_DGKC。放入IDC_StuXH學號Edit、IDC_StuXM姓名Edit和IDC_StuZYCB專業(yè)下拉列表框,為了美觀IDC_StuKCADO隱藏在IDC_DGKC后面,增加IDC_StuZYCB專業(yè)下拉列表項,如圖5.2。圖 5.2(2) 設(shè)置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) 設(shè)置IDC_STUVIEWADODC的RecordSource屬性為select * from XS,CXB where XS.XB=CXB.XB(4) 設(shè)置IDC_STUVIEWDATAGRID的DataSource屬性為IDC_STUVIE
21、WADODC。(5) 設(shè)置IDC_StuKCADO的ConnectionString屬性為Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=XSCJ;Data Source=microsof-cee903dcr(6) 設(shè)置IDC_StuKCADO的RecordSource屬性為select * from XS,KC,XS_KCwhere XS.XH=XS_KC.XH and KC.KCH=XS_KC.KCH(7) 設(shè)置IDC_DGKC的DataS
22、ource屬性為IDC_StuKCADO。(8) 使用ClassWizad對這些控件設(shè)定變量的綁定,選頂綁定的類型,Edit只要輸入輸出,所以簡單的CString類型就可以滿足,ADO則要選擇CAdodc的變量類型,這樣才能訪問其屬性和調(diào)用函數(shù),如圖5.3、5.4。圖 5.3圖 5.4完成的開發(fā)窗體如圖:圖 5.5實現(xiàn)過程:直接打開時由于控件屬性的設(shè)置,所以顯示所有記錄,當輸入查詢條件時點擊查詢按鈕則調(diào)用MakeSqlStr函數(shù)產(chǎn)生查詢字符串,然后重新設(shè)置控件的屬性,打開控件顯示查詢結(jié)果集。當查詢結(jié)果學生信息記錄集中移動記錄指針時,可以在下面的選課表中看到學生選課的信息。主要代碼:CXSCJV
23、iew對象的構(gòu)造函數(shù),為了避免在未初始化完成就做一些操作,所以定義m_AdoInitFlag為初始化完成標記,標記有效才能做進一步操作。class CXSCJView : public COleDBRecordViewpublic:int m_AdoInitFlag;/添加成員變量CXSCJView類的構(gòu)造函數(shù),初始化成員對象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初始化函數(shù),這里初始化IDC_STUVIEWDATAGRID的顯示格式,添加表格頭以及和數(shù)據(jù)庫字段的綁定關(guān)系。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;/分別設(shè)定每列的屬性,包括表頭、綁定的數(shù)據(jù)庫字段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("專業(yè)");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("備注");/初始化標記設(shè)置m_AdoInitFlag = 1;m_ViewDBGrid.ReBind();m_ViewDBGrid.Refresh();m_StuViewAdodc.GetRecordset().MoveFirst();根據(jù)輸入產(chǎn)生查詢SQL語句的函數(shù),以學號、姓名的輸入信息和專業(yè)的選擇生成模糊查詢的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 += "%' "/取選擇的專業(yè)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,并顯示到關(guān)聯(lián)的DataGrid中,在DataGrid顯示查詢到的結(jié)果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))存放數(shù)據(jù)1,男;0,女,這樣把要顯示的表與其連接便可以顯示中文的性別,如有類似情況可參照此方法。6. 學生信息修改目的與要求:了解使用Recordset對象對數(shù)據(jù)庫操作的基本方法(增、刪、改),以及存儲顯示圖像的操作。程序界面:圖 6.1主要功能:用戶可以點擊下面的DataGrid表格,移動記錄指針,用戶資料便同步映到上面的控件中去,修改控件中的信息,點
35、擊“更新”實現(xiàn)修改。如輸入一個新的學號點擊“更新”實現(xiàn)記錄的添加,當選中當前記錄點擊“刪除”時則可以刪除此學生記錄,點擊“載入照片”可以選擇學生照片,用于更新學生照片信息。創(chuàng)建過程:(1)在IDD_STU_INFO窗體上放入ADODC、DataGrid并起名為IDC_ADODC2, IDC_DATAGRID2。(2)設(shè)置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定義關(guān)聯(lián)變量,如圖6.2。圖 6.2設(shè)計好的窗體如圖:圖 6.3實現(xiàn)過程:當點擊DataGrid中的記錄時記錄集游標也跟著移動,在OnMoveCompleteAdodc2事件中取出本條記錄顯示在上
37、面的控件中,可以在控件中修改學生信息,點擊載入照片可以選擇學生照片,按更新按鈕更新到數(shù)據(jù)庫中,按刪除按鈕刪除當前此記錄,刪除記錄時系統(tǒng)會調(diào)用CheckXs觸發(fā)器來保持數(shù)據(jù)的參照完整性。主要代碼: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接口中獲取數(shù)據(jù)CStuInfoModify類構(gòu)造函數(shù)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;窗口初始化函數(shù),定義IDC_DATAGRID2的顯示風格,添加表格頭以及和數(shù)據(jù)庫字段的綁定關(guān)系。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("專業(yè)");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();/添加專業(yè)項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中取出學生照片,并以流的方式保存,調(diào)用重繪,在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;/根據(jù)當前學號,從數(shù)據(jù)庫中讀出照片數(shù)據(jù)流,并保存在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);/取照片數(shù)據(jù)長度long lDataLength = pRsZP->Fields->GetItem("ZP")->ActualSize;if(lDataLength = 0)m_varChunk.Clear();else/取照片數(shù)據(jù)m_varChunk = pRsZP->Fields->GetItem("ZP")->GetChunk(lDataLength);if(m_varChunk.vt =
52、(VT_ARRAY | VT_UI1)/復(fù)制照片數(shù)據(jù)到流中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對象執(zhí)行delete語句來刪除當前的學生記錄,Delete語句的調(diào)用會引起CheckXs觸發(fā)器的動作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;/定義為無參數(shù)_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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銅川職業(yè)技術(shù)學院《婚姻家庭和繼承法學》2023-2024學年第一學期期末試卷
- 桐城師范高等??茖W校《信息社會與信息素養(yǎng)》2023-2024學年第一學期期末試卷
- 《辛亥革命》說課稿2篇
- 通遼職業(yè)學院《廣告法規(guī)》2023-2024學年第一學期期末試卷
- 通化師范學院《商業(yè)智能與》2023-2024學年第一學期期末試卷
- 銅陵安徽銅陵職業(yè)技術(shù)學院裝備制造大類外聘教師招聘歷年參考題庫(頻考版)含答案解析
- 招投標課程設(shè)計項目名
- 幼兒美術(shù)博物館課程設(shè)計
- 2025屆高考地理一輪復(fù)習第十二單元人類活動的地域聯(lián)系第26講交通運輸方式和布局變化的影響規(guī)范訓(xùn)練含解析新人教版
- 漢堡餐飲營銷課程設(shè)計
- 9歲兒童智商測試題
- 大鎖孫天宇小品《時間都去哪了》臺詞劇本完整版-一年一度喜劇大賽
- 消防立管永臨結(jié)合施工方案
- 人教版八年級物理下冊 實驗題02 壓力壓強實驗(含答案詳解)
- 抖音快手短視頻創(chuàng)業(yè)項目融資商業(yè)策劃書
- 滬教版英語八年級上冊知識點歸納匯總
- 裝飾裝修工程售后服務(wù)具體措施
- 軟件設(shè)計說明書通用模板
- 酒店治安安全培訓(xùn)
- 糖皮質(zhì)激素類藥物臨床應(yīng)用指導(dǎo)原則(2023年)
- 我的家鄉(xiāng)-東營
評論
0/150
提交評論