第九章數(shù)據(jù)庫(kù)編程_第1頁(yè)
第九章數(shù)據(jù)庫(kù)編程_第2頁(yè)
第九章數(shù)據(jù)庫(kù)編程_第3頁(yè)
第九章數(shù)據(jù)庫(kù)編程_第4頁(yè)
第九章數(shù)據(jù)庫(kù)編程_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第九章VBA數(shù)據(jù)庫(kù)編程9.1vba數(shù)據(jù)庫(kù)常見操作一、打開和關(guān)閉操作1打開窗體操作docmd.openform窗體名稱例:docmdopenform“ftest”2打開報(bào)表操作docmd.openreport報(bào)表名,打開模式例:DoCmd.OpenReport"remp",acViewPreview

3關(guān)閉操作docmd.close關(guān)閉對(duì)象類型,關(guān)閉對(duì)象名稱例:docmd.close表示關(guān)閉當(dāng)前窗體在VBA中,實(shí)現(xiàn)窗體打開操作的命令是____A)Docmd.OpenformB)OpenFormC)Do.OpenformD)Doopen.form二、輸入框(inputbox函數(shù))

Inputbox(提示信息[,標(biāo)題][,默認(rèn)值])提示信息是告訴用戶輸入什么內(nèi)容標(biāo)題是輸入框的標(biāo)題,可省略默認(rèn)值是如果用戶不輸入任何值時(shí)的取值例9.1strname=inputbox(“請(qǐng)輸入姓名:","msg")執(zhí)行下列語句:St=inputbox("請(qǐng)輸入字符串","字符串對(duì)話框","aaa"),當(dāng)用戶輸入字符串“bbbb”,按“ok”按鈕后,變量st的內(nèi)容是________三、消息框——MsgBox函數(shù)及語句函數(shù):MsgBox(提示內(nèi)容[,對(duì)話框的按鈕類型][,對(duì)話框標(biāo)題])語句:MsgBox提示內(nèi)容[,對(duì)話框的按鈕類型][,對(duì)話框標(biāo)題])printmsgbox"請(qǐng)選擇",2+16,"提醒"Printmsgbox"請(qǐng)選擇",vbabortretryignore+vbCritical,"提醒"常量值說明vbOkOnly0顯示OK按鈕vbOkCancel1顯示OK及Cancel按鈕VbAbortRetryIgnore2顯示Abort、Retry及Ignore按鈕vbYesNoCancel3顯示Yes、No及Cancel按鈕VbYesNo4顯示Yes及No按鈕VbRetryCancel5顯示Retry及Cancel按鈕VbCritical16顯示vbQuestion32顯示VbExclamation48顯示VbInformation64顯示按鈕類型作為函數(shù),當(dāng)單擊消息框中某個(gè)按鈕,函數(shù)的值為:常數(shù)值說明vbOK1確定vbCancel2取消vbAbort3終止vbRetry4重試vbIgnore5忽略vbYes6是vbNo7否執(zhí)行語句:msgbox“AAAA”,vbOKCancel+vbQuestion,“BBBB”之后,彈出的信息框_____________A)標(biāo)題為“BBBB”,框內(nèi)提示符為“驚嘆號(hào)”,提示內(nèi)容為“AAAA”B)標(biāo)題為“AAAA”,框內(nèi)提示符為“驚嘆號(hào)”,提示內(nèi)容為“BBBB”C)標(biāo)題為“BBBB”,框內(nèi)提示符為“問號(hào)”,提示內(nèi)容為“AAAA”D)標(biāo)題為“AAAA”,框內(nèi)提示符為“問號(hào)”,提示內(nèi)容為“BBBB四、VBA編程數(shù)據(jù)驗(yàn)證函數(shù)例:ifme!txtage=“”orisnull(me!txtage)thenmsgbox“年齡不能為空!”,vbcritical,”警告”cancel=true

elseifisnumeric(me!txtage)=falsethenmsgbox“年齡必須輸入數(shù)值數(shù)據(jù)!”,vbcritical,”警告”cancel=true

elseifme!txtage<15orme!txtage>30thenmsgbox“年齡為15~30范圍數(shù)據(jù)!”,vbcritical,”警告”cancel=true

elsemsgbox“數(shù)據(jù)驗(yàn)證OK”,vbinformation,”通告”

endiftimer事件:隔一定時(shí)間自動(dòng)發(fā)生的事情timerInterval屬性:時(shí)間間隔(以毫秒為單位)工作原理:每隔timerinterval指定的時(shí)間間隔就發(fā)生timer事件五、計(jì)時(shí)器事件例:設(shè)計(jì)如下所示窗體,窗體上有一個(gè)標(biāo)簽控件(名稱為lNum)動(dòng)態(tài)顯示計(jì)數(shù),當(dāng)單擊“暫停/繼續(xù)”(名稱為OK),暫停計(jì)數(shù),再單擊“暫停/繼續(xù)”,則繼續(xù)計(jì)數(shù)。OptionCompareDatabaseDimflagAsBooleanPrivateSubForm_Load()flag=TrueEndSubPrivateSubOK_Click()flag=NotflagEndSubPrivateSubForm_Timer()Ifflag=TrueThenMe!lNum.Caption=Val(Me!lNum.Caption)+1EndIfEndSub例P250(7):設(shè)計(jì)如下窗體界面,要求只有三次登錄機(jī)會(huì),整個(gè)登錄過程要在20秒內(nèi)完成,如果在20秒以內(nèi)沒有完成登錄,則倒計(jì)時(shí)到達(dá)0秒時(shí)自動(dòng)關(guān)閉窗體,窗體的右上角是顯示倒計(jì)時(shí)的標(biāo)簽lTime.。DimflagasbooleanDimiasintegerPrivatesubform_load()flag=_________me.timerinterval=1000i=0EndsubPrivatesubform_timer()ifflag=trueandi<20thenme!ltime.caption=20-ii=______elsedocmd.closeendifEndsub有“數(shù)字時(shí)鐘”窗體如圖所示。在窗口中有按鈕"【開/關(guān)】時(shí)鐘",單擊該按鈕可以顯示或隱藏時(shí)鐘。其中按鈕的名稱為"開關(guān)",顯示時(shí)間的文本框名稱為"時(shí)鐘",計(jì)時(shí)器間隔已設(shè)置為500。OptionCompareDatabaseDimflagAsIntegerPrivateSubForm_Load()flag=1EndSubPrivateSub開關(guān)_Click()Ifflag=1Then時(shí)鐘.Visible=Falseflag=0Else時(shí)鐘.Visible=Trueflag=1EndIfEndSubPrivateSubForm_Timer()時(shí)鐘=TimeEndSub(一)、鼠標(biāo)事件1、MouseUp和MouseDownPrivateSubForm_MouseUp/MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)……EndSub2、MouseMovePrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)……EndSub三個(gè)參數(shù):(1)Button:鼠標(biāo)左鍵——1(acleftButton),鼠標(biāo)右鍵——2(acrightButton)(2)shift:表示shift、Ctrl和Alt的狀態(tài)(3)x、y:鼠標(biāo)光標(biāo)的當(dāng)前位置。六、鍵盤與鼠標(biāo)事件過程(二)、鍵盤事件1、KeyPress事件PrivateSubForm_KeyPress(KeyAsciiAsInteger)……EndSubKeyPress事件帶有一個(gè)參數(shù)KeyAscii是所按鍵的ASCII碼,該事件過程返回的是所按“字符”的ASCII碼。PrivateSubForm_KeyPress(KeyAsciiAsInteger)msgboxKeyAscii&"--"&Chr$(KeyAscii)EndSub2、KeyDown和KeyUp事件PrivateSubForm_KeyDown(KeyUp)(KeyCodeAsInteger,ShiftAsInteger)……EndSub有兩個(gè)參數(shù),KeyCode和Shift.KeyCode是指所按鍵的“鍵”,大小寫表示同一鍵Shift是指shift、Ctrl和Alt的狀態(tài),這3個(gè)鍵分別以二進(jìn)制形式表示,每個(gè)鍵有3位,shift鍵為001,Ctrl鍵為010,Alt鍵為100KeyUp、KeyDown和KeyPress的區(qū)別:A)在KeyUp和KeyDown事件過程中,從鍵盤上輸入A或a被視作相同的字母(即具有相同的KeyCode)。B)在KeyUp和KeyDown事件過程中,將鍵盤上的“1”和右側(cè)小盤上的“1”視作不同的數(shù)字(具有不同的KeyCode)。9.2VBA數(shù)據(jù)庫(kù)編程VBA是通過MicrosoftJet數(shù)據(jù)庫(kù)引擎工具來支持對(duì)數(shù)據(jù)庫(kù)的訪問一、數(shù)據(jù)庫(kù)引擎及其接口ODBCAPI:開放數(shù)據(jù)庫(kù)互連應(yīng)用編程接口DAO:數(shù)據(jù)訪問對(duì)象,適用于單系統(tǒng)或小范圍本地?cái)?shù)據(jù)ADO:ActiveX數(shù)據(jù)對(duì)象,是DAO的后繼產(chǎn)物,它“擴(kuò)展”了DAO所使用的層次對(duì)象,用較少的對(duì)象,更多的屬性、方法以及事件來處理各種操作。二、vba訪問的數(shù)據(jù)類型(1)Jet數(shù)據(jù)庫(kù):access數(shù)據(jù)庫(kù)(本地?cái)?shù)據(jù)庫(kù))(1)ISAM數(shù)據(jù)庫(kù):dBase、Foxpro數(shù)據(jù)庫(kù)(3)ODBC數(shù)據(jù)庫(kù):sqlserver、Oracle等

