VB學生成績管理系統(tǒng)_第1頁
VB學生成績管理系統(tǒng)_第2頁
VB學生成績管理系統(tǒng)_第3頁
VB學生成績管理系統(tǒng)_第4頁
VB學生成績管理系統(tǒng)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、VB學生成績管理系統(tǒng)1.VB操作數(shù)據(jù)庫簡介本章節(jié)主要介紹VB中操作數(shù)據(jù)庫的一般方法,有ADOData控件的連接、ADODB對象的使用,當然在可視化的開發(fā)系統(tǒng)中用控件是的方法是比較簡單的,但不是很靈活,相比較ADODB對象的方法比較靈活,但使用相對麻煩;這里讀者會問,那這兩個又是怎么去訪問到數(shù)據(jù)庫的呢?其實他們是通過一些接口去訪問不同數(shù)據(jù)庫的,而這些接口會屏蔽掉數(shù)據(jù)庫訪問協(xié)議和各個數(shù)據(jù)庫之間的差別,這里最常用的有兩種接口,一種就是ODBC、還有一種是OLEDB,下面我們介紹他們的結構:(a)數(shù)據(jù)庫訪問接口:ODBC:ODBC其實是開放式數(shù)據(jù)庫互連(OpenDatabaseConnectivity

2、),是微軟公司推出的一種實現(xiàn)應用程序和關系數(shù)據(jù)庫之間通訊的方法標準,是一個接口標準。所以它實際上是一種標準,符合標準的數(shù)據(jù)庫就可以通過SQL語言編寫的命令對數(shù)據(jù)庫進行操作,但只能針對關系數(shù)據(jù)庫進行操作(如SQLServer,Oracle,Access,Excel等),目前所有的關系數(shù)據(jù)庫都符合該標準。ODBC本質上是一組數(shù)據(jù)庫訪問API(應用程序編程接口),由一組函數(shù)調用組成,核心是SQL語句,他的結構圖如下圖1:圖1.1在具體操作時,首先必須用ODBC管理器注冊一個數(shù)據(jù)源,管理器根據(jù)數(shù)據(jù)源提供的數(shù)據(jù)庫位置、數(shù)據(jù)庫類型及ODBC驅動程序等信息,建立起ODBC與具體數(shù)據(jù)庫的聯(lián)系。這樣,只要應用程

3、序將數(shù)據(jù)源名提供給ODBC,ODBC就能建立起與相應數(shù)據(jù)庫的連接。OLEDB:OLEDB:數(shù)據(jù)庫鏈接和嵌入對象(ObjectLinkingandEmbeddingDataBase)。OLEDB是微軟提出的基于COM思想且面向對象的一種技術標準,目的是提供一種統(tǒng)一的數(shù)據(jù)訪問接口訪問各種數(shù)據(jù)源,這里所說的數(shù)據(jù)除了標準的關系型數(shù)據(jù)庫中的數(shù)據(jù)之外,還包括郵件數(shù)據(jù)、Web上的文本或圖形、目錄服務(DirectoryServices)、以及主機系統(tǒng)中的文件和地理數(shù)據(jù)以及自定義業(yè)務對象等。OLEDB標準的核心內容就是要求對以上這些各種各樣的數(shù)據(jù)存儲(DataStore)都提供一種相同的訪問接口,使得數(shù)據(jù)的使

4、用者(應用程序)可以使用同樣的方法訪問各種數(shù)據(jù),而不用考慮數(shù)據(jù)的具體存儲地點、格式或類型,他的結構圖如下圖2:OLED8Provi-de-rsrzrziMSSQLServerAccessDatabaseODBCProuidprOtherDatabases圖1.2(b)VB中數(shù)據(jù)庫訪問對象:ADOData控件:ADOData控件使用MicrosoftActiveX數(shù)據(jù)對象(ADO)來快速建立數(shù)據(jù)綁定的控件和數(shù)據(jù)提供者之間的連接。數(shù)據(jù)綁定控件是任何具有數(shù)據(jù)源”屬性的控件。數(shù)據(jù)提供者可以是任何符合OLEDB規(guī)范的數(shù)據(jù)源,這里可能是對ADO的一個封裝,他訪問數(shù)據(jù)庫的接口可以使用ODBC、也可以使用OL

