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