




已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
P1.0 數(shù)據(jù)庫的建立學(xué)生成績數(shù)據(jù)庫XSCJ使用的表結(jié)構(gòu)如下:1、 學(xué)生信息表xs存放學(xué)生的基本信息,表結(jié)構(gòu)如下表所示:列名數(shù)據(jù)類型長度允許空xhchar6否xmchar8是xbbit1是zychar12是cssjDatetime8是zxfint4是bzvarchar500是zpimage16是2、 課程信息表kc存放課程的基本信息,表結(jié)構(gòu)如下表所示:列名數(shù)據(jù)類型長度允許空kchchar4否kcmchar16是xqtinyint1是xsint4是xfint4是3、學(xué)生課程成績表xs_kc存放學(xué)生課程的成績信息,表結(jié)構(gòu)如下表所示:列名數(shù)據(jù)類型長度允許空xhchar8否kchchar4否cjint4是xfint4是Xh,kch設(shè)置為關(guān)鍵字段。4、 系統(tǒng)登錄表xscjuser存放用戶登錄信息。性別對應(yīng)表cxb列名數(shù)據(jù)類型長度允許空xbbit1否xbmvarchar4否5、 學(xué)生信息表XS數(shù)據(jù)樣本學(xué)號姓名專業(yè)名性別出生時間總學(xué)分備注081101王林計算機(jī)11990-02-1050null081102程明計算機(jī)11991-02-0150null081103王燕計算機(jī)01989-10-0650null081104韋嚴(yán)平計算機(jī)11990-08-2650null081106李方方計算機(jī)11990-11-2050null081107李明計算機(jī)11990-05-0154提前修完數(shù)據(jù)結(jié)構(gòu),并獲學(xué)分081108林一帆計算機(jī)11989-08-0552已提前修完一門課081109張強(qiáng)民計算機(jī)11989-08-1150Null081110張蔚計算機(jī)01991-07-2250三好生081111趙琳計算機(jī)01990-03-1850Null081113嚴(yán)紅計算機(jī)01989-08-1148有一門功課不及格,待補(bǔ)考081201王敏通信工程11989-06-1042Null081202王林通信工程11989-01-2940有一門功課不及格,待補(bǔ)考081203王玉民通信工程11990-03-2642Null081204馬琳琳通信工程01989-02-1042Null081206李計通信工程11989-09-2042Null081210李紅慶通信工程11989-05-0144已提前修完一門課081216孫祥欣通信工程11989-03-0942Null081218孫研通信工程11990-10-0942Null081220吳薇華通信工程01990-03-1842Null081221劉燕敏通信工程01989-11-1242Null081241羅林琳通信工程01990-01-3050轉(zhuǎn)專業(yè)學(xué)習(xí)照片字段的內(nèi)容通過圖像文件加載到相應(yīng)的照片字段中。6、 課程信息表KC數(shù)據(jù)樣本課程號課程名開課學(xué)期學(xué)時學(xué)分101計算機(jī)基礎(chǔ)1805102程序設(shè)計與語言2684206離散數(shù)學(xué)4684208數(shù)據(jù)結(jié)構(gòu)5684209操作系統(tǒng)6684210計算機(jī)原理5855212數(shù)據(jù)庫原理7684301計算機(jī)網(wǎng)絡(luò)7513302軟件工程75137、 學(xué)生課程成績表XS_KC數(shù)據(jù)樣本學(xué)號課程號成績0811011018008110110278081101206760811031016208110310270081103206810811041019008110410284081104206650811071017808110710280081107206680811081018508110810264081108206870811091016608110910283081109206700811112067608111310163081113102790811132066008120110180081202101650812031018708120410191081210101760811021027808110220678081106101650811061027108110620680081110101950811101029008111020689081111101900811111027108121610181081218101700812201018208122110176081241101908、 性別對照表:xbxbm1男0女P1.1 連接SQL Server數(shù)據(jù)庫1、 創(chuàng)建數(shù)據(jù)源首先在“控制面板”的“管理工具”中創(chuàng)建ODBC數(shù)據(jù)源。(1) 在“控制面板”的“管理工具”中選擇“ODBC數(shù)據(jù)源”圖標(biāo)雙擊,出現(xiàn)如圖所示的界面在圖中選擇“添加”按鈕,進(jìn)入如下圖所示的界面。(2) 在上圖中,選擇安裝的驅(qū)動程序為“SQL Server”,單擊“完成按鈕”,出現(xiàn)如下圖所示的界面。輸入數(shù)據(jù)源名,輸入本地服務(wù)器名。(3) 選擇下一步,出現(xiàn)如下圖所示的界面。也可選擇另一種驗證方式。輸入登錄ID和密碼。(4) 選擇下一步,出現(xiàn)如下圖所示的界面。更改默認(rèn)的數(shù)據(jù)庫,在此設(shè)置默認(rèn)數(shù)據(jù)庫為XSCJ,然后提示完成剩余工作。2、 ADO Data和ADODB連接SQL Server數(shù)據(jù)庫(注:此操作在后面的除了第一個窗體外的三個窗體中都會用到,在這里提前說明一下,并不需要設(shè)置在第一個窗體中)(1)用可視化ADODC控件連接數(shù)據(jù)庫在VB選“工程”菜單“部件”菜單項,系統(tǒng)打開部件對話框,如下圖所示:選擇兩個ADO控件,它們是“Microsoft ADO Data Control 6.0”和“Microsoft DataGrid Control 6.0”。最后“確定”,此后VB6.0工具欄中就增加了上述兩個控件的圖標(biāo)。前者用于連接數(shù)據(jù)庫,后者用于以表格形式顯示數(shù)據(jù)庫表的內(nèi)容。在VB表單中加入“Microsoft ADO Data Control 6.0”控件(簡稱ADODC)命名合適的名稱,例如stuado。設(shè)置控件ADODC的ConnectionString屬性。選擇該屬性,如下圖所示。單擊“”,系統(tǒng)打開對話框,如下圖所示:單擊“生成”,系統(tǒng)顯示“數(shù)據(jù)鏈接屬性”對話框,選擇“連接”選項卡,如下圖所示:在“指定數(shù)據(jù)源”處選擇數(shù)據(jù)源mssql,在初始目錄處選擇xscj數(shù)據(jù)庫。測試連接一下。如果成功,點擊“確定”按鈕。如下圖所示:則自動生成連接字符串。選擇“應(yīng)用”按鈕,然后選擇“確定”按鈕。設(shè)置ADODC的RecordSource屬性。如下圖所示:打開“屬性頁”。在“命令類型”中選擇“1-adCmdText”,在命令文本中輸入“select * from xs,cxb where xs.xb=cxb.xb”。選擇“應(yīng)用”按鈕,然后選擇“確定”按鈕。數(shù)據(jù)源控件連接數(shù)據(jù)庫完成。此時可以直接訪問它,或者可以充當(dāng)數(shù)據(jù)表格控件的數(shù)據(jù)源使用。注:選擇命令類型1-adCmdText,表示命令為SQL語句。2-adCmdTable,表示命令為一表名。4-adCmdStoredProc,表示命令是一存儲過程名。8-adCmdUnknown,表示不確定命令類型。如果命令類型為存儲過程名,則選擇對應(yīng)的名稱,否則在命令文本中寫入SQL語句。P1.2 學(xué)生成績管理系統(tǒng)主界面本系統(tǒng)是一個用VB實現(xiàn)的簡單的學(xué)生成績管理系統(tǒng),使用可視ADODC控件和ADODB對象來訪問后臺數(shù)據(jù)庫服務(wù)器,系統(tǒng)包含學(xué)生信息的查詢、學(xué)生信息的錄入修改刪除、學(xué)生成績的錄入修改。系統(tǒng)主界面如下圖所示。主要功能:主界面,導(dǎo)航作用,單擊可進(jìn)入操作窗口。創(chuàng)建過程:(1) 創(chuàng)建菜單。在窗口中點擊右鍵,選擇“編輯菜單”選項,出現(xiàn)如下圖所示的界面:分別定義四個菜單的標(biāo)題和名稱(程序中的名字是名稱,顯示的名字是標(biāo)題)菜單分別起名為學(xué)生信息查詢(msstusearch)、學(xué)生信息修改(msstuinfo)、學(xué)生成績修改(msstuscore)、退出系統(tǒng)(msquitsys)。注:在保存的過程中,需要新建文件夾保存。出現(xiàn)下圖,選擇“no”。注:修改窗口的名稱為:main,修改窗口的caption為“學(xué)生成績管理系統(tǒng)”創(chuàng)建三個窗口。名稱和caption分別為addstu(學(xué)生信息修改)、addstuscore(學(xué)生成績修改)、StuSearch(學(xué)生信息查詢)(2) 主要代碼退出系統(tǒng)菜單Private Sub msQuitSys_Click()EndEnd Sub學(xué)生信息修改菜單Private Sub msStuInfo_Click()addstu.ShowEnd Sub學(xué)生成績錄入菜單Private Sub msStuScore_Click()addstuscore.ShowEnd Sub學(xué)生信息查詢菜單Private Sub msStuSearch_Click()StuSearch.ShowEnd SubP1.3 學(xué)生信息查詢目的與要求:了解怎么使用控件顯示數(shù)據(jù)庫中的數(shù)據(jù),同時了解查詢的基本方法。主要功能:可以滿足簡單查詢的需要,什么條件也不輸則分頁顯示所有記錄,可以輸入條件進(jìn)行簡單的模糊查詢,各條件之間為與的關(guān)系,在查詢的結(jié)果中移動記錄指針可以查看這個學(xué)生的具體選課信息。創(chuàng)建過程:(1) 在窗體上放入學(xué)生信息查詢的ADODC和學(xué)生選課信息的ADODC、創(chuàng)建兩個學(xué)生信息顯示的DataGrid和學(xué)生選課信息顯示的DataGrid,并分別起名為stuado,stukcado,studg和stukcdg。放入學(xué)號textbox(stuxh)、姓名textbox(stuxm)和專業(yè):下拉列表框comboBox控件 (stuzy)。放入一個查詢按鈕(stusch)。注:ADODC控件可隱藏。注:下拉列表框的選項在屬性list中輸入(計算機(jī)、通信),初始化顯示是在test屬性中輸入(所有專業(yè))。(2) 設(shè)置stuado的connectionstring屬性為:(手動生成)(3) 設(shè)置stuado的recordsource屬性為:select * from xs,cxb where xs.xb=cxb.xb(4) 設(shè)置studg的datasource屬性為stuado。(5) 設(shè)置stukcado的connectionstring屬性為:(手動生成)(6) 設(shè)置stukcado的recordsource屬性為:select * from xs,kc,xs_kc where xs.xh=xs_kc.xh and kc.kch=xs_kc.kch(7) 設(shè)置stukcdg的datasource屬性為stukcado。實現(xiàn)過程:直接打開時,由于控件屬性的設(shè)置,所以顯示所有記錄。當(dāng)輸入查詢條件時,單擊查詢按鈕,則調(diào)用makesqlstr函數(shù)產(chǎn)生查詢字符串,然后重新設(shè)置控件的屬性,打開控件顯示查詢結(jié)果集。當(dāng)專業(yè)改變時,調(diào)用stuzy_click函數(shù)來分別顯示所選的專業(yè)學(xué)生記錄。當(dāng)在查詢結(jié)果學(xué)生信息記錄集中移動記錄指針時,可以在下面的選課表中看到學(xué)生選課的信息。主要代碼:(1) 根據(jù)學(xué)號、姓名的輸入信息和專業(yè)的選擇生成模糊查詢的SQL字符串。Dim sqlstr As String 聲明保存查詢字符串的變量Public Sub makesqlstr() 產(chǎn)生查詢字符串的函數(shù)sqlstr = If Trim(stuxh) Thensqlstr = and xh like % + Trim(stuxh.Text) + %End IfIf Trim(stuxm) Thensqlstr = sqlstr + and xm like % + Trim(stuxm.Text) + %End IfIf Trim(stuzy) 所有專業(yè) And Trim(stuzy) Thensqlstr = sqlstr + and zy= + Trim(stuzy.Text) + End IfIf Trim(stuzy) = Thensqlstr = sqlstrEnd IfEnd Sub(2) “專業(yè)”列表click事件處理顯示選擇當(dāng)前專業(yè),并且符合學(xué)號、姓名查詢條件的學(xué)生的信息。Private Sub stuzy_Click()當(dāng)專業(yè)改變時重新從數(shù)據(jù)庫中提取數(shù)據(jù) makesqlstrstuado.RecordSource = select * from xs,cxb where xs.xb=cxb.xb _& sqlstr stuado.RefreshEnd Sub(3) “查詢”click事件處理用生成的模糊查詢的SQL字符串,來刷新stuado,并顯示到關(guān)聯(lián)的datagrid中。Private Sub stusch_Click()單擊查詢按鈕從數(shù)據(jù)庫中提取數(shù)據(jù)makesqlstrstuado.RecordSource = select * from xs,cxb where xs.xb=cxb.xb & sqlstrstuado.RefreshEnd Sub(4) 學(xué)生信息顯示的datagrid的SelChange事件處理。以當(dāng)前學(xué)生信息的學(xué)號作為查詢條件,從xs_kc表中查找當(dāng)前學(xué)生的選課記錄,并顯示到學(xué)生課程顯示的stukcdg中。Private Sub studg_SelChange(Cancel As Integer)stukcado.RecordSource = select * from xs,kc,xs_kc _& where xs.xh=xs_kc.xh and kc.kch=xs_kc.kch _& and xs.xh= + stuado.Recordset(xh) + stukcado.RefreshEnd SubP1.4學(xué)生信息修改目的要求:了解對數(shù)據(jù)庫操作的基本方法(增、刪、改)主要功能:用戶可以單擊下面的表格,用戶資料便反映到上面的控件中,這時可以修改控件中的信息,單擊更新實現(xiàn)修改。如輸入一個新的學(xué)號,單擊更新實現(xiàn)記錄的添加,當(dāng)選中當(dāng)前記錄點刪除時則可以刪除此學(xué)生記錄,雙擊照片可以選擇學(xué)生照片,用于更新學(xué)生照片信息。創(chuàng)建過程:(1) 在窗體上放入adodc、datagrid并起名為stuado,studg。(2) 設(shè)置stuado的connectionstring屬性為(手動設(shè)置)(3) 設(shè)置stuado的recordsource屬性為select * from xs,cxb where xs.xb=cxb.xb(4) 設(shè)置studg的datasource屬性為stuado。(5) 在窗體上放入image控件并起名為stupic,用來顯示學(xué)生照片。選擇image控件的datasource屬性為stuado,設(shè)置datafield屬性為zp,這就完成了image控件和數(shù)據(jù)庫的綁定。記錄集移動時,image里面會顯示當(dāng)前學(xué)生的照片。(6) 并在窗體上放入如下圖所需控件。學(xué)號:textbox控件(stuxh),姓名:textbox控件(stuxm),備注:textbox控件(stubz)出生日期:textbox控件(cssj),專業(yè):combo box控件(stuzy),list屬性中填“計算機(jī)”、“通信工程”,itemdata屬性中填“0”,“1”,index屬性中填“0”。總學(xué)分:textbox控件(stuzxf)。更新:commandbutton控件(stuupd),刪除:commandbutton控件(studel)。性別:首先是放上一個frame控件,在frame控件上放上一個optionbutton控件,然后復(fù)制optionbutton控件,提示如下圖:選擇“是”。修改兩個optionbutton控件的名稱都為stuxbm,修改caption的值分別為“男”和“女”。它們的index值自動賦值為“0”和“1”。實現(xiàn)過程:當(dāng)單擊datagrid中的記錄時記錄集游標(biāo)也跟著移動,在stuado_movecomplete事件中取出本條記錄顯示在上面的控件中。我們可以在控件中修改學(xué)生信息,雙擊選擇學(xué)生照片,按“更新”按鈕調(diào)用stuupd_click更新到數(shù)據(jù)庫中,當(dāng)輸入新的學(xué)生記錄時按“更新”按鈕調(diào)用stuupd_click添加到數(shù)據(jù)庫中,也可以按“刪除”按鈕調(diào)用studel_click函數(shù)刪除此記錄,系統(tǒng)會調(diào)用checkxs觸發(fā)器來保持?jǐn)?shù)據(jù)的參照完整性。(1) 在數(shù)據(jù)庫中定義的觸發(fā)器。為了保證數(shù)據(jù)的參照完整性,在刪除學(xué)生時要檢查成績表中此學(xué)生的記錄,有記錄就刪除。此過程房子觸發(fā)器中完成。create trigger checkxs on dbo.xsfor deleteasdelete from xs_kcwhere xh in(select xh from deleted)(2) VB主要代碼general中定義的全局變量Private filename As StringPrivate sqlcon As New ADODB.ConnectionPrivate sqlres As New ADODB.RecordsetPrivate sqlcmd As New ADODB.Commandform加載時打開數(shù)據(jù)庫連接Private Sub Form_Load()sqlcon.Provider = MSDASQL.1sqlcon.Open Persist Security Info=False;Data Source=mssql;Initial Catalog=xscjEnd Sub注:在手動生成中拷貝代碼form卸載時關(guān)閉數(shù)據(jù)庫連接Private Sub Form_Unload(Cancel As Integer)sqlcon.CloseEnd Sub學(xué)生信息記錄集記錄指針移動完成事件代碼當(dāng)單擊stuado控件記錄移動圖標(biāo)時產(chǎn)生,在這個過程中取出當(dāng)前記錄的學(xué)生信息,更新到學(xué)號、姓名等顯示控件中去,實現(xiàn)顯示和stuado控件記錄移動聯(lián)動。Private Sub stuado_movecomplete(ByVal adReason As ADODB.EventReasonEnum, _ByVal perror As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)If Not pRecordset.EOF And Not pRecordset.BOF Thenstuxh.Text = pRecordset(xh)stuxm.Text = pRecordset(xm)stucssj.Text = pRecordset(cssj)stuzy.Item(0).Text = pRecordset(zy)stuzxf.Text = pRecordset(zxf)stubz.Text = CStr(pRecordset(bz) & )If pRecordset(xb) = 0 Thenstuxbm.Item(0).Value = TrueElsestuxbm.Item(1).Value = TrueEnd IfEnd IfEnd Sub“刪除”click事件處理代碼從stuado記錄集中取出當(dāng)前記錄的學(xué)號,然后通過commad對象執(zhí)行delete語句來刪除當(dāng)前的學(xué)生記錄。Delete語句的調(diào)用會引起checkxs觸發(fā)器的動作。Private Sub studel_Click()ret = MsgBox(是否要刪除 + stuado.Recordset(xh) + 號學(xué)生的記錄!, vbYesNo, 提示)If ret = vbYes Thensqlcmd.ActiveConnection = sqlconsqlcmd.CommandText = delete from xs where xh= + stuado.Recordset(xh) + sqlcmd.Executestuado.RecordSource = select * from xs,cxb where xs.xb=cxb.xbstuado.RefreshEnd IfEnd Sub“照片”double click事件的處理代碼打開對話框,給用戶選擇照片,并顯示在stupic控件中,同時記錄下選擇的文件名和路徑到全局filename變量中,給后面的更新學(xué)生信息使用。Private Sub stupic_DblClick()cdlg.Filter = 位圖(*.bmp)|*.bmp|圖像(*.jpg)|*.jpgcdlg.ShowOpenfilename = cdlg.filenamestupic.Picture = LoadPicture(filename) 預(yù)覽圖片End Sub注:在窗體上添加一個自動隱藏的如下圖所示的控件commondialog:修改名字為cdlg。不用修改其他任何屬性。讀取照片數(shù)據(jù)的函數(shù)代碼根據(jù)輸入照片的文件名,打開文件將照片數(shù)據(jù)讀入到數(shù)組中,然后通過appendchunk函數(shù)把照片數(shù)據(jù)寫入到field對象中去。Private Sub picsavetodb(ByRef fld As ADODB.Field, diskfile As String) 保存圖片到ADODB.FIELD對象中去Const blocksize = 4096Dim bytedata() As Byte 定義數(shù)據(jù)塊數(shù)組Dim numblocks As Long 定義數(shù)據(jù)塊個數(shù)Dim filelength As Long 標(biāo)識文件長度Dim leftover As Long 定義剩余字節(jié)長度Dim sourcefile As Long 定義自由文件號Dim i As Long 定義循環(huán)變量sourcefile = FreeFile 提供一個尚未使用的文件號Open diskfile For Binary Access Read As sourcefile 打開文件filelength = LOF(sourcefile) 得到文件長度If filelength = 0 Then 判斷文件是否存在Close sourcefileMsgBox diskfile & 無內(nèi)容或不存在!Elsenumblocks = filelength blocksize 得到數(shù)據(jù)塊的個數(shù)leftover = filelength Mod blocksize 得到剩余字節(jié)數(shù)fld.Value = NullReDim bytedata(blocksize) 重新定義數(shù)據(jù)塊的大小For i = 1 To numblocksGet sourcefile, , bytedata() 讀到內(nèi)存塊中fld.AppendChunk bytedata() 寫入FLDNext iReDim bytedata(leftover) 重新定義數(shù)據(jù)塊的大小Get sourcefile, , bytedata() 讀到內(nèi)存塊中fld.AppendChunk bytedata() 寫入FLDClose sourcefile 關(guān)閉源文件End IfEnd Sub“更新”click事件處理代碼先查詢當(dāng)前學(xué)號的學(xué)生信息。有當(dāng)前學(xué)生的信息則修改相應(yīng)的記錄字段,調(diào)用picsavetodb將選擇的照片保存到記錄集的“zp”字段中,將記錄集更新到數(shù)據(jù)庫中;沒有當(dāng)前學(xué)生的信息則通過addnew新增一條記錄,然后修改相應(yīng)的記錄字段,并將記錄集更新到數(shù)據(jù)庫中,這里在調(diào)用picsavetodb前先要判斷filename中是否選擇了照片,有照片才保存到數(shù)據(jù)庫中去。Private Sub stuupd_Click()看是否有此學(xué)生記錄,有就修改,沒則添加Dim sqlstr As StringDim bytedata() As ByteDim adofld As ADODB.Fieldsqlstr = select * from xs where xh= + Trim(stuxh.Text) + sqlres.Open sqlstr, sqlcon, adOpenDynamic, adLockPessimisticIf Not sqlres.EOF Then修改sqlres(xm) = stuxm.TextIf stuxbm(0).Value = True Thensqlres(xb) = 1ElseIf stuxbm(1).Value = True Thensqlres(xb) = 0End Ifsqlres(zy) = stuzy.Item(0).Textsqlres(cssj) = CDate(stucssj.Text)sqlres(zxf) = CInt(stuzxf.Text)sqlres(bz) = stubz.Text保存圖片到ADODB.FIELD對象中去Set adofld = sqlres(zp)If filename ThenCall picsavetodb(adofld, filename)End Ifsqlres.UpdateElse添加sqlres.AddNewsqlres(xh) = stuxh.Textsqlres(xm) = stuxm.TextIf stuxbm.Item(1).Value = True Thensqlres(xb) = 1ElseIf stuxbm.Item(0).Value = True Thensqlres(xb) = 0End Ifsqlres(zy) = stuzy.Item(0).Textsqlres(cssj) = CDate(stucssj.Text)If Trim(stuzxf.Text) Thensqlres(zxf) = CInt(stuzxf.Text)End Ifsqlres(bz) = stubz.Text保存圖片到ADODB.FIELD對象中去Set adofld = sqlres(zp)If filename ThenCall picsavetodb(adofld, filename)End Ifsqlres.UpdateEnd Iffilename = sqlres.Closestuado.RecordSource = select * from xs,cxb where xs.xb=cxb.xbstuado.RefreshEnd SubP1.5學(xué)生成績的錄入目的要求:了解VB中調(diào)用SQL Server存儲過程的基本方法。了解parameter參數(shù)對象的使用,視圖的更新使用,觸發(fā)器的使用。程序界面如下圖所示:主要功能:用戶可以選擇專業(yè),這樣會列出本專業(yè)所有的學(xué)生學(xué)號,選擇課程,這時下面的datagrid中會顯示相應(yīng)課程的學(xué)生的成績和學(xué)分可以在datagrid中輸入學(xué)生成績,上面修改單個學(xué)生成績,學(xué)分不允許修改,輸入成績,觸發(fā)器會自動添加相應(yīng)的學(xué)分。創(chuàng)建過程:參照上面學(xué)生信息修改窗口界面。專業(yè)(stuzy),課程名(stukcm),學(xué)號(stuxh),姓名(stuxm),成績(stucj),學(xué)分(stuxf),更新(stuupd),刪除(studel),adodc(stuado),datagrid(studg)。注:取消按鈕先不設(shè)置。姓名和學(xué)分enabled=false。(不允許修改)置stuado的connectionstring屬性(手工設(shè)置);recordsource屬性為select * from xs_kc_cj Xs_kc_cj為視圖名稱 datagrid窗口屬性中datasource屬性為stuado。allowupdate=true,這樣datagrid修改成允許更新到視圖中,從而更新到數(shù)據(jù)庫相應(yīng)的表中。選中datagrid,右鍵菜單中選擇“屬性”,選擇“列”選項卡,添加4列,分別選擇datafield為xh,xm,cj,xf。如下圖所示:注:在窗口中的datagrid控件中右鍵菜單中,選擇“追加”兩次,可添加兩列,然后再執(zhí)行上面的操作在“列”選項卡中,添加4列。實現(xiàn)過程:在form_load事件中編寫專業(yè)、課程列表項的添加,各專業(yè)通過調(diào)用getstuzy存儲過程來得到,同時檢索視圖中這個專業(yè)、選擇這門課程的學(xué)生,顯示在下面的datagrid中,輸入成績,觸發(fā)器會自動添加學(xué)分,可以選擇學(xué)號,添加一個學(xué)生的某門課程的成績和選課到學(xué)生選課表中去,刪除xs_kc表中此學(xué)生此門課程的成績記錄。主要代碼:1、 SQL Server中定義的存儲過程(1) 創(chuàng)建GetStuZY的存儲過程,從學(xué)生表中查詢專業(yè)信息create procedure getstuzyasselect distinct zy from xsGO(2) 創(chuàng)建顯示學(xué)生成績showscore存儲過程查看此學(xué)生的這門課成績是否存在,再返回成績記錄,否則返回學(xué)號、姓名、專業(yè)、課程名信息。create procedure showscore (xh varchar(6),kcm varchar(16)asdeclare kch varchar(3),count intbeginselect kch=kch from kc where kcm=kcmselect count=count(*) from xs_kc where xh=xh and kch=kchif count=0檢查查詢記錄結(jié)果數(shù)目select xh,xm,zy from xs where xh=xh返回學(xué)生記錄elseselect xs.xh,xs.xm,cj,xs_kc.xf,kcm from xs,kc,xs_kcwhere xs.xh=xh and kc.kch=kchand xs.xh=xs_kc.xh and kc.kch=xs_kc.kch返回成績記錄endGO(3) 創(chuàng)建插入學(xué)生成績的addstuscore存儲過程。學(xué)生此門課程成績記錄如存在則修改成績,如不存在則添加這條記錄。create procedure addstuscore(xh varchar(6),kcm varchar(16),cj int,xf int)asbegindeclare kch varchar(3)select kch=kch from kc where kcm=kcmselect * from xs_kc where xh=xh and kch=kchif rowcount=1update xs_kc set cj=cj,xf=xf where xh=xh and kch=kchelseinsert into xs_kc values(xh,kch,cj,xf)endGO(4) 創(chuàng)建xs_kc_cj視圖用來在datagrid中顯示學(xué)生、課程、成績的信息。create view dbo.xs_kc_cjasselect xs_kc.xh,kc.kcm,xs_kc.cj,xs_kc.xf,xs.xm,xs.zyfrom kc inner joinxs_kc on kc.kch=xs_kc.kch inner joinxs on xs_kc.xh=xs.xhGO(5) 創(chuàng)建xs_kc的insert、update觸發(fā)器當(dāng)添加和修改成績后,根據(jù)當(dāng)前的成績自動為該學(xué)生該課程增加學(xué)分。當(dāng)成績小于60分時,學(xué)分為0;當(dāng)大于等于60分時,從該門課程表中取出當(dāng)前課程的學(xué)分來更新當(dāng)前學(xué)生在xs_kc表中這門課程的學(xué)分。create trigger checkxfon xs_kc for insert,updateasbeginset nocount on;update xs_kc set xf=0 where cj=60endGO2、 VB的主要代碼(1) general中定義的全局變量Private sqlcon As New ADODB.ConnectionPrivate sqlres As ADODB.RecordsetPrivate sqlcmd As New ADODB.Command(2) FORM加載Form加載時打開數(shù)據(jù)庫連接,并且通過執(zhí)行select語句從數(shù)據(jù)庫中提取課程名,添加到課程下拉列表中去,執(zhí)行g(shù)etstuzy存儲過程,把返回的專業(yè) 添加到專業(yè)下拉列表中去。在datagrid中顯示當(dāng)前專業(yè)、當(dāng)前課程的學(xué)生、成績信息、方便修改。Private Sub Form_Load()sqlcon.Provider = msdasqlsqlcon.Open Persist Security Info=False;Data Source=mssql;Initial Catalog=xscjsqlcmd.ActiveConnection = sqlconsqlcmd.CommandText = select * from kcsqlcmd.CommandType = adCmdTextSet sqlres = sqlcmd.Executestukcm.Text = sqlres(kcm)While Not sqlres.EOFstukcm.AddItem (Trim(sqlres(kcm)sqlres.MoveNextWend以上為添加課程sqlcmd.CommandText = getstuzysqlcmd.CommandType = adCmdStoredProcSet sqlres = sqlcmd.Executestuzy.Text = sqlres(zy)While Not sqlres.EOFstuzy.AddItem (sqlres(zy)sqlres.MoveNextWend以上添加專業(yè)sqlcmd.CommandText = select * from xs where xs.zy= + stuzy.Text + sqlcmd.CommandType = adCmdTextSet sqlres = sqlcmd.Executestuxh.Text = sqlres(xh)While Not sqlres.EOFstuxh.AddItem (Trim(sqlres(xh)sqlres.MoveNextWend以上添加學(xué)號stuxh_Clickstuzy_Clickstuado.RecordSource = select xh,xm,kcm,cj,xh,zy,xf from xs_kc_cj where kcm = + Trim(stukcm.Text) + and zy = + Trim(stuzy.Text) + stuado.RefreshEnd Sub(3) Form卸載Form卸載時關(guān)閉數(shù)據(jù)庫連接。Private Sub Form_Unload(Cancel As Integer)sqlres.Closesqlcon.CloseEnd Sub(4) Stuado移動記錄Stuado移動記錄完成的時候,在學(xué)號、姓名、成績、學(xué)分等顯示控件中顯示當(dāng)前學(xué)生的當(dāng)前課程的成績信息。Private Sub stuado_movecomplete(ByVal adReason As ADODB.EventReasonEnum, ByVal perror As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)If Not pRecordset.EOF And Not pRecordset.BOF Thenstuxh.Text = pRecordset(xh)stuxm.Text = pRecordset(xm)stucj.Text = pRecordset(cj)stuxf.Text = CStr(pRecordset(xf) & )End IfEnd Sub(5) “刪除”click事件處理調(diào)用command執(zhí)行delete刪除當(dāng)前學(xué)號、當(dāng)前課程名的成績記錄。Private Sub studel_Click()ret = MsgBox(是否要刪除 + stuxh.Text + 號學(xué)生的 + Trim(stukcm.Text) + 課的成績記錄!, vbYesNo, 提示)If ret = vbYes Thensqlcmd.ActiveConnection = sqlconsqlcmd.CommandText = delete from xs_kc where xh= + stuxh.Text + and kch in(select kch from kc where kcm= + stukcm.Text + )sqlcmd.CommandType = adCmdTextsqlcmd.Executestuado.RecordSource = select xh,xm,kcm,cj,xh,zy,xf from xs_kc_cj where kcm= + Trim(stukcm.Text) + and zy= + Trim(stuzy.Text) + stuado.RefreshEnd IfEnd Sub(6) “課程”下拉列表click事件處理在視圖中查詢當(dāng)前專業(yè)、當(dāng)前課程的學(xué)生成績信息,同時調(diào)用showscore,在姓名、成績等text box中顯示當(dāng)前學(xué)生的姓名、成績等信息。Private Sub stukcm_Click()Dim stxh, stkcmstuado.RecordSource = select xh,xm,kcm,cj,xh,zy,xf from xs_kc_cj where kcm= + Trim(stukcm.Text) + and zy= + Trim(stuzy.Text) + stuado.RefreshIf stuado.Recordset.RecordCount = 0 Thenstuxm.Text = stucj.Text = stuxf.Text = Exit SubEnd Ifsqlcmd.CommandText = showscoresqlcmd.CommandType = adCmdStoredProcSet stxh = sqlcmd.CreateParameter(xh, adVarChar, adParamInput,
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)雇傭會計合同范本
- 烏龜銷售合同范例
- 薩提亞家庭治療模式在干預(yù)農(nóng)村陪讀老人隔代緊張關(guān)系中的運(yùn)用研究
- 商用土地流轉(zhuǎn)合同范本
- 商鋪拆門砌墻合同范本
- 咖啡廳合作合同范本
- 出租建材工具合同范本
- 商場保安雇傭合同范本
- 商鋪門頭合同范本
- Java開發(fā)述職報告
- 預(yù)制井筒施工方案
- PEP 六年級Unit2 Story time教學(xué)反思
- EPC工程竣工驗收和移交管理要點
- 深基坑巡視記錄
- 鎮(zhèn)墩穩(wěn)定計算
- 2022年學(xué)前教育生均公用經(jīng)費項目績效評價報告
- 環(huán)衛(wèi)清掃保潔、垃圾清運(yùn)及綠化服務(wù)投標(biāo)方案(技術(shù)標(biāo) )
- 中考綜合性學(xué)習(xí)復(fù)習(xí)教案
- 2023灌漿式半柔性路面技術(shù)規(guī)程
- 中國茶文化的-ppt-英文版
- FIDIC銀皮書(中英文對照)-6982
評論
0/150
提交評論