5、EDB,但OLEDB靈活,不用在系統(tǒng)中配置數(shù)據(jù)源,而且效率高,所以現(xiàn)在使用OLEDB更多點,下面程序中也是用OLEDB來介紹的,下面簡單介紹一下ADODC控件的使用層次圖。ADODC在VB數(shù)據(jù)庫程序設計中起了一個橋梁的作用,可以方便VB中的一些控件直接和數(shù)據(jù)庫關聯(lián),他的使用示意圖如下:圖1.3ADODB對象ADO是ActiveXDataObjects的縮寫,是一項新的數(shù)據(jù)庫的存取技術,他最主要包含三個對象,Connection、Recordset、Command,Connection對象:連接對象,負責通過OLEDB或ODBC建立與數(shù)據(jù)庫之間的連接。Recordset對象:記錄集對象,存放從數(shù)

6、據(jù)庫中得到的記錄,這些可能是執(zhí)行某條SQL語句的結果。Command對象:執(zhí)行SQL語句返回Recordset類型的結果?;镜挠梅ǎ哼B接數(shù)據(jù)源打開記錄集對象使用記錄集斷開連接具體的應用后面在學生成績錄入中會介紹到。2.VB連接SQLServer數(shù)據(jù)庫a)用可視ADODC控件連接數(shù)據(jù)庫,如圖將控件選擇到工具欄。(1)設置ADODC的ConnectionString屬性。扭梓|L+W|選擇控件廠只晝示選定琪通CFlicrixofLkctifiJCTlui.n.亠|ItrcxIDODqVi6.PfOLEDBJfll-HfiSOttCOTi*:E-?-lEUJCiiLenJuCoiitr&l80iO

7、NicrixofLChsrLCantrd&DIJVLEDBJQNlccisc-fLC-miCin.tr-nLB.QniCriSOttCWjBOTiDLilOfCSMJOl&0flicrisoftlatLBiuni.Ebrid_fliorirttlEioriiLiretgFlicrixofLJihtOri41ControlB.D(OLEDB)Nlccixc-fL1Lh-tLx3LC-mkrclaG.0flLcrisofl4tiRa(j&l:arCntrilB0:-)VidAtEaftvtT1tSCcalr-ale定血:C:linnS.iritiB2C,.KEFLEXKU圖2.1選擇控件點擊打開屬

8、性頁圖2.2(2)生成連接字符串。點擊數(shù)據(jù)連接屬性頁圖2.3圖2.4(3)設置ADODC的RecordSource屬性。命令類型圖2.5命令類型:adCmdText:值1,表示命令為SQL語句。adCmdTable:值2,表示命令為一表名。adCmdStoredProc:值4,表示命令是一存儲過程名。adCmdUnknown:值8,表示不確定命令類型。(4)此時數(shù)據(jù)源控件已連接好數(shù)據(jù)庫,可以直接訪問它,或者可以充當數(shù)據(jù)表格控件的數(shù)據(jù)源使用。b)用ADODB.CONNECTION對象連接數(shù)據(jù)庫(1)創(chuàng)建ADODB.CONNECTION對象PrivateSqlConAsNewADODB.Conne

9、ctionSqlCon.Provider=SQLOLEDBSqlCon.OpenServer=microsof-cee903dcr;DataBase=XSCJ;UID=wmx;PWD=1234;(2)使用ADODB.CONNECTION對象PrivateSqlCmdAsNewADODB.Command指定Command對象所使用的連接SqlCmd.ActiveConnection=SqlConSqlCmd.CommandText=select*fromXS執(zhí)行命令SetSqlRes=SqlCmd.Execute學生成績管理系統(tǒng)本演示系統(tǒng)是一個用VB實現(xiàn)的簡單的學生成績管理系統(tǒng),使用用可視ADO

10、DC控件和ADODB對象來訪問后臺數(shù)據(jù)庫服務器的,包含學生信息的查詢、學生休息的錄入修改刪除、學生成績的錄入修改,下面就分別說明各模塊的具體實現(xiàn)。系統(tǒng)主界面圖4.1主要功能:主界面,導航作用,點擊可進入操作窗口。創(chuàng)建過程:(1)創(chuàng)建菜單:TOC o 1-5 h zgE*Name.Irrtati-fiMichC-sxdnd:尹rtrut::i:Nore:i-1tfJpCEt寂ID;|qHsgiihtHsi:可n;|o-pnnt刁ri-h*&dPEnitd丘豳血廠也如山*|*fl-2O計篡機ODllOTX享匪旻.051U511UC核一M13-S-5計茸杠031L090光強民芟1939-8-11計算

