




已閱讀5頁,還剩39頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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(“”);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,”);/打開記錄集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 = varFVal;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.Sourc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中藥藥液采購合同范例
- 做門工程合同范例
- 保定白蠟購銷合同范例
- 住房代建合同范例
- 會議考察合同范例
- 修房子總包合同范例
- 佛山土地出租合同范例
- 光租船舶合同范例
- 會議服務意向合同范例
- 中葡股合同范例
- 在線監測運維管理體系
- 大型活動安全保障職責與分工
- 英語課件 外研版(2019)選擇性必修四 Unit6 Developing ideas
- 2025年數獨考試試題及答案
- 2025年福建福州電子信息集團有限公司招聘筆試參考題庫含答案解析
- 化工工藝學知到智慧樹章節測試課后答案2024年秋廣州大學
- 產后抑郁癥的原因及護理文獻匯報
- 湖北省武漢市華中師大一附中2025屆高考數學全真模擬密押卷含解析
- 康復醫學治療技術(士)復習題及答案
- 第14課《第一次世界大戰》中職高一下學期高教版(2023)世界歷史全一冊
- 【MOOC】行政法與行政訴訟法學-西南政法大學 中國大學慕課MOOC答案
評論
0/150
提交評論