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

下載本文檔

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

文檔簡介

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

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

Inputbox(提示信息[,標(biāo)題][,默認值])提示信息是告訴用戶輸入什么內(nèi)容標(biāo)題是輸入框的標(biāo)題,可省略默認值是如果用戶不輸入任何值時的取值例9.1strname=inputbox(“請輸入姓名:","msg")執(zhí)行下列語句:St=inputbox("請輸入字符串","字符串對話框","aaa"),當(dāng)用戶輸入字符串“bbbb”,按“ok”按鈕后,變量st的內(nèi)容是________三、消息框——MsgBox函數(shù)及語句函數(shù):MsgBox(提示內(nèi)容[,對話框的按鈕類型][,對話框標(biāo)題])語句:MsgBox提示內(nèi)容[,對話框的按鈕類型][,對話框標(biāo)題])printmsgbox"請選擇",2+16,"提醒"Printmsgbox"請選擇",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)單擊消息框中某個按鈕,函數(shù)的值為:常數(shù)值說明vbOK1確定vbCancel2取消vbAbort3終止vbRetry4重試vbIgnore5忽略vbYes6是vbNo7否執(zhí)行語句:msgbox“AAAA”,vbOKCancel+vbQuestion,“BBBB”之后,彈出的信息框_____________A)標(biāo)題為“BBBB”,框內(nèi)提示符為“驚嘆號”,提示內(nèi)容為“AAAA”B)標(biāo)題為“AAAA”,框內(nèi)提示符為“驚嘆號”,提示內(nèi)容為“BBBB”C)標(biāo)題為“BBBB”,框內(nèi)提示符為“問號”,提示內(nèi)容為“AAAA”D)標(biāo)題為“AAAA”,框內(nèi)提示符為“問號”,提示內(nèi)容為“BBBB四、VBA編程數(shù)據(jù)驗證函數(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ù)驗證OK”,vbinformation,”通告”

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

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

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

1ADO中的對象:(1)Connection對象:建立與某數(shù)據(jù)庫的連接(2)Command對象:對數(shù)據(jù)庫的操作(3)Recordset對象:數(shù)據(jù)庫中的記錄集(4)Field對象:字段數(shù)據(jù)信息2ADO中各對象的使用(1)連接數(shù)據(jù)源:ConnectiondimcnnasnewADODB.connectioncnn.open(2)打開記錄集對象或執(zhí)行查詢:dimrsasnewadodb.recordsetrs.open(3)使用記錄集:rs.move5從當(dāng)前記錄開始往后移動5個rs.find“張三”查找“張三”值rs.seek25查找25rs.addnew添加新記錄rs.update更新記錄值(刷新,保存所作的修改)rs.delete刪除記錄rs.recordcount統(tǒng)計記錄集中記錄個數(shù)(4)關(guān)閉連接或清空記錄集對象.closeset對象=nothing3ado訪問數(shù)據(jù)庫的一般過程及代碼結(jié)構(gòu)‘創(chuàng)建對象引用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)閉,回收對象五、數(shù)據(jù)庫編程分析實例例P266~267真題:數(shù)據(jù)庫中有“學(xué)生成績表”,包括“姓名”、“平時成績”、“考試成績”和“期末總評”等字段,現(xiàn)要根據(jù)“平時成績”和“考試成績”對學(xué)生進行“期末總評”。規(guī)定:“平時成績”加“考試成績”大于等于85分,則期末總評為“優(yōu)”,“平時成績”加“考試成績”小于60分,則期末總評為“不及格”,其他情況期末總評為“合格”。下面的程序按照上述要求計算每名學(xué)生的期末總評。PrivateSubCommand0_Click()DimdbAsDAO.DatabaseDimrsAsDAO.RecordsetDimpscj,kscj,qmzpAsDAO.FieldDimcountAsIntegerSetdb=CurrentDb()Setrs=db.OpenRecordset("學(xué)生成績表")Setpscj=rs.Fields("平時成績")Setkscj=rs.Fields("考試成績")Setqmzp=rs.Fields("期末總評")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)前窗體的記錄集的記錄個數(shù),為保證輸出記錄集的記錄數(shù),空白處應(yīng)填入的語句是()Subgetrecnum()dimrsasobjectsetrs=________msgboxrs.recordcountendsubA)RecordsetB)me.recordsetC)recordsourceD)me.recordsource數(shù)據(jù)庫編程分析幾個函數(shù)P268:1nz(字段名稱或表達式,規(guī)定值)功能:將字段中的空值轉(zhuǎn)換成規(guī)定值2Dlookup(表達式,記錄集,條件)功能:從外部記錄集中檢索滿足條件的字段(表達式)上機操作題:10.3.4PrivateSubbt_Click()DimcnAsNewADODB.ConnectionDimrsAsNewADODB.RecordsetDimstrSQLAsStringDimsageAsSingle'設(shè)置當(dāng)前數(shù)據(jù)庫連接Setcn=CurrentProject.Connection

溫馨提示

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

最新文檔

評論

0/150

提交評論