11、札03111C吉1991-7-22計算札LBllll1990-3-18計算札w1卜嚅、卜二樁V-賢機基袖、805程序設計才語言704764學生選課表ADODC控件程序界面:DataGrid控件學號牲古業(yè)序有專業(yè)”3X勺學生成績管理丟統(tǒng)-學生信息查詢石承主查詢寧主1言息寧生戒技返出至統(tǒng)圖5.1主要功能:可以滿足簡單查詢的需要,什么條件也不輸則分頁顯示所有記錄,可以輸入條件進行簡單的模糊查詢,各條件之間為與的關系,在查詢的結果中移動記錄指針可以查看這個學生的具體選課信息卜I創(chuàng)建過程:在窗體上放入兩個學生信息查詢的ADODC和學生選課信息的ADODC、創(chuàng)建兩個學生信息顯示的DataGrid和學生選課

12、信息顯示的DataGrid,并分別起名為StuADO,StuKCADO,StuDG,StuKCDG。放入學號Edit、姓名Edit和專業(yè)下拉列表框,為了美觀StuKCADO隱藏在StuKCDG這個后面。設置StuADO的ConnectionString屬性為Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurityInfo=False;UserID=sa;InitialCatalog=XSCJ;DataSource=microsof-cee903dcr(3)設置StuADO的RecordSource屬性為select*fromXS,C

13、XBwhereXS.XB=CXB.XB設置StuDG的DataSource屬性為StuADO。設置StuKCADO的ConnectionString屬性為Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurityInfo=False;UserID=sa;InitialCatalog=XSCJ;DataSource=microsof-cee903dcr設置StuKCADO的RecordSource屬性為select*fromXS,KC,XS_KCwhereXS.XH=XS_KC.XHandKC.KCH=XS_KC.KCH設置StuKCD

14、G的DataSource屬性為StuKCADO。實現(xiàn)過程:直接打開時由于控件屬性的設置,所以顯示所有記錄,當輸入查詢條件時點擊查詢按鈕則調用MakeSqlStr函數(shù)產(chǎn)生查詢字符串,然后重新設置控件的屬性,打開控件顯示查詢結果集。當專業(yè)改變時調用StuZY_Click函數(shù)來分別顯示所選的專業(yè)學生記錄,當查詢結果學生信息記錄集中移動記錄指針時,可以在下面的選課表中看到學生選課的信息。主要代碼:根據(jù)學號、姓名的輸入信息和專業(yè)的選擇生成模糊查詢的SQL字符串DimSqlStrAsString保存查詢字符串的PublicSubMakeSqlStr()產(chǎn)生查詢字符串的SqlStr=IfTrim(StuXH

15、)ThenSqlStr=andXHlike%+Trim(StuXH.Text)+%EndIfIfTrim(StuXM)ThenSqlStr=SqlStr+andXMlike%+Trim(StuXM.Text)+%EndIfIfTrim(StuZY)v所有專業(yè)ThenSqlStr=SqlStr+andZY=+Trim(StuZY.Text)+EndIfEndSub“專業(yè)”列表Click事件處理,顯示選擇當前專業(yè),并且符合學號、姓名查詢條件的學生的信息PrivateSubStuZY_Click()當專業(yè)改變時從新從數(shù)據(jù)庫中提取數(shù)據(jù)MakeSqlStrStuADO.RecordSource=sele

16、ct*fromXS,CXBwhereXS.XB=CXB.XB_&SqlStr+andZY=+Trim(StuZYText)+StuADO.RefreshEndSub“查詢”Click事件處理,用生成的模糊查詢的SQL字符串,來刷新StuADO,并顯示到關聯(lián)的DataGrid中PrivateSubStuSch_Click()點擊查詢按鈕從數(shù)據(jù)庫中提取數(shù)據(jù)MakeSqlStrStuADO.RecordSource=select*fromXS,CXBwhereXS.XB=CXB.XB_&SqlStrStuADO.RefreshEndSub學生信息顯示的DataGrid的Click事件處理,以當前學生

