【正文】
. Visual Basic數(shù)據(jù)庫(kù)系統(tǒng)項(xiàng)目開(kāi)發(fā)實(shí)例 科學(xué)出版社15. Visual Basic應(yīng)用與開(kāi)發(fā)案例教程 清華大學(xué)出版社附錄:學(xué)生信息管理系統(tǒng)部分代碼如下:首先來(lái)添加一個(gè)公共模塊,在這個(gè)模塊中定義全局變量,代碼及變量說(shuō)明如下:Public modi As BooleanPublic txtsql As StringPublic find As BooleanPublic username As StringPublic qxstr As String定義一個(gè)公用函數(shù)用于數(shù)據(jù)庫(kù)表操作Public Function ExecuteSQL(ByVal sql As String) As Dim mycon As Dim rst As Set mycon = New = connstringDim stokens() As String 定義一個(gè)數(shù)組On Error GoTo exectuesql_errorstokens = Split(sql) 把sql值賦予該數(shù)組If InStr(INSER,DELETE,UPDATE, UCase(stokens(0))) Then sqlElseSet rst = New Trim(sql), mycon, adOpenKeyset, adLockOptimisticSet ExecuteSQL = rstEnd Ifexectuesql_exit:Set rst = NothingSet mycon = NothingExit Functionexectuesql_error:Resume exectuesql_exitEnd Function定義一個(gè)公用函數(shù)用于鏈接數(shù)據(jù)庫(kù)Public Function connstring() As Stringconnstring = provider=。同時(shí)感謝培養(yǎng)我的湖北經(jīng)濟(jì)學(xué)院。感謝同寢室的室友,在我的畢業(yè)設(shè)計(jì)中,他們的指點(diǎn)和提示給予了我極大的幫助,使我對(duì)整個(gè)畢業(yè)設(shè)計(jì)的思路有了總體的把握,并耐心的幫我解決了許多實(shí)際問(wèn)題,使我有了很大收獲。在這段時(shí)間里,我從吳教授的身上不僅學(xué)到了許多的專業(yè)知識(shí),更感受到了他工作中的兢兢業(yè)業(yè),生活中的平易近人。借此論文寫好之際,我想向所有人表示我的謝意。致謝在學(xué)校做論文的近幾個(gè)月時(shí)間是我學(xué)生生涯中最有價(jià)值的一段時(shí)光。在此,我能夠依據(jù)實(shí)際情況以及課堂上所學(xué)習(xí)的知識(shí),應(yīng)用到實(shí)際生活中,幫助解決在實(shí)際生活中遇到的問(wèn)題,對(duì)實(shí)施的方法、程序有了深刻的理解,在數(shù)據(jù)庫(kù)設(shè)計(jì)、編程技術(shù)方面有了一定的進(jìn)步。畢業(yè)設(shè)計(jì)是整個(gè)教學(xué)過(guò)程的最后環(huán)節(jié),是學(xué)生綜合運(yùn)用所學(xué)知識(shí)解決實(shí)際問(wèn)題能力的考查。結(jié)束語(yǔ)通過(guò)使用VB編程,使人真正體會(huì)到了可視化編程的優(yōu)點(diǎn),自己動(dòng)手開(kāi)發(fā)小規(guī)模的應(yīng)用系統(tǒng),學(xué)會(huì)一種規(guī)范化的編程方法,使我加深了對(duì)軟件的理解。同樣,拖動(dòng)Command2的字段到報(bào)表設(shè)計(jì)器,設(shè)置字段布局,界面如圖所示。制作界面如圖所示。1)學(xué)生檔案報(bào)表報(bào)表主要實(shí)現(xiàn)學(xué)生檔案信息的顯示和打印,通過(guò)報(bào)表設(shè)計(jì)器來(lái)實(shí)現(xiàn),新建一個(gè)報(bào)表設(shè)計(jì)器(DataReportStud),設(shè)置其DataSource屬性為DataEnv1,DataMember屬性為Command1。Command2,添加SQL語(yǔ)句:select * from class。添加3個(gè)Command命令對(duì)象,分別設(shè)置其屬性如下所述。 制作數(shù)據(jù)報(bào)表本系統(tǒng)主要實(shí)現(xiàn)3種功能的數(shù)據(jù)報(bào)表,即學(xué)生檔案信息報(bào)表、班級(jí)信息報(bào)表以及學(xué)費(fèi)報(bào)表。窗體啟動(dòng)時(shí)用戶類型默認(rèn)選項(xiàng)為“普通用戶”,可以在“權(quán)限”一欄中為普通用戶授予權(quán)限;當(dāng)用戶類型為“只讀用戶”時(shí),則用戶不具有任何操作權(quán)限。下面主要介紹新用戶的添加窗體frmAddUser,該窗體主要實(shí)現(xiàn)添加新用戶,限制用戶類型以及為普通用戶權(quán)限,可以對(duì)一些功能進(jìn)行操作。 制作系統(tǒng)權(quán)限維護(hù)窗體系統(tǒng)權(quán)限維護(hù)窗體主要是實(shí)現(xiàn)新用戶添加,權(quán)限設(shè)定。而通過(guò)兩個(gè)命令按鈕實(shí)現(xiàn)兩個(gè)列表框之間課程的移動(dòng)。本窗體通過(guò)一個(gè)ComboBox控件數(shù)組來(lái)選擇不同的班級(jí)信息,從而為滿足條件的信息設(shè)定修課課程。本窗體主要功能是:對(duì)于不同年級(jí)、專業(yè)、學(xué)制和學(xué)期設(shè)定不同的課程。運(yùn)行界面如圖所示。該窗體主要實(shí)現(xiàn)新開(kāi)設(shè)課程的添加,將其添加到課程種類表中保存。當(dāng)開(kāi)設(shè)新課程時(shí),首先需要將其添加到數(shù)據(jù)庫(kù)中,其次要設(shè)定修讀這門課程的年級(jí)及專業(yè)。這里只給出“確定”命令按鈕事件代碼,其他控件包括窗體初始化代碼省略。最后根據(jù)學(xué)生實(shí)際交納金額,修改數(shù)據(jù)庫(kù)記錄。當(dāng)設(shè)定好專業(yè)的收費(fèi)標(biāo)準(zhǔn)后,就可以為該專業(yè)學(xué)生交納費(fèi)用了。因?yàn)椴煌昙?jí)、不同專業(yè)以及不同學(xué)制使用的收費(fèi)標(biāo)準(zhǔn)不同,所以在交費(fèi)前需要為其設(shè)定收費(fèi)標(biāo)準(zhǔn)。 學(xué)生交費(fèi)管理窗體的制作學(xué)生交費(fèi)管理窗體主要實(shí)現(xiàn)學(xué)生學(xué)費(fèi)的交納,以及學(xué)生學(xué)費(fèi)的查詢等功能。該窗體通過(guò)3個(gè)ComboBox控件實(shí)現(xiàn)對(duì)滿足條件的課程的提取,使用一個(gè)ComboBox控件選擇不同學(xué)號(hào),在下面的文本框中為其輸入成績(jī),最后單機(jī)“確定”按鈕實(shí)現(xiàn)該同學(xué)成績(jī)提交。所以,在添加成績(jī)前,首先要保證該專業(yè)已經(jīng)開(kāi)設(shè)了該課程,而這一功能需要通過(guò)課程管理窗體來(lái)實(shí)現(xiàn),若未設(shè)定相關(guān)課程,系統(tǒng)會(huì)提示出錯(cuò)信息。它們通過(guò)3個(gè)命令按鈕來(lái)實(shí)現(xiàn)。在窗體上添加了一個(gè)ComboBox控件數(shù)組用于限定瀏覽條件。并且可以對(duì)選定的記錄進(jìn)行修改和刪除。下面逐一進(jìn)行介紹。可以是單條件查詢也可以是多個(gè)條件同時(shí)滿足的查詢。窗體界面如圖所示。當(dāng)單擊“查詢”按鈕時(shí),調(diào)用學(xué)生檔案窗體,這個(gè)窗體的設(shè)計(jì)在后面介紹;當(dāng)選定表格中的一條記錄,然后單擊“修改”按鈕時(shí),調(diào)用前面介紹過(guò)的窗體來(lái)修改學(xué)生檔案信息;當(dāng)然在選定表格中一條記錄時(shí),也可以單擊“刪除”按鈕將其刪除;“打印”按鈕用于打印當(dāng)前表格中的檔案信息。窗體界面如下圖所示。本界面使用了一個(gè)Text控件數(shù)組、一個(gè)ComboBox控件數(shù)組用于學(xué)生檔案信息的輸入;一個(gè)Command1命令按鈕用于信息的提交,一個(gè)用于取消的Command2命令按鈕。該窗體用于學(xué)生入學(xué)時(shí)錄入基本信息,并保存于學(xué)生檔案表。用戶狀態(tài)信息的顯示主要通過(guò)Toolbar1控件來(lái)實(shí)現(xiàn)。在主控界面中,最主要的是菜單,通告菜單來(lái)調(diào)其他功能窗體的運(yùn)行。 實(shí)現(xiàn)菜單功能分別單擊各個(gè)菜單項(xiàng),則打開(kāi)相應(yīng)的窗體。從管理人員表中我們知道不同等級(jí)的用戶其操作受限程度不同。 創(chuàng)建系統(tǒng)主控界面用戶在登陸界面輸入合法用戶名和密碼后,即登陸成功,馬上就進(jìn)入了系統(tǒng)主控界面。如果在數(shù)據(jù)表中確實(shí)存在這個(gè)用戶名,則檢查對(duì)應(yīng)的密碼是否正確,如果不正確則給出提示,并要求用戶重新輸入密碼。如果不為空,在系統(tǒng)數(shù)據(jù)庫(kù)中的系統(tǒng)信息表中檢查是否有這個(gè)用戶名,這需要定義一個(gè)字符串類型的變量接收SQL語(yǔ)句、一個(gè)Recordset對(duì)象變量打開(kāi)數(shù)據(jù)庫(kù),在程序起始部分定義這兩個(gè)變量。還能阻止用戶在運(yùn)行時(shí)改變格式。DataGrid控件中的每一列都有自己的字體、邊框、自動(dòng)換行和另外一些和其他列無(wú)關(guān)的能夠被設(shè)置的屬性。Column對(duì)象的Text和Value屬性引用當(dāng)前單元格的內(nèi)容。DataGrid控件的可包含的行數(shù)取決于系統(tǒng)的資源,而列樹最多可達(dá)32767列。在設(shè)計(jì)時(shí),可以通過(guò)調(diào)節(jié)列來(lái)交互地改變列寬度,或在Column對(duì)象的屬性頁(yè)中改變列寬度。如果一個(gè)單元格的文本太長(zhǎng),則不能在單元格中全部顯示,文本將在同一單元格內(nèi)拆行到下一行??梢栽诖a中指定當(dāng)前單元格,或者用戶可以使用鼠標(biāo)或箭頭鍵在運(yùn)行是改變他,通過(guò)在單元格中鍵入或編程的方式,單元格可以交互地編輯。這個(gè)DataGrid控件實(shí)際上是一個(gè)固定的列集合,每一列的行數(shù)都是不確定的。該數(shù)據(jù)識(shí)別的DataGrid控件看起來(lái)與Grid控件類似。比較簡(jiǎn)單的方法是使用DataGrid控件。此外,Update只能更新在Unique Table屬性中指定的表中的字段。在調(diào)用Update方法后當(dāng)前記錄仍為當(dāng)前記錄。字段和值的數(shù)量及次序不匹配將產(chǎn)生錯(cuò)誤。3) 在Update調(diào)用中傳送字段名數(shù)組和值數(shù)組。要設(shè)置字段值,請(qǐng)進(jìn)行下列某項(xiàng)操作:1) 為對(duì)象的Value屬性賦值,并調(diào)用Update方法。使用Update方法保存自調(diào)用AddNew方法或更改現(xiàn)有記錄中任何字段值以來(lái)所做的所有更改。 Fields,Values其中,參數(shù)Fields可選,為變體型,代表單個(gè)名稱;或變體型數(shù)組,代表需要修改的字段(一個(gè)或多個(gè))名稱及序號(hào)位置。如果提供者不支持用于保存Recordset對(duì)象的所需功能,則客戶端游標(biāo)將提供該功能。在Save方法完成后,當(dāng)前行位置將成為Recordset的首行。在Recordset關(guān)閉之前FileName將保持打開(kāi),在這段時(shí)間其他應(yīng)用程序可以讀取但不能寫入FileName。如果隨后使用新的FileName調(diào)用Save,那么Recordset將保存到新的文件中,但新文件和原始文件都是打開(kāi)的。在第一次保存Recordset時(shí)指定FileName。如果Filter屬性影響Recordset,將只保存經(jīng)過(guò)篩選的行。只能對(duì)打開(kāi)的Recordset調(diào)用Save方法。也可以是表中的某個(gè)常量。 FileName, PersistFormat參數(shù)FileName可選,代表文件的完整路徑名,用于保存Recordset。可以調(diào)用僅向前Recordset對(duì)象的MoveFirst方法;這樣做可使提供者重新執(zhí)行生成的Recordset對(duì)象的命令。如果記錄集是僅向前的,但是用戶希望支持向前或向后滾動(dòng),則可以使用CacheSize屬性創(chuàng)建記錄緩存,通過(guò)Move方法支持向后游標(biāo)移動(dòng)。而BOF屬性為True時(shí)向后移動(dòng)將產(chǎn)生錯(cuò)誤。Recordset對(duì)象必須支持書簽或向后游標(biāo)移動(dòng);否則方法調(diào)用將產(chǎn)生錯(cuò)誤。當(dāng)EOF屬性已經(jīng)為True時(shí)試圖向前移動(dòng)將產(chǎn)生錯(cuò)誤。使用MoveNext方法將當(dāng)前記錄向前移動(dòng)一個(gè)記錄(向Recordset的底部)。使用moveLast方法將當(dāng)前記錄位置移動(dòng)到Recordse中的最后一個(gè)記錄。、MoveLast、MoveNext和MovePrevious方法在指定Recordset對(duì)象中移動(dòng)到第一個(gè)、最后一個(gè)、下一個(gè)或前一個(gè)記錄并使該記錄成為當(dāng)前記錄。由于緩存的記錄將加載到內(nèi)存,因此應(yīng)避免不必要地緩存過(guò)多記錄。如果Move調(diào)用將當(dāng)前記錄位置移動(dòng)到第一個(gè)已緩存記錄的前一個(gè)記錄,將產(chǎn)生錯(cuò)誤。CaheSize屬性決定新檢索記錄組的大小,而且標(biāo)記錄是檢索到的第一個(gè)記錄。如果沒(méi)有指定,則移動(dòng)相對(duì)于當(dāng)前記錄。從空的Recordset對(duì)象調(diào)用Move方法將產(chǎn)生錯(cuò)誤。如果Move調(diào)用將當(dāng)前記錄位置移動(dòng)到尾記錄之后,則當(dāng)前記錄放置在記錄集(EOF為True)的尾記錄之后。如果Move調(diào)用將當(dāng)前記錄位置移動(dòng)到首記錄之前,則當(dāng)前記錄放置在記錄集(BOF為True)的首記錄之前。如果NumRecords參數(shù)大于零,則當(dāng)前記錄位置將向前移動(dòng)(向記錄集的末尾)。常量說(shuō)明AdBookmarkCurrent默認(rèn)。 NumRecords,Start其中,參數(shù)NumRecords為帶符號(hào)長(zhǎng)整形表達(dá)式,指定當(dāng)前記錄位置移動(dòng)的記錄數(shù)。如果UniqueTable動(dòng)態(tài)屬性被設(shè)置,并且Recordset是對(duì)多個(gè)表執(zhí)行JOIN操作的結(jié)果,那么,Delete方法將僅刪除UniqueTable屬性所命名的表中的行。如果處于批更新模式,則可用CancelBatch方法取消一個(gè)或一組掛起刪除。一旦離開(kāi)已刪除記錄,則無(wú)法再次訪問(wèn)它。從已刪除的記錄中檢索字段值將引發(fā)錯(cuò)誤。使用立即更新模式將在數(shù)據(jù)庫(kù)中進(jìn)行立即刪除,否則記錄將標(biāo)記為從緩存刪除,實(shí)際的刪除將在調(diào)用UpdateBatch方法時(shí)進(jìn)行。要使用該選項(xiàng),必須將Filter屬性設(shè)置為有效的預(yù)定義常量之一AdAffectAll刪除所有記錄AdAffectAllChapters刪除所有子集記錄使用Delete方法可將Recordset對(duì)象中的當(dāng)前記錄標(biāo)記為刪除。表AffectRecords取值常量說(shuō)明AdAffectCurrent默認(rèn)。Delete方法刪除當(dāng)前記錄或記錄組。如果傳送了Fields和Values參數(shù),則將新記錄發(fā)送給提供者以便緩存;需要調(diào)用UpdateBatch方法將新記錄傳遞到基本數(shù)據(jù)庫(kù)。提供者將任何字段值的更改緩存在本地。如果傳送了Fields和Values參數(shù),則立即將新記錄傳遞到數(shù)據(jù)庫(kù)(無(wú)須調(diào)用Update),且EditMode屬性值沒(méi)有改變(adEditNone)。提供者將任何字段值的更改緩存在本地。Addnew方法的行為取決于Recordset對(duì)象的更新模式以及是否傳送Fields和Values參數(shù)。如果Recordset對(duì)象不支持書簽,當(dāng)移動(dòng)到其他記錄時(shí)將無(wú)法對(duì)新記錄進(jìn)行訪問(wèn)。通過(guò)adAddNew使用Supports方法可驗(yàn)證是否能夠?qū)⒂涗浱砑拥疆?dāng)前的Recordset對(duì)象。如果Fields是數(shù)組,那么Values也必須是有相同成員數(shù)的數(shù)組,否則將發(fā)生錯(cuò)誤。基本語(yǔ)法為 FieldList, Values其中,參數(shù)FieldList可選,表示新記錄中字段的單個(gè)名稱、一組名稱或序號(hào)位置。調(diào)用UpdateBatch方法后,可以使用Status屬性檢查任何數(shù)據(jù)沖突并加以解決。如果提供者支持批更新,可以使提供者將多個(gè)記錄的更改存入緩存,然后使用UpdateBatch方法在單個(gè)調(diào)用中將他們傳送給數(shù)據(jù)庫(kù)。使用立即更新,一旦調(diào)用Update方法,對(duì)數(shù)據(jù)的所有更改將被立即寫入基本數(shù)據(jù)源。當(dāng)使用Move方法訪問(wèn)每個(gè)記錄(或枚舉Recordset)時(shí),可使用BOF和EOF屬性查看是否移動(dòng)已經(jīng)超過(guò)了Recordset的開(kāi)始或結(jié)尾。假設(shè)提供者支持相關(guān)的功能,可以使用MoveFirst、MoveLast、MoveNext和MovePrevious方法以及Mov