楊京山
摘 要:如何提高學(xué)生的VBA編程及Access數(shù)據(jù)庫綜合應(yīng)用能力,是筆者與同仁在教學(xué)過程中不斷進行探索課題。在總結(jié)多年教學(xué)實踐的基礎(chǔ)上,本文利用評分程序的制作及分析,探討Access數(shù)據(jù)庫、VBA編程的綜合應(yīng)用。
關(guān)鍵詞:Access評分程序 窗體 數(shù)據(jù)表程序代碼 Recordset對象 聲音模塊
在學(xué)習(xí)Access的基本理論和操作的基礎(chǔ)上,為培養(yǎng)和考查學(xué)生的實際能力、潛在能力和創(chuàng)造能力,筆者與同仁以“評分程序”(圖1)制作的過程為例,分析、操作和歸納體會Access的綜合應(yīng)用。
一、程序概述
通過程序?qū)崿F(xiàn)對選手分?jǐn)?shù)的統(tǒng)計。在編程解決分?jǐn)?shù)統(tǒng)計的過程中,一要對評委的打分進行統(tǒng)計,二要盡量利用數(shù)據(jù)庫來處理數(shù)據(jù),三要添加聲音效果,以此指導(dǎo)學(xué)生程序設(shè)計,從而達到利用Access進行的綜合應(yīng)用練習(xí),提高分析和解決問題能力的目的。
二、設(shè)計評分程序窗體
在讓學(xué)生明確程序運行基本要求的基礎(chǔ)上,為開發(fā)學(xué)生創(chuàng)造性思維,教師要創(chuàng)設(shè)有利于創(chuàng)造性產(chǎn)生的適宜環(huán)境,教授創(chuàng)造性思維策略??芍笇?dǎo)學(xué)生思考、推測與假設(shè):程序設(shè)計的基本框架,需要用到哪些Access對象,相關(guān)屬性設(shè)計的內(nèi)容,程序的基本結(jié)構(gòu),程序運行的操作等等。
例如,“評分程序”窗體運行時,輸入選手姓名和評委的打分后,單擊“評分”按鈕,彈出伴有“去掉一個最高分”聲音的對話框,并輸出最高分;同樣的方式又輸出最低分和最后得分。單擊“評分表”按鈕,會以數(shù)據(jù)表表格形式顯示選手得分情況。單擊“清零”按鈕,則將窗體清零,為給下一個選手打分做好準(zhǔn)備。單擊“刪除記錄”按鈕,則刪除數(shù)據(jù)表中的所有記錄。
為了實現(xiàn)對選手分?jǐn)?shù)的統(tǒng)計,教師可指導(dǎo)學(xué)生根據(jù)實例特點,不拘一格、靈活地設(shè)計窗體界面。這里要提醒學(xué)生,對于文本框?qū)傩悦Q應(yīng)本著簡單、易記的原則命名,以便程序中調(diào)用和記憶方便。
例如,在圖1所示“評分程序”窗體中,對應(yīng)于5個標(biāo)簽 “姓名”“請輸入分?jǐn)?shù)”“最高分”“最低分”和“最后得分”等的文本框?qū)傩悦Q,分別命名為:name、input、zgf、zdf、output;4個命令按鈕“清零”“評分”“評分表”和“刪除記錄”的屬性名稱,分別命名為:cmdql、cmdpf、cmdpfb、cmdscjl。
在設(shè)計與數(shù)據(jù)表相關(guān)聯(lián)的窗體時,要指導(dǎo)學(xué)生在窗體頁眉中擺放文本框標(biāo)簽,而將文本框控件擺放在窗體主體中,并在文本框控件的屬性中設(shè)置其控件來源為相應(yīng)的數(shù)據(jù)表字段。
例如,在圖2所示“評分表”窗體中,對應(yīng)于3個標(biāo)簽“姓名”“分?jǐn)?shù)”和“最后得分”的文本框控件來源,分別為“評分表”數(shù)據(jù)表的“姓名”“分?jǐn)?shù)”和“最后得分”字段。按照程序要求應(yīng)指導(dǎo)學(xué)生先創(chuàng)建“評分表”數(shù)據(jù)表,其中建立“姓名”“分?jǐn)?shù)”和“最后得分”字段,“評分表”數(shù)據(jù)表的結(jié)構(gòu)如圖3所示。
三、程序代碼功能分析
在建立了數(shù)據(jù)表、窗體等對象框架的基礎(chǔ)上,需對相應(yīng)命令按鈕編寫程序代碼。
1.評分按鈕
評分程序(程序代碼略)主要分為4段:第一段是設(shè)置ActiveX數(shù)據(jù)對象ADO訪問(ADO:ActiveX Data ObjectAxtiveX數(shù)據(jù)對象,是目前在Windows環(huán)境中比較流行的客戶端數(shù)據(jù)庫編程技術(shù)),并利用Recordset對象進行數(shù)據(jù)操作,例如,定義Connection對象、定義并創(chuàng)建Recordset對象、使用Access內(nèi)置Connection對象、啟動一個Dynamic類型的游標(biāo),打開“評分表”數(shù)據(jù)表等等。這里要理解ActiveX數(shù)據(jù)對象,并體會相應(yīng)操作的含義。第二段是利用數(shù)組對錄入的分?jǐn)?shù)進行排序,即在定義、創(chuàng)建數(shù)組,并給數(shù)組賦值后,對數(shù)組中的數(shù)據(jù)進行排序。這里可指導(dǎo)學(xué)生,采用不同的排序方法體會、分析。第三段是調(diào)用聲音模塊sound中的播放函數(shù)PlaySound(),打開聲音文件,播放并顯示“最高分”“最低分”和“最后得分”。這里要對學(xué)生強調(diào),掌握模塊的建立和函數(shù)的調(diào)用方法。第四段是將選手得分存入“評分表”數(shù)據(jù)表中,以便適時調(diào)用,并讓學(xué)生注意體會對數(shù)據(jù)庫進行的操作。
2.聲音模塊
建立聲音模塊sound,用于在評分過程中進行聲音提示和說明,這里旨在讓學(xué)生了解、體會聲音的調(diào)用和控制,其中使用了API函數(shù),API函數(shù)是Windows提供給應(yīng)用程序與操作系統(tǒng)的接口。模塊sound的代碼語句如下:
‘聲明API函數(shù),用winmm中的playsound函數(shù)播放聲音。winmm.dll是Windows多媒體相關(guān)應(yīng)用程序接口,用于低檔的音頻和游戲手柄。
Declare Function apisndPlaySound Lib “winmm” Alias “sndPlaySoundA” (ByVal filename As String, ByVal snd_async As Long) As Long
Function PlaySound(sWavFile As String) '建立PlaySound函數(shù)
If apisndPlaySound(sWavFile, 1) = 0 Then
MsgBox “The Sound Did Not Play!”
End If
End Function
3.評分表按鈕
通過使用DoCmd對象的方法執(zhí)行打開“評分表窗體”的操作,而該窗體是基于“評分表”數(shù)據(jù)表而建立,其中數(shù)據(jù)源于“評分表”數(shù)據(jù)表,讓學(xué)生體會程序中瀏覽數(shù)據(jù)表內(nèi)容的方法。在評分表按鈕的Click事件過程中,代碼語句如下:
Private Sub Cmdpfb_Click()
DoCmd.OpenForm "評分表"
End Sub
4.清零按鈕
將“評分程序”窗體中相關(guān)的文本框清空,即對“姓名”“最高分”“最低分”和“最后得分”等文本框賦空值。
5.刪除記錄按鈕
用于刪除“評分表”數(shù)據(jù)表的所有記錄。這里要設(shè)置ActiveX數(shù)據(jù)對象ADO訪問,并利用Recordset對象進行數(shù)據(jù)操作,并注意數(shù)據(jù)表中記錄指針的移動和定位。
四、歸納與啟示
通過制作評分程序的整個過程,可以了解到該程序涉及數(shù)據(jù)表、窗體、模塊、VBA程序設(shè)計、VBA數(shù)據(jù)庫編程等多個方面,進一步理解了數(shù)據(jù)表、窗體、模塊、VBA程序設(shè)計、VBA數(shù)據(jù)庫編程及其相互關(guān)系。例如,在程序的設(shè)計過程中,為了求出最大和最小值,會想到使用排序算法;為了播放聲音,會研究API函數(shù),會了解到這些函數(shù)是Windows提供給應(yīng)用程序與操作系統(tǒng)的接口;為了保存或刪除數(shù)據(jù),會利用數(shù)據(jù)庫中的表和窗體等對象;為了優(yōu)化程序結(jié)構(gòu),會合理使用選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和數(shù)組等。顯然通過評分程序的設(shè)計、調(diào)試及運行,以良好的效果達到了設(shè)計所要求的目的,顯著提高了Access的綜合應(yīng)用能力。
(作者單位:湖北鐵道運輸職業(yè)學(xué)院)