版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Access基礎(chǔ)教程(第四版)長春師范大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院9.1程序流程控制9.2文件9.3過程調(diào)用9.4計(jì)時(shí)器Timer9.5ADO數(shù)據(jù)庫編程實(shí)例第9章VBA應(yīng)用實(shí)例本章是對第8章所涉及到的部分基礎(chǔ)內(nèi)容在實(shí)際應(yīng)用角度的延伸。把握VBA的語法結(jié)構(gòu)和應(yīng)用技巧與掌握高級語言的方法大體一致,最重要的一點(diǎn)就是具備程序的分析和設(shè)計(jì)能力,也就是說針對給定的程序我們要能夠讀懂其功能;而針對給定的應(yīng)用問題我們要能夠運(yùn)用所掌握的知識予以實(shí)現(xiàn)。本章將VBA的應(yīng)用問題分為了程序流程控制、文件、過程調(diào)用、計(jì)時(shí)器Timer和ADO數(shù)據(jù)庫編程實(shí)例五個(gè)部分,從分析和設(shè)計(jì)兩個(gè)方面針對具體的實(shí)例加以闡述,主要介紹分析的重點(diǎn)和設(shè)計(jì)的思路,希望能夠?qū)ψx者在Access數(shù)據(jù)庫較為復(fù)雜的應(yīng)用方面給予幫助。第9章VBA應(yīng)用實(shí)例9.1.1選擇結(jié)構(gòu)例1:窗體中有一名為Command1的命令按鈕,其單擊事件過程如下所示,試分析單擊該命令按鈕后消息框中的顯示內(nèi)容。PrivateSubCommand1_Click()a=75Ifa>60Then k=1ElseIfa>70Then k=2ElseIfa>80Then k=3ElseIfa>90Then k=4EndIfMsgBoxkEndSub9.1程序流程控制本例是塊If語句的應(yīng)用,執(zhí)行的過程是:按條件出現(xiàn)的順序依次判斷每一個(gè)條件,發(fā)現(xiàn)第一個(gè)成立的條件后,則立即執(zhí)行與該條件相對應(yīng)的語句組,然后跳出該條件語句,去執(zhí)行EndIf后的第一條語句。因?yàn)閍=75,滿足a>60的條件,所以k=1,EndIf后的第一條語句為MsgBoxk,所以消息框中顯示的結(jié)果為1。例2:窗體中有一名為Command1的命令按鈕,其單擊事件過程如下所示,試分析單擊該命令按鈕后消息框中的顯示內(nèi)容。PrivateSubCommand1_Click()A=75IfA>60ThenI=1IfA>70ThenI=2IfA>80ThenI=3IfA>90ThenI=4MsgBoxIEndSub9.1程序流程控制本例是四個(gè)行If語句的順序結(jié)構(gòu)。與標(biāo)準(zhǔn)的If…Then…EndIf結(jié)構(gòu)相比較,缺少了EndIf,但這在VBA中是允許的,所以判斷的過程也應(yīng)該是順序的,執(zhí)行過程應(yīng)該是A=75,A大于60所以I=1;A大于70所以I=2;A不大于80,所以I值不發(fā)生變化;A值不大于90,所以I值不發(fā)生變化;最終消息框中顯示的結(jié)果應(yīng)為I的最后值2。例3:分析如下窗體單擊事件過程的顯示結(jié)果。PrivateSubForm_Click()
a=1
Fori=3To1Step-1 SelectCaseiCase1,3
a=a+1
Case2,4
a=a+2
EndSelect
NextiMsgBoxaEndSub9.1程序流程控制本例是SelectCase選擇結(jié)構(gòu)和For循環(huán)結(jié)構(gòu)的應(yīng)用集合,分析的重點(diǎn)在于SelectCase的選擇分支,分支一Case1,3,也就是說當(dāng)i值為1或3時(shí)執(zhí)行的操作為a=a+1;分支二Case2,4,也就是說當(dāng)i值為2或4時(shí)執(zhí)行的操作為a=a+2。a的初值為1,循環(huán)變量i的變化過程是由3到1,那么在整個(gè)循環(huán)過程中,要執(zhí)行兩次a=a+1的操作和一次a=a+2的操作,所以最終消息框顯示的結(jié)果為5。例4:試用If…Then…EndIf選擇結(jié)構(gòu)實(shí)現(xiàn)三個(gè)數(shù)由大到小的順序排列。要求在如圖9.1所示的“排序”窗體中名為“text1”、“text2”和“text3”的三個(gè)文本框中輸入三個(gè)數(shù),單擊“排序”(名為Command1)按鈕后,三個(gè)數(shù)按由大到小的順序排列;單擊“重新輸入”(名為Command2)按鈕后,清空文本框,以便于重新輸入。單擊“排序”按鈕后的結(jié)果如圖9.2所示。解題思路:要想將三個(gè)數(shù)進(jìn)行排序,首先要將這三個(gè)數(shù)中任意兩個(gè)數(shù)進(jìn)行比較,如果比較過程中較大數(shù)在較小數(shù)之前,則不需要改變它們的順序,否則需要將兩個(gè)數(shù)的位置進(jìn)行交換。對于三個(gè)數(shù)排序要進(jìn)行(3×2)/(2×1)次比較。排序(見示例數(shù)據(jù)庫)9.1程序流程控制例5:試用SelectCase選擇結(jié)構(gòu)實(shí)現(xiàn)一個(gè)收取貨物運(yùn)費(fèi)的程序。要求:在固定兩地之間,收取貨物運(yùn)費(fèi)的原則是:10噸以內(nèi)(不含10噸)的貨物,每噸收取運(yùn)費(fèi)100元;10噸至50噸(不含50噸)的貨物,每噸收取運(yùn)費(fèi)70元;50噸以上的貨物,每噸收取運(yùn)費(fèi)50元。在如圖9.3所示的“計(jì)算運(yùn)輸費(fèi)用”窗體中“Weight”文本框(關(guān)聯(lián)標(biāo)簽為“貨物重量”)內(nèi)輸入貨物重量后,單擊Command1(標(biāo)題為“計(jì)算”)按鈕,在“Cost”文本框(關(guān)聯(lián)標(biāo)簽為“運(yùn)輸費(fèi)用”)中顯示出運(yùn)輸費(fèi)用,如圖9.4所示;單擊Command2(標(biāo)題為“清除”)按鈕,清空兩個(gè)文本框。解題思路:這是一個(gè)最為簡單的多路分支選擇結(jié)構(gòu)實(shí)例,只需要根據(jù)貨物重量的不同,選擇不同運(yùn)費(fèi)計(jì)算公式即可。計(jì)算運(yùn)輸費(fèi)用(見示例數(shù)據(jù)庫)9.1程序流程控制9.1.2循環(huán)結(jié)構(gòu)例6:窗體中有一名為Command1的命令按鈕,其單擊事件過程如下所示,試分析單擊該命令按鈕后sum的值。PrivateSubCommand1_Click()DimsumAsDouble,jAsDoublesum=0n=0Fori=1To5
j=n/i
n=n+1
sum=sum+jNextiEndSub9.1程序流程控制本例是For循環(huán)語句的應(yīng)用,循環(huán)變量i的取值為1到5。當(dāng)i值為1時(shí),x的值為0,n值1,sum值為0(注意賦值語句的順序結(jié)構(gòu));當(dāng)i值為2時(shí),x值為1/2,n值為2,sum值為1/2;當(dāng)i值為3時(shí),x值為2/3,n值為3,sum值為1/2+2/3;以此類推,當(dāng)循環(huán)結(jié)束之后sum的值為1/2+2/3+3/4+4/5。例7:窗體中有一名為Command1的命令按鈕,其單擊事件過程如下所示,試分析單擊該命令按鈕后消息框中的顯示內(nèi)容。PrivateSubCommand1_Cllick() DimM(10)AsInteger Fork=1to10 M(k)=12-k Nextk x=6 MsgBoxM(2+M(x))EndSub9.1程序流程控制本例是For循環(huán)語句和數(shù)組的集合應(yīng)用,一維數(shù)組M的下限為0、上限為10,循環(huán)變量k的取值為1到10。For循環(huán)的作用在本例中是為數(shù)據(jù)M中的元素賦值,下標(biāo)為k的元素其值為12-k,如:M(1)值為11,M(10)值為2。消息框中顯示的消息為M(2+M(x)),首先要計(jì)算出M(x)的值,x=6,所以M(x)=6;因此M(2+M(x))實(shí)際上是M(8),所以最終消息框的顯示結(jié)果為4。例8:試分析如下程序運(yùn)行結(jié)束之后變量K的值。PrivateSubFun() DimJAsInteger J=10 Do J=J+3 LoopWhileJ<19EndSub9.1程序流程控制本例是Do…LoopWhile循環(huán)結(jié)構(gòu)的應(yīng)用,分析的重點(diǎn)在于條件式J<19和其位置。當(dāng)J<19時(shí)執(zhí)行循環(huán)體中的語句;另外需要注意的是條件式在Loop后,循環(huán)體至少要執(zhí)行一次,它決定了是否回到循環(huán)體起始處。循環(huán)體中的語句為J=J+3,也就是說每執(zhí)行一次循環(huán)J的值要加3。當(dāng)執(zhí)行兩次循環(huán)體操作后J=16,仍然滿足J<19的條件,所以還要執(zhí)行第三次循環(huán);而當(dāng)?shù)谌窝h(huán)結(jié)束后J=19,已經(jīng)不滿足J<19的條件,所以循環(huán)終止。最終J的值為19。例9:試分析內(nèi)層n循環(huán)的執(zhí)行次數(shù)。Form=0To7Step3 Forn=m-2Tom+2 NextnNextm9.1程序流程控制本例是For循環(huán)的嵌套,分析的重點(diǎn)在于內(nèi)層循環(huán)變量n的初始值和終止值。無論m的值為多少,內(nèi)層循環(huán)變量n的值都只有五個(gè)m-2、m-1、m、m+1和m+2,也就是說每執(zhí)行一次m循環(huán)就要執(zhí)行五次n循環(huán)。而m=0To7Step3,外層m循環(huán)要執(zhí)行3次,所以內(nèi)層n循環(huán)的次數(shù)為15。例10:試分析如下程序運(yùn)行結(jié)束之后變量K的值。K=0ForI=1To3 ForJ=1ToI K=K+J NextJNextI9.1程序流程控制本例是For循環(huán)的嵌套,分析的重點(diǎn)在于內(nèi)層J循環(huán)的終止值為I,由于外層循環(huán)變量I值的變化,使得內(nèi)層J循環(huán)的次數(shù)是不固定。當(dāng)I=1時(shí),J=1To1,K=K+1=1;當(dāng)I=2時(shí),J=1To2,K=K+1+2=4;當(dāng)I=3時(shí),J=1To3,K=K+1+2+3=10。所以當(dāng)程序運(yùn)行結(jié)束之后K的值為10。(注意K值的累加過程)例11:試分析如下程序運(yùn)行結(jié)束之后變量x的值。x=1y=1z=1
Fork=1To3
Ifj=1Then
x=x+y+z
ElseIfj=2Then
x=2*x+2*y+2*z
Else
x=3*x+3*y+3*z
EndIf
Nextk9.1程序流程控制本例是For循環(huán)結(jié)構(gòu)和塊If語句的應(yīng)用集合,分析的重點(diǎn)在于塊If的選擇分支,分支一為當(dāng)K=1時(shí),x=x+y+z;分支二為當(dāng)K=2時(shí),x=2*x+2*y+2*z;分支三為當(dāng)K=3時(shí),x=3*x+3*y+3*z。與選擇結(jié)構(gòu)的例3相比較,本例中賦值語句右端的變化是在變量參與運(yùn)算后才進(jìn)行賦值的。循環(huán)共執(zhí)行3次,當(dāng)K=1時(shí),x=1+1+1=3;當(dāng)K=2時(shí),x=2*3+2*1+2*1=10;當(dāng)K=3時(shí),x=3*10+3*1+3*1=36。所以當(dāng)程序運(yùn)行結(jié)束之后x的值為36。例12:窗體中有一名為Command1的命令按鈕,其單擊事件過程如下所示,試分析單擊該命令按鈕后消息框中的顯示內(nèi)容。PrivatesubCommand1_Click()Fori=1To4
x=3
Forj=1To3
x=4
Fork=1To2
x=x+5
NextkNextjNextiMsgBoxxEndSub9.1程序流程控制本例是For循環(huán)的嵌套,分析的重點(diǎn)在于i循環(huán)中的賦值語句x=3和j循環(huán)中的賦值語句x=4。它們的位置決定了,只要進(jìn)入i循環(huán),那么x的值就為3;而進(jìn)入j循環(huán)后,x又被重新賦值為4。所以最終的結(jié)果由以下語句決定:x=4Fork=1To2x=x+5Nextk當(dāng)程序運(yùn)行結(jié)束之后,x的值為14。例13:試分析如下程序運(yùn)行結(jié)束之后變量k的值。Dimi,j,kAsIntegeri=1DoForj=1ToiStep2
k=k+jNextji=i+2LoopUntili>89.1程序流程控制本例是Do…LoopUntil循環(huán)結(jié)構(gòu)和For循環(huán)的嵌套,分析的重點(diǎn)在于變量i值的變化過程,它即是For循環(huán)的終止值,又控制了Do…LoopUntil循環(huán)的條件。i值的變化在Do…LoopUntil循環(huán)中由i=i+2賦值語句來進(jìn)行,當(dāng)i>8時(shí)程序運(yùn)行結(jié)束,所以i可能的值為1、3、5、7。For循環(huán)中步長為2,當(dāng)i=1時(shí),k=k+1=1;當(dāng)i=3時(shí),k=k+1+3=5;當(dāng)i=5時(shí),k=k+1+3+5=14;當(dāng)i=7時(shí),k=k+1+3+5+7=30。當(dāng)循環(huán)結(jié)束之后k的值為30。例14:試分析如下程序運(yùn)行結(jié)束之后消息框中顯示的內(nèi)容.Dimstr1,str2AsStringDimIAsIntegerstr1=”abcdef”Fori=1ToLen(str1)Step2 str2=UCase(Mid(str1,i,1))+str2NextiMsgBoxstr29.1程序流程控制本例中使用了字符串函數(shù)Len()、Mid()和大小寫轉(zhuǎn)換函數(shù)Ucase()。由于字符串str1的值不發(fā)生變化,所以Len(str1)的值固定為6。因此For循環(huán)變量i的取值為1、3和5(步長為2),Ucase(Mid(str1,i,1))實(shí)際上就是取str1中第i個(gè)字符然后再轉(zhuǎn)換為大寫字母,當(dāng)i=1時(shí),str2=A;當(dāng)i=3時(shí),str2=CA;當(dāng)i=5時(shí),str2=ECA。當(dāng)程序運(yùn)行結(jié)束之后,消息框中顯示的內(nèi)容為ECA。例15:窗體中有一名為Command1的命令按鈕,其單擊事件過程如下所示,試分析當(dāng)單擊該命令按鈕后消息框中顯示的內(nèi)容。PrivateSubCommand1_Click()Dima(10,10)Form=2To4
Forn=4To5
a(m,n)=m*n
NextnNextmMsgBoxa(2,5)+a(3,4)+a(4,5)EndSub9.1程序流程控制本例是For循環(huán)嵌套和二維數(shù)組的應(yīng)用。For循環(huán)的作用在于為數(shù)組元素賦值a(m,n)=m*n,因此需要考慮的是循環(huán)過程中,數(shù)組元素a(2,5)、a(3,4)和a(4,5)是否已經(jīng)賦值,由于m為2~4,n為4~5,三者都在范圍內(nèi),所以a(2,5)=10、a(3,4)=12、a(4,5)=20,因此a(2,5)+a(3,4)+a(4,5)=42。當(dāng)程序運(yùn)行結(jié)束之后消息框中顯示的內(nèi)容為42。例16:計(jì)算
要求:在如圖9.5所示的“計(jì)算”窗體中有一名為Text1(關(guān)聯(lián)標(biāo)簽為“請輸入N值”)的文本框和一名為Command1(標(biāo)題為“計(jì)算”)的命令按鈕,在文本框中輸入一個(gè)正整數(shù),單擊Comman1后在消息框中顯示計(jì)算結(jié)果,如圖9.6所示。解題思路:該表達(dá)式每一項(xiàng)均是一個(gè)求
的多項(xiàng)式。每個(gè)多項(xiàng)式有相同的特點(diǎn):從1不斷除到某一個(gè)數(shù)。(或者理解為:分母都是從1一直累乘到某一個(gè)數(shù))這樣,表達(dá)式中的每一項(xiàng)就都可以通過一個(gè)相同的求值過程來完成。需要注意的是終止值是不斷變化到n的。計(jì)算(見示例數(shù)據(jù)庫)9.1程序流程控制例17:在如圖9.7所示的“質(zhì)數(shù)”窗體中有一標(biāo)題為“篩選”的命令按鈕(名稱為Command1)和一名為Label1的標(biāo)簽控件。要求:單擊“篩選”按鈕后,在標(biāo)簽框中顯示出50~100之間的所有質(zhì)數(shù)。試用循環(huán)結(jié)構(gòu)和If…Then…Else…EndIf選擇結(jié)構(gòu)實(shí)現(xiàn)。解題思路:首先,應(yīng)該清楚怎樣判斷一個(gè)數(shù)是否是質(zhì)數(shù)。作為質(zhì)數(shù),除了1和它本身之外,不能再被其他數(shù)整除。那么只需判斷該數(shù)是否存在1和它本身之外的因子,如果存在,這兩個(gè)因子必然是一個(gè)大于或等于該數(shù)的平方根,另一個(gè)小于或等于該數(shù)的平方根,并且這兩個(gè)因子是成對出現(xiàn)的。所以只要找出其中較小的一個(gè)因子即可認(rèn)為該數(shù)不是質(zhì)數(shù),否則,該數(shù)就是質(zhì)數(shù)。然后,依次判斷其他的數(shù)是否是質(zhì)數(shù)。質(zhì)數(shù)(見示例數(shù)據(jù)庫)9.1程序流程控制例18:試用For循環(huán)結(jié)構(gòu)實(shí)現(xiàn)一個(gè)用“*”在消息框中打印矩形的程序。要求:在如圖9.8所示的“打印矩形”窗體中關(guān)聯(lián)標(biāo)簽為“個(gè)數(shù)”(名稱為Text1)的文本框內(nèi)輸入一個(gè)數(shù)字N,單擊標(biāo)題為“顯示結(jié)果”(名稱為Command1)的命令按鈕后,在消息框中顯示由“*”構(gòu)成的N行N列矩形。在文本框中輸入“5”,單擊“顯示結(jié)果”按鈕后的結(jié)果如圖9.9所示。解題思路:首先,應(yīng)該考慮由“*”組成的矩形是由行和列構(gòu)成的,行數(shù)和列數(shù)由用戶輸入的數(shù)字N(取值于文本框控件Text1)來決定,因此要用For循環(huán)的嵌套來實(shí)現(xiàn),并且終止值都為N;其次,結(jié)果要在循環(huán)結(jié)束之后顯示,因此在每行結(jié)束之后都要加上回車符Chr(13)和換行符Chr(10)。
打印矩形(見示例數(shù)據(jù)庫)9.1程序流程控制例19:通過文件的應(yīng)用破解Access密碼。(聲明:編寫這段程序的目的僅僅是為了教學(xué),讓讀者更加深刻地理解文件的應(yīng)用)解題思路:Access在加密中引入了該文件的創(chuàng)建日期。所以,第一步,調(diào)整系統(tǒng)時(shí)間后新建一個(gè)Access文件,使得新建的文件和要破解密碼的文件,在創(chuàng)建日期上是相同的。第二步,需要知道Access密碼存放在文件的什么位置。對一個(gè)Access文件,它的密碼存放的位置的偏移地址是H43。第三步,需要知道的是,Access文件的密碼在存儲(chǔ)中與實(shí)際輸入的密碼字符之間的關(guān)系是什么。實(shí)際上,Access密碼在存儲(chǔ)中是經(jīng)過異或運(yùn)算得到的。異或運(yùn)算具有如下特點(diǎn):如果AXorB=C,那么AXorC=B和CXorB=A都成立。由上述已知條件,就不難編寫該解密程序。9.2文件PrivateSubCommand1_Click()Constoft=&H43 Dima(1To2)AsByte Dimb(1To2)AsByte DimiAsIntegerDimpasswordAsString Open"c:\wq.mdb"ForBinaryAs#1 Open"c:\Q.mdb"ForBinaryAs#2Seek#1,oft Seek#2,oft 9.2文件Fori=1To20 Get#1,,aGet#2,,bIf(a(1)Xorb(1))<>0Thenpassword=password+Chr$(a(1)Xorb(1))NextiCloseMe.text1.SetFocusMe.text1.Text=passwordEndSub其中Command1和Text1為用戶新建數(shù)據(jù)庫文件Q中某窗體內(nèi)的命令按鈕控件和文本框控件的名稱。
9.2文件例20:在如圖9.10所示的窗體“過程調(diào)用1”中有一名為Command1的命令按鈕(標(biāo)題為“顯示結(jié)果”)和一名為Text1文本框(標(biāo)題為“顯示結(jié)果”),命令按鈕的單擊事件過程如下所示,試分析單擊Command1命令按鈕后文本框Text1中的顯示內(nèi)容。本例是過程調(diào)用的應(yīng)用,要求形參和實(shí)參的數(shù)據(jù)類型及數(shù)量一致。子過程pl定義了整型形參a、b和c,命令按鈕Command1的單擊事件過程中定義了整型實(shí)參x、y和z,也就是說a、b、c分別對應(yīng)x、y、z。缺省的參數(shù)傳遞方式為ByRef,為“雙向作用”,實(shí)參和形參可以互相影響。因此,單擊Command1命令按鈕后文本框Text1中的顯示內(nèi)容為12,如圖9.11所示。過程調(diào)用1(見示例數(shù)據(jù)庫)9.3過程調(diào)用PrivateSubCommand1_Click() DimxAsInteger,yAsInteger,zAsInteger x=5:y=7:z=0 Me!Text1=”” Callp1(x,y,z) Me!Text1=zEndSubSubp1(aAsInteger,bAsInteger,cAsInteger) c=a+bEndSub9.3過程調(diào)用例21:在如圖9.12所示的“過程調(diào)用2”窗體中有一名稱為Command1(標(biāo)題為“顯示結(jié)果”)的命令按鈕,其單擊事件過程如下所示,試分析單擊Command1命令按鈕后消息框中的顯示內(nèi)容。本例是過程調(diào)用的應(yīng)用,分析的重點(diǎn)在于參數(shù)的傳遞方式:ByVal為“單向作用”,形參的值不會(huì)影響實(shí)參。因此,調(diào)用前實(shí)參i的值為3,調(diào)用后實(shí)參i的值仍然為3,所以單擊Command1命令按鈕后消息框的顯示內(nèi)容為3,如圖9.13所示。過程調(diào)用2(見示例數(shù)據(jù)庫)9.3過程調(diào)用PrivateSubs(ByValpAsInteger) p=p*3EndSubPrivateSubCommand1_Click() DimIAsInteger i=3 s(i) Ifi>10Theni=i^3 EndIf MsgBoxiEndSub9.3過程調(diào)用例22:在如圖9.14所示的“過程調(diào)用3”窗體有一名稱為Command1(標(biāo)題為“顯示結(jié)果”)的命令按鈕,其單擊事件過程如下所示,試分析單擊Command1命令按鈕后消息框中的顯示內(nèi)容。本例是過程調(diào)用的應(yīng)用,分析的重點(diǎn)在于變量x的作用域。PublicxAsInteger聲明在所有過程之外的起始位置,作用域?yàn)槟K范圍,運(yùn)行時(shí)在模塊所包含的所有子過程和函數(shù)過程中可見;而子過程s1中的DimxAsInteger,定義在過程內(nèi)部,其作用域?yàn)榫植糠秶挥袌?zhí)行該過程時(shí)才可見,并且其值不會(huì)傳回。命令按鈕的單擊事件過程中調(diào)用了子過程s1和s2,實(shí)際上影響最終顯示結(jié)果的只有s2,所以結(jié)果為30,結(jié)果如圖9.15所示。
過程調(diào)用3(見示例數(shù)據(jù)庫)9.3過程調(diào)用PublicxAsIntegerPrivateSubCommand1_Click() x=10 Calls1 Calls2 MsgBoxxEndSubPrivateSubs1() DimxAsInteger x=x*2EndSub9.3過程調(diào)用PrivateSubs2() x=x*3EndSub例23:求表達(dá)式(1+2+3)+(1+2+3+4)+…+(1+2+3+…+n)之和。(n≥4)要求:編寫一個(gè)計(jì)算1+2+…+n的子過程a,并在命令按鈕Command1的單擊事件過程中調(diào)用,根據(jù)用戶輸入的n值求解(1+2+3)+(1+2+3+4)+…+(1+2+3+…+n)。說明:在如圖9.16所示的“計(jì)算結(jié)果”窗體中有一名為Command1(標(biāo)題為“計(jì)算”)的命令按鈕和名為Text1(關(guān)聯(lián)標(biāo)簽為“請輸入N值”)、Text2(關(guān)聯(lián)標(biāo)簽為“結(jié)果”)的兩個(gè)文本框控件,要求在Text1中輸入n值,單擊“計(jì)算”命令按鈕后,在Text2中顯示計(jì)算結(jié)果,如圖9.17所示。9.3過程調(diào)用解題思路:該表達(dá)式每一項(xiàng)均是一個(gè)完成累加求和的多項(xiàng)式。每個(gè)多項(xiàng)式有相同的特點(diǎn):都是從1一直累加到某一個(gè)數(shù)。這樣,表達(dá)式中的每一項(xiàng)就都可以通過一個(gè)相同的求值過程來完成。通過調(diào)用Sub子程序可以完成這一過程,當(dāng)然終止值要考慮是不斷變化到n的。計(jì)算結(jié)果(見示例數(shù)據(jù)庫)9.3過程調(diào)用主過程如下:PrivateSubCommand1_Click()Me.text1.SetFocusn=Val(text1.Text)Fori=3Ton Calla(s,i) sum=sum+sNextiMe.text2.SetFocusText2.Text=LTrim(Str(sum))EndSub9.3過程調(diào)用子過程如下:PrivateSuba(s,n)s=0Fori=1Tons=s+iNextiEndSub例24:在如圖9.18所示的“判定奇偶數(shù)”窗體中有一個(gè)名為Command1(標(biāo)題為“判定”)的命令按鈕和一個(gè)名為Text1(關(guān)聯(lián)標(biāo)簽為“請輸入一個(gè)數(shù)字”)的文本框,且文本框的內(nèi)容為空,要求:編寫一個(gè)判定奇偶數(shù)的函數(shù)過程,并在命令按鈕的單擊事件過程中作為IIf函數(shù)的條件式引用,最終在消息框中顯示判定結(jié)果,如圖9.19所示。解題思路:奇偶數(shù)的判定可以通過求模(Mod)2來實(shí)現(xiàn),結(jié)果為0是偶數(shù),否則是奇數(shù)。IIf函數(shù)有三個(gè)參數(shù),第一個(gè)參數(shù)為條件表達(dá)式,第二、三個(gè)參數(shù)是返回值,如果條件式為真返回第二個(gè)參數(shù);條件式為假返回第三個(gè)參數(shù)。判定奇偶數(shù)(見示例數(shù)據(jù)庫)9.3過程調(diào)用子函數(shù)如下:PrivateFunctionf(xAsLong)AsBoolean
IfxMod2=0Then
f=True
Else
f=False
EndIfEndFunction9.3過程調(diào)用主過程如下:PrivateSubCommand1_Click()
DimnAsLong
n=Val(Me!text1)
p=IIf(f(n),”偶數(shù)”,”奇數(shù)”)
MsgBoxn&“是”&pEndSub例25:試用窗體的計(jì)時(shí)器觸發(fā)事件設(shè)計(jì)一個(gè)如圖9.20所示的登錄窗體,要求:打開該窗體后輸入用戶名和密碼,登錄操作要求在20秒內(nèi)完成(以單擊“登錄”命令按鈕為截止時(shí)間),如果在20秒內(nèi)沒有完成登錄操作則倒計(jì)時(shí)達(dá)到0秒時(shí)自動(dòng)關(guān)閉登錄窗體。說明:登錄窗體中有名為Text1(關(guān)聯(lián)標(biāo)簽為“用戶名”)和Text2(關(guān)聯(lián)標(biāo)簽為“密碼”)的兩個(gè)文本框,名為Login(標(biāo)題為“登錄”)的一個(gè)命令按鈕,名為Label1(用來顯示倒計(jì)時(shí)時(shí)間)的一個(gè)標(biāo)簽。9.4計(jì)時(shí)器Timer解題思路:VBA中通過設(shè)置窗體的“計(jì)時(shí)器間隔”(TimerInterval)屬性與添加“計(jì)時(shí)器觸發(fā)”(Timer)事件來完成“定時(shí)”功能,“計(jì)時(shí)器間隔”屬性值以毫秒為單位,1000表示間隔為1秒。另外,需要考慮定義一個(gè)邏輯變量,用它來控制當(dāng)單擊“登錄”命令按鈕后停止倒計(jì)時(shí)。登錄(見示例數(shù)據(jù)庫)9.4計(jì)時(shí)器TimerDimflagAsBooleanDimIAsIntegerPrivateSubForm_Load()
flag=True
Me.TimerInterval=1000
i=0EndSubPrivateSubForm_Timer()
Ifflag=TrueAndi<20Then
Me!Label1.Caption=20-i
i=i+19.4計(jì)時(shí)器TimerElse
DoCmd.CloseEndIfEndSubPrivateSubLogin_Click()flag=false‘代碼略EndSub例26:試用ADO實(shí)現(xiàn)在表中添加記錄的應(yīng)用。要求:當(dāng)前工程數(shù)據(jù)庫中表“Stud”用來存儲(chǔ)學(xué)生的基本信息,包括:學(xué)號、姓名、性別和院系,在如圖9.21所示的“學(xué)生_添加記錄”窗體中有名為tNo、tName、tSex和tDept四個(gè)文本框分別與之相對應(yīng)。當(dāng)單擊窗體中的“添加”命令按鈕(名稱為Command1)時(shí),首先判斷學(xué)號是否存在,如果不存在則向“Stud”表中添加學(xué)生記錄;如果學(xué)號存在,則給出提示信息。9.5ADO數(shù)據(jù)庫編程實(shí)例解題思路:ADO是基于組件的數(shù)據(jù)庫編程接口,包含了Connection、Command、RecordSet、Field和Error五個(gè)對象,執(zhí)行SQL語句要用到Connection對象的Execute方法;獲取記錄集要用到RecordSet對象的Open方法。本例應(yīng)先以用戶輸入的學(xué)號為條件使用RecordSet對象的Open方法在數(shù)據(jù)源表中查找相關(guān)記錄,如果找到表示學(xué)號存在,給出錯(cuò)誤提示;否則,使用Connection對象的Execute方法將用戶輸入的內(nèi)容添加到Stud表中。學(xué)生_添加記錄(見示例數(shù)據(jù)庫)9.5ADO數(shù)據(jù)庫編程實(shí)例PrivateSubCommand1_Click() DimcnAsNewADODB.Connection DimrsAsNewADODB.RecordSet DimstrSQLAsString
Setcn=CurrentProject.Connection strSQL=”Select學(xué)號FromStudWhere學(xué)號=’”+tNo+”’”
rs.Open strSQL,cn,adOpenDynamic,adLockOptimistic,adCmdText IfNotrs.EofThen MsgBox“學(xué)號已存在,請重新輸入!” Else9.5ADO數(shù)據(jù)庫編程實(shí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025江西省建科工程咨詢有限公司招聘1人備考題庫及答案詳解一套
- 2026內(nèi)蒙古聚英人力資源服務(wù)有限責(zé)任公司定向招聘內(nèi)勤崗位人員1人備考題庫及一套完整答案詳解
- 2026年1月四川德陽第五醫(yī)院招聘7人備考題庫附答案詳解
- 2025四川省教育融媒體中心(四川教育電視臺(tái))招聘編外工作人員4人備考題庫及一套答案詳解
- 2026廣東廣州花都區(qū)獅嶺鎮(zhèn)軍田小學(xué)實(shí)習(xí)教師招聘2人備考題庫完整參考答案詳解
- 2026年度黑龍江省文化和旅游廳所屬事業(yè)單位公開招聘工作人員21人備考題庫及答案詳解(易錯(cuò)題)
- 2025巴彥淖爾市能源(集團(tuán))有限公司第三批招聘29人備考題庫及1套完整答案詳解
- 2026廣西北海市鐵山港區(qū)自然資源局招聘2人備考題庫參考答案詳解
- 2026廣東廣州中醫(yī)藥大學(xué)動(dòng)物實(shí)驗(yàn)中心招聘1名自聘合同制人員備考題庫及答案詳解參考
- 2025天津市政建設(shè)集團(tuán)有限公司面向社會(huì)選聘總法律顧問1人備考題庫及答案詳解1套
- 《無人機(jī)搭載紅外熱像設(shè)備檢測建筑外墻及屋面作業(yè)》
- 秦腔課件教學(xué)
- DB51-T 1959-2022 中小學(xué)校學(xué)生宿舍(公寓)管理服務(wù)規(guī)范
- 水利工程施工監(jiān)理規(guī)范(SL288-2014)用表填表說明及示例
- 妊娠合并膽汁淤積綜合征
- 新疆維吾爾自治區(qū)普通高校學(xué)生轉(zhuǎn)學(xué)申請(備案)表
- 內(nèi)鏡中心年終總結(jié)
- 園林苗木容器育苗技術(shù)
- 陜西省2023-2024學(xué)年高一上學(xué)期新高考解讀及選科簡單指導(dǎo)(家長版)課件
- 兒科學(xué)熱性驚厥課件
- 《高職應(yīng)用數(shù)學(xué)》(教案)
評論
0/150
提交評論