17、信息的學號作為查詢條件,從XS_KC表中查找當前學生的選課記錄,并顯示到學生課程顯示的StuKCDG中PrivateSubStuDG_Click()單擊DataGrid中學生記錄在下面顯示學生課程成績StuKCADO.RecordSource=select*fromXS,KC,XS_KC_&WhereXS.XH=XS_KC.XHAndKC.KCH=XS_KC.KCH_&”andXS.XH=+StuADO.Recordset(XH)+StuKCADO.RefreshEndSub注:為了方便控件顯示學生性別,這里建立了一個表CXB(XBbit,XBMvarchar(4)存放數(shù)據(jù)1,男;0,女,這樣

18、把要顯示的表與其連接便可以顯示中文的性別,如有類似情況可參照此方法。6.學生信息修改目的與要求:了解對數(shù)據(jù)庫操作的基本方法(增、刪、改)。程序界面:圖6.1主要功能:用戶可以點擊下面的表格,用戶資料便反映到上面的控件中去,這時可以修改控件中的信息,點擊更新實現(xiàn)修改。如輸入一個新的學號點擊更新實現(xiàn)記錄的添加當選中當前記錄點刪除時則可以刪除此學生記錄,雙擊照片可以選擇學生照片,用于更新學生照片信息。創(chuàng)建過程:(1)在窗體上放入ADODC、DataGrid并起名為StuADO,StuDG。設置StuADO的ConnectionString屬性為Provider=SQLOLEDB.1;Integrat

19、edSecurity=SSPI;PersistSecurityInfo=False;UserID=sa;InitialCatalog=XSCJ;DataSource=microsof-cee903dcr(3)置StuADO的RecordSource屬性為select*fromXS,CXBwhereXS.XB=CXB.XB(4)(5)置StuDG的DataSource屬性為StuADO。在窗體上放入Image控件并起名為StuPic,用來顯示學生照片,選擇Image控件的DataSource屬性為StuADO,設置DataField屬性為ZP這就兀成了Image控件和數(shù)據(jù)庫的綁定,記錄集移動時I

20、mage里面會顯示當前學生的照片。(6)實現(xiàn)過程:并在窗體上放入如圖所需控件。當點擊DataGrid中的記錄時記錄集游標也跟著移動,在StuADOMoveComplete事件中取出本條記錄顯示在上面的控件中,我們可以在控件中修改學生信息,雙擊選擇學生照片,按更新調用StuUpd_Click更新到數(shù)據(jù)庫中,當輸入新的學生記錄時按更新調用StuUpd_Click添加到數(shù)據(jù)庫中,也可以按刪除調用StuDel_Click函數(shù)刪除此記錄,系統(tǒng)會調用CheckXs觸發(fā)器來保持數(shù)據(jù)的參照完整性。主要代碼:General中定義的全局變量PrivateFileNameAsStringPrivateSqlConA

21、sNewADODB.ConnectionPrivateSqlResAsNewADODB.RecordsetPrivateSqlCmdAsNewADODB.CommandForm加載時打開數(shù)據(jù)庫連接PrivateSubForm_Load()SqlCon.Provider=SQLOLEDBSqlCon.OpenServer=microsof-cee903dcr;DataBase=XSCJ;UID=wmx;PWD=1234;EndSubForm卸載時關閉數(shù)據(jù)庫連接PrivateSubForm_Unload(CancelAsInteger)SqlCon.CloseEndSub學生信息記錄集記錄指針移動

22、完成事件,當點擊StuADO控件記錄移動圖標時產(chǎn)生,在這個過程中取出當前記錄中的學生信息,更新到學號、姓名等顯示控件中去,實現(xiàn)顯示和StuADO控件記錄移動連動PrivateSubStuADO_MoveComplete(ByValadReasonAsADODB.EventReasonEnum,ByValpErrorAsADODB.Error,adStatusAsADODB.EventStatusEnum,ByValpRecordsetAsADODB.Recordset)IfNotpRecordset.EOFAndNotpRecordset.BOFThenStuXH.Text=pRecordse

23、t(XH)StuXM.Text=pRecordset(XM)StuCSSJ.Text=pRecordset(CSSJ)StuZY.Text=pRecordset(ZY)StuZXF.Text=pRecordset(ZXF)StuBZ.Text=CStr(pRecordset(BZ)&)IfpRecordset(XB)=0ThenStuXBF.Value=TrueElseStuXBM.Value=TrueEndIfEndIfEndSub“刪除”Click事件處理,從StuADO記錄集中取出當前記錄的學號,然后通過commad對象執(zhí)行delete語句來刪除當前的學生記錄,delete語句的調用會引

24、起CheckXs觸發(fā)器的動作PrivateSubStuDel_Click(IndexAsInteger)Ret=MsgBox(是否要刪除+StuADO.Recordset(XH)+號學生的記錄!,vbYesNo,提示)IfRet=vbYesThenSqlCmd.ActiveConnection=SqlConSqlCmd.CommandText=deletefromXSwhereXH=+StuADO.Recordset(XH)+SqlCmd.ExecuteStuADO.RecordSource=select*fromXS,CXBwhereXS.XB=CXB.XBStuADO.RefreshEnd

25、IfEndSub“照片”DoubleClick事件的處理,打開對話框,給用戶選擇照片,并顯示在StuPic控件中,同時記錄下選擇的文件名和路徑到全局FileName變量中,給后面的更新學生信息使用PrivateSubStuPic_DblClick()顯示打開文件的公用對話框,選擇需要加入數(shù)據(jù)庫的圖片CDlg.Filter=位圖(*.bmp)l*.bmpl圖像(*.jpg)l*.jpgCDlg.ShowOpenFileName=CDlg.FileNameStuPic.Picture=LoadPicture(FileName)預覽圖片EndSub讀取照片數(shù)據(jù)的函數(shù),根據(jù)輸入的照片的文件名,打開文件

26、讀入照片數(shù)據(jù)到數(shù)組中,然后通過AppendChunk函數(shù)把照片數(shù)據(jù)寫入到Field對象中去PrivateSubPicSaveToDB(ByRefFldAsADODB.Field,DiskFileAsString)保存到圖片到ADODB.Field對象中去ConstBLOCKSIZE=4096DimbyteData()AsByte定義數(shù)據(jù)塊數(shù)組DimNumBlocksAsLong定義數(shù)據(jù)塊個數(shù)DimFileLengthAsLong標識文件長度DimLeftOverAsLong定義剩余字節(jié)長度DimSourceFileAsLong定義自由文件號DimiAsLong定義循環(huán)變量SourceFile=

27、FreeFile提供一個尚未使用的文件號OpenDiskFileForBinaryAccessReadAsSourceFile打開文件FileLength=LOF(SourceFile)得到文件長度IfFileLength=0Then判斷文件是否存在CloseSourceFileMsgBoxDiskFile&無內容或不存在!ElseNumBlocks=FileLengthBLOCKSIZE得到數(shù)據(jù)塊的個數(shù)LeftOver=FileLengthModBLOCKSIZE得到剩余字節(jié)數(shù)Fld.Value=NullReDimbyteData(BLOCKSIZE)重新定義數(shù)據(jù)塊的大小Fori=1ToNu

28、mBlocksGetSourceFile,byteData()讀到內存塊中Fld.AppendChunkbyteData()寫入FLDNextiReDimbyteData(LeftOver)重新定義數(shù)據(jù)塊的大小GetSourceFile,byteData()讀到內存塊中Fld.AppendChunkbyteData()寫入FLDCloseSourceFile關閉源文件EndIfEndSub“更新”Click事件處理,先查詢當前學號的學生信息,有當前學生的信息則修改相應的記錄字段,調用PicSaveToDB保存選擇的照片到記錄集中的“ZP”字段,更新記錄集到數(shù)據(jù)庫中去;沒有則通過AddNew新增

29、一條記錄,然后修改相應的記錄字段,并更新記錄集到數(shù)據(jù)庫中去,這里在調用PicSaveToDB前先要判斷FileName中是否選擇了照片,有才保存到數(shù)據(jù)庫中去PrivateSubStuUpd_Click(IndexAsInteger)看是否有此學生記錄,有就修改,沒則添加DimSqlStrAsStringDimbyteData()AsByteDimADOFldAsADODB.FieldSqlStr=select*fromXSwhereXH=+Trim(StuXH.Text)+SqlRes.OpenSqlStr,SqlCon,adOpenDynamic,adLockPessimisticIfNot

30、SqlRes.EOFThen修改SqlRes(XM)=StuXM.TextIfStuXBM.Value=TrueThenSqlRes(XB)=1ElseSqlRes(XB)=0EndIfSqlRes(ZY)=StuZYTextSqlRes(CSSJ)=CDate(StuCSSJ.Text)SqlRes(ZXF)=CInt(StuZXF.Text)SqlRes(BZ)=StuBZ.Text保存到圖片到ADODB.Field對象中去SetADOFld=SqlRes(ZP)IfFileNameThenCallPicSaveToDB(ADOFld,FileName)EndIfSqlRes.Update

31、Else添加SqlRes.AddNewSqlRes(XH)=StuXH.TextSqlRes(XM)=StuXM.TextIfStuXBM.Value=TrueThenSqlRes(XB)=1ElseSqlRes(XB)=0EndIfSqlRes(ZY)=StuZYTextSqlRes(CSSJ)=CDate(StuCSSJ.Text)IfTrim(StuZXF.Text)ThenSqlRes(ZXF)=CInt(StuZXF.Text)EndIfSqlRes(BZ)=StuBZ.Text保存到圖片到ADODB.Field對象中去SetADOFld=SqlRes(ZP)IfFileNameTh

32、enCallPicSaveToDB(ADOFld,FileName)EndIfSqlRes.UpdateEndIfFileName=SqlRes.CloseStuADO.RecordSource=select*fromXS,CXBwhereXS.XB=CXB.XBStuADO.RefreshEndSub為了保證數(shù)據(jù)的參照完整性在刪除學生時要檢查成就表中此學生的記錄,有就刪除。此過程放在觸發(fā)器中完成的CREATETRIGGERCheckXsONdbo.XSFORDELETEASdeletefromXS_KCwhereXHin(selectXHfromdeleted)7.學生成績的錄入目的與要求:

33、了解VB中調用SQLServer中存儲過程的基本方法。Parameter參數(shù)對象的使用,視圖的更新使用,觸發(fā)器的使用。程序界面:圖7.1主要功能:用戶可以選擇專業(yè),這是會列出本專業(yè)所有的學生學號,選擇課程,這時下面的DataGrid中會顯示相應課程的學生的成績和學分,可以在DataGrid中輸入學生成績,上面修改單個學生成績,學分不允許修改,輸入成績,觸發(fā)器會自動添加相應的學分。創(chuàng)建過程:參照上面學生信息修改窗口界面,姓名和學分Enable=FALSE。置StuADO的RecordSource屬性為select*fromXS_KC_CJ,XS_KC_CJ為視圖名稱DataGrid窗口屬性中Al

34、lowUpdate=Enable圖7.2,這樣DataGrid修改才允許更新到視圖中去,從而更新到數(shù)據(jù)庫相應的表中。添加四列,分別選擇DataField為XH、XM、CJ、XF,如圖7.3。圖7.2圖7.3實現(xiàn)過程:在Form_Load事件中編寫專業(yè)、課程列表項的添加,各專業(yè)通過調用GetStuZY存儲過程來得到,同時檢索試圖中這個專業(yè)、選擇這門課程的學生,顯示在下面的DataGrid中,輸入成績,觸發(fā)器會自動添入學分,可以選擇學號,添加一個學生的某門課程的成績和選課到學生選課表中去,刪除XS_KC表中刪除此學生此門課程的成績記錄。主要代碼:(1)SQLServer中定義的存儲過程。創(chuàng)建Get

35、StuZY的存儲過程,從學生表中查詢專業(yè)信息CREATEPROCEDUREGetStuZYASselectDISTINCTZYfromXS加DISTINCT,以返回不重復的專業(yè)GO創(chuàng)建顯示學生成績ShowScore存儲過程,查看此學生的這門課成績是否存在,在返回成績記錄,否則返回學號、姓名、專業(yè)、課程名信息CREATEPROCEDUREShowScore(XHvarchar(6),KCMvarchar(16)ASdeclareKCHvarchar(3),countintbeginselectKCH=KCHfromKCwhereKCM=KCMselectcount=count(*)fromXS_

36、KCwhereXH=XHandKCH=KCHifcount=0selectXH,XM,ZY,KCM=KCMfromXSwhereXH=XHelseselectXS.XH,XS.XM,CJ,XS_KC.XF,XS.ZY,KCMfromXS,KC,XS_KCwhereXS.XH=XHandKC.KCH=KCHandXS.XH=XS_KC.XHandKC.KCH=XS_KC.KCHendGO創(chuàng)建插入學生成績的AddStuScore存儲過程,學生此門課程成績記錄如存在則修改成績,如不存在則添加這條記錄CREATEPROCEDUREAddStuScore(XHvarchar(6),KCMvarchar(

37、16),CJint,XFint)ASbegindeclareKCHvarchar(3)selectKCH=KCHfromKCwhereKCM=KCMselect*fromXS_KCwhereXH=XHandKCH=KCHifRowCount=1updateXS_KCsetCJ=CJ,XF=XFwhereXH=XHandKCH=KCHelseinsertintoXS_KCvalues(XH,KCH,CJ,XF)endGO創(chuàng)建XS_KC_CJ視圖,用來在DataGrid中顯示學生、課程、成績的信息CREATEVIEWdbo.XS_KC_CJASSELECTdbo.XS_KC.XH,dbo.KC.K

38、CM,dbo.XS_KC.CJ,dbo.XS_KC.XF,dbo.XS.XM,dbo.XS.ZYFROMdbo.KCINNERJOINdbo.XS_KCONdbo.KC.KCH=dbo.XS_KC.KCHINNERJOINdbo.XSONdbo.XS_KC.XH=dbo.XS.XHGO創(chuàng)建XS_KC的INSERT,UPDATE觸發(fā)器,當添加和修改成績后,根據(jù)當前的成績自動為該學生該課程增加學分,當成績小于60分時,學分為0;當大于等于60分時,從該門課程表中取出當前課程的學分來更新當前學生在XS_KC表中這門課程的學分CREATETRIGGERCHECKXFONXS_KCINSERT,UPDA

39、TEASBEGINSETNOCOUNTON;updateXS_KCsetXF=0whereCJ=60ENDGO(2)VB中的主要代碼。General中定義的全局變量PrivateSqlConAsNewADODB.ConnectionPrivateSqlResAsADODB.RecordsetPrivateSqlCmdAsNewADODB.CommandForm加載時打開數(shù)據(jù)庫連接,并且通過執(zhí)行select語句從數(shù)據(jù)庫中提取課程名添加到課程下拉列表中去,執(zhí)行GetStuZy存儲過程,把返回的專業(yè)添加到專業(yè)下拉列表中去,在DataGrid中顯示當前專業(yè),當前課程的的學生、成績信息,方便修改Priv

40、ateSubForm_Load()SqlCon.Provider=SQLOLEDBSqlCon.OpenServer=microsof-cee903dcr;DataBase=XSCJ;UID=wmx;PWD=1234;SqlCmd.ActiveConnection=SqlCon添加課程SqlCmd.CommandText=Select*fromKCSqlCmd.CommandType=adCmdTextSetSqlRes=SqlCmd.ExecuteStuKCM.Text=SqlRes(KCM)WhileNotSqlRes.EOFStuKCM.AddItem(Trim(SqlRes(KCM)S

41、qlRes.MoveNextWend添加專業(yè)SqlCmd.CommandText=GetStuZySqlCmd.CommandType=adCmdStoredProcSetSqlRes=SqlCmd.ExecuteStuZY.Text=SqlRes(ZY)WhileNotSqlRes.EOFStuZY.AddItem(SqlRes(ZY)SqlRes.MoveNextWendStuZY_ClickStuXH_ClickStuADO.RecordSource=selectXH,XM,KCM,CJ,XH,ZYXFfromXS_KC_CJwhereKCM=+Trim(StuKCM.Text)+and

42、ZY=+Trim(StuZY.Text)+StuADO.RefreshEndSubForm卸載時關閉數(shù)據(jù)庫連接PrivateSubForm_Unload(CancelAsInteger)SqlRes.CloseSqlCon.CloseEndSubStuADO移動記錄完成的時候,在學號、姓名、成績、學分等顯示控件中顯示當前學生的當前課程的成績信息PrivateSubStuADO_MoveComplete(ByValadReasonAsADODB.EventReasonEnum,ByValpErrorAsADODB.Error,adStatusAsADODB.EventStatusEnum,ByV

43、alpRecordsetAsADODB.Recordset)IfNotpRecordset.EOFAndNotpRecordset.BOFThenStuXH.Text=pRecordset(XH)StuXM.Text=pRecordset(XM)StuCJ.Text=pRecordset(CJ)StuXF.Text=CStr(pRecordset(XF)&)EndIfEndSub“刪除”Click事件處理,調用Command執(zhí)行delete刪除當前學號,當前課程名的成績記錄PrivateSubStuDel_Click()Ret=MsgBox(是否要刪除+StuXH.Text+號學生的+Trim

44、(StuKCM.Text)+課的成績記錄!,vbYesNo,提示)IfRet=vbYesThenSqlCmd.ActiveConnection=SqlConSqlCmd.CommandText=deletefromXS_KCwhereXH=+StuXH.Text+andKCHin(selectKCHfromKCwhereKCM=+StuKCM.Text+)SqlCmd.CommandType=adCmdTextSqlCmd.ExecuteStuADO.RecordSource=selectXH,XM,KCM,CJ,XH,ZY,XFfromXS_KC_CJwhereKCM=+Trim(StuKC

45、M.Text)+andZY=+Trim(StuZYText)+StuADO.RefreshEndIfEndSub“課程”下拉列表Click事件處理,從視圖中查詢當前專業(yè)、當前課程的學生成績信息,同時調用ShowScore在姓名、成績等Edit中來顯示當前學生的姓名、成績等信息PrivateSubStuKCM_Click()DimStXH,StKCM選者當前課程的學生選課信息StuADO.RecordSource=selectXH,XM,KCM,CJ,XH,ZY,XFfromXS_KC_CJwhereKCM=+Trim(StuKCM.Text)+andZY=+Trim(StuZY.Text)+S

46、tuADO.Refresh沒有學生選者該門課程IfStuADO.Recordset.RecordCount=0ThenifnorecordthenexitsubStuXM.Text=StuCJ.Text=StuXF.Text=ExitSubEndIfSqlCmd.CommandText=ShowScoreSqlCmd.CommandType=adCmdStoredProcSetStXH=SqlCmd.CreateParameter(XH,adVarChar,adParamInput,6)SqlCmd.Parameters.Append(StXH)SetStKCM=SqlCmd.CreatePa

47、rameter(KCM,adVarChar,adParamInput,16)SqlCmd.Parameters.Append(StKCM)SqlCmd(XH)=StuXH.TextSqlCmd(KCM)=StuKCM.TextSetSqlRes=SqlCmd.ExecuteStuXH.Text=SqlRes(XH)IfNotSqlRes.EOFThenIfSqlRes.Fields.Count=4ThenStuXM.Text=SqlRes(XM)StuCJ.Text=SqlRes(CJ)StuXF.Text=CStr(SqlRes(XF)&)EndIfEndIfSqlCmd.Parameter

48、s.Delete(XH)SqlCmd.Parameters.Delete(KCM)EndSub“更新”Click事件處理,通過調用AddStuScore,來添加當前課程,當前學生的成績信息PrivateSubStuUpd_Click()DimStXH,StKCM,StCJ,StXFIfTrim(StuCJ.Text)=ThenMsgBox輸入完整的信息!”,,提示ExitSubEndIfSqlCmd.CommandText=AddStuScoreSqlCmd.CommandType=adCmdStoredProc創(chuàng)建參數(shù)對象SetStXH=SqlCmd.CreateParameter(XH,adVarChar,adParamInput,6)SqlCmd.Parameters.Append(StXH)SetStKCM=SqlCmd.CreateParameter(KCM,adVarChar,adParamInput,16)SqlCmd.Parameters.Append(StKCM)SetStCJ=SqlCmd.CreateParameter(CJ,adInteger,adParamInput)SqlCmd.Parameters.Append

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論