三、數(shù)據(jù)訪問對(duì)象(DAO)1、調(diào)用DAO對(duì)象的步驟:進(jìn)入VBE編程環(huán)境,執(zhí)行“工具”——“引用”,選中“MicrosoftDAO3.6ObjectLibray”2、DAO對(duì)象數(shù)據(jù)模型的層次結(jié)構(gòu)及對(duì)象:P261Dbengine:數(shù)據(jù)庫(kù)對(duì)象類型Workspace:工作區(qū)Database:數(shù)據(jù)庫(kù)Recordset:記錄集Fields:字段3、DAO訪問數(shù)據(jù)庫(kù)程序一般代碼結(jié)構(gòu)‘定義對(duì)象變量DimwsasworkspaceDimdbasdatabaseDimrsasrecordset‘通過set語句設(shè)置各個(gè)對(duì)象變量的值Setws=dbengine.workspace(0)Setdb=ws.opendatabase(數(shù)據(jù)庫(kù)文件名)Setrs=db.openrecordset(表名,查詢名或sql)Dowhilenotrs.eof……..rs.movenextLoopRs.closeDb.closeSetrs=nothingSetdb=nothing

四、ActiveX數(shù)據(jù)對(duì)象ADO

1ADO中的對(duì)象:(1)Connection對(duì)象:建立與某數(shù)據(jù)庫(kù)的連接(2)Command對(duì)象:對(duì)數(shù)據(jù)庫(kù)的操作(3)Recordset對(duì)象:數(shù)據(jù)庫(kù)中的記錄集(4)Field對(duì)象:字段數(shù)據(jù)信息2ADO中各對(duì)象的使用(1)連接數(shù)據(jù)源:ConnectiondimcnnasnewADODB.connectioncnn.open(2)打開記錄集對(duì)象或執(zhí)行查詢:dimrsasnewadodb.recordsetrs.open(3)使用記錄集:rs.move5從當(dāng)前記錄開始往后移動(dòng)5個(gè)rs.find“張三”查找“張三”值rs.seek25查找25rs.addnew添加新記錄rs.update更新記錄值(刷新,保存所作的修改)rs.delete刪除記錄rs.recordcount統(tǒng)計(jì)記錄集中記錄個(gè)數(shù)(4)關(guān)閉連接或清空記錄集對(duì)象.closeset對(duì)象=nothing3ado訪問數(shù)據(jù)庫(kù)的一般過程及代碼結(jié)構(gòu)‘創(chuàng)建對(duì)象引用Dimcnasnewadodb.connectionDimrsasnesadodb.recordsetCn.open<連接串等參數(shù)>Rs.open<查詢串等參數(shù)>Dowhilenotrs.eof……..rs.movenext

Rs.closecn.closeSetrs=nothingSetcn=nothing

(1)定義(2)設(shè)置連接(3)設(shè)置命令參數(shù)并執(zhí)行命令(4)設(shè)置查詢參數(shù)并打開記錄集(5)操作記錄集(6)關(guān)閉,回收對(duì)象五、數(shù)據(jù)庫(kù)編程分析實(shí)例例P266~267真題:數(shù)據(jù)庫(kù)中有“學(xué)生成績(jī)表”,包括“姓名”、“平時(shí)成績(jī)”、“考試成績(jī)”和“期末總評(píng)”等字段,現(xiàn)要根據(jù)“平時(shí)成績(jī)”和“考試成績(jī)”對(duì)學(xué)生進(jìn)行“期末總評(píng)”。規(guī)定:“平時(shí)成績(jī)”加“考試成績(jī)”大于等于85分,則期末總評(píng)為“優(yōu)”,“平時(shí)成績(jī)”加“考試成績(jī)”小于60分,則期末總評(píng)為“不及格”,其他情況期末總評(píng)為“合格”。下面的程序按照上述要求計(jì)算每名學(xué)生的期末總評(píng)。PrivateSubCommand0_Click()DimdbAsDAO.DatabaseDimrsAsDAO.RecordsetDimpscj,kscj,qmzpAsDAO.FieldDimcountAsIntegerSetdb=CurrentDb()Setrs=db.OpenRecordset("學(xué)生成績(jī)表")Setpscj=rs.Fields("平時(shí)成績(jī)")Setkscj=rs.Fields("考試成績(jī)")Setqmzp=rs.Fields("期末總評(píng)")count=0DoWhileNotrs.EOF【1】

Ifpscj+kscj>=85Thenqmzp="優(yōu)"ElseIfpscj+kscj<60Thenqmzp="不及格"Elseqmzp="合格"EndIfrs.Updatecount=count+1【2】

Looprs.Closedb.CloseSetrs=NothingSetdb=NothingMsgBox"學(xué)生人數(shù):"&countEndSub真題:下列程序的功能是返回當(dāng)前窗體的記錄集的記錄個(gè)數(shù),為保證輸出記錄集的記錄數(shù),空白處應(yīng)填入的語句是()Subgetrecnum()dimrsasobjectsetrs=________msgboxrs.recordcountendsubA)RecordsetB)me.recordsetC)recordsourceD)me.recordsource數(shù)據(jù)庫(kù)編程分析幾個(gè)函數(shù)P268:1nz(字段名稱或表達(dá)式,規(guī)定值)功能:將字段中的空值轉(zhuǎn)換成規(guī)定值2Dlookup(表達(dá)式,記錄集,條件)功能:從外部記錄集中檢索滿足條件的字段(表達(dá)式)上機(jī)操作題:10.3.4PrivateSubbt_Click()DimcnAsNewADODB.ConnectionDimrsAsNewADODB.RecordsetDimstrSQLAsStringDimsageAsSingle'設(shè)置當(dāng)前數(shù)據(jù)庫(kù)連接Setcn=CurrentProject.Connection

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論