版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第11章
VBA數(shù)據(jù)庫編程
本章主要介紹VBAforAccess的一些定式操作。同時,對VBA數(shù)據(jù)庫編程開發(fā)進(jìn)行分析,通過樣例對使用進(jìn)行說明。11.1VBA常見操作
在VBA編程過程中會經(jīng)常用到一些操作,例如,打開或關(guān)閉某個窗體和報表。給某個量輸入一個值、根據(jù)需要顯示一些提示信息等,可以使用VBA的輸入框、消息框等來完成。11.1.1打開和關(guān)閉操作(1)打開窗體操作命令格式為:Docmd.OpenFormFormName,View,FilterName,WhereCondition,DataMode,WindowMode【例11.1】在“窗體”視圖中打開“學(xué)生”窗體,并只顯示“姓名”字段為“張麗”的記錄??梢跃庉嬶@示的記錄,也可以添加新記錄。DoCmd.OpenForm"學(xué)生",,,"姓名='張麗'"
11.1.1打開和關(guān)閉操作(2)打開報表操作命令格式為:Docmd.OpenReportReportName,View,FilterName,WhereCondition,WindowMode【例11.2】以打印預(yù)覽方式打印“學(xué)生”報表DoCmd.OpenReport"學(xué)生",acViewPreview11.1.1打開和關(guān)閉操作命令格式為:Docmd.Close(ObjectType,ObjectName,Save)【例11.3】使用Close方法關(guān)閉“學(xué)生”窗體,在不進(jìn)行提示的情況下,保存所有對窗體的更改。DoCmd.CloseacForm,"學(xué)生",acSaveYes11.1.2輸入框函數(shù)(InputBox)
在對話框中顯示提示,等待用戶輸入文本或單擊按鈕,并返回字符串,其中包含文本框的內(nèi)容。InputBox()函數(shù)示例如圖所示。11.1.3消息框(MsgBox)
在對話框中顯示消息,并等待用戶單擊按鈕,然后返回一個Integer值,該值指示用戶單擊了哪個按鈕。語法:MsgBox(prompt[,buttons][,title][,helpfile,context])【例11.5】MsgBox子過程使用示例。11.1.3消息框(MsgBox)【例11.6】MsgBox函數(shù)過程使用示例。在“教學(xué)管理”數(shù)據(jù)庫中,創(chuàng)建一個窗體,命名為“MsgBox使用示例”。窗體上的控件如表所示,窗體界面如圖所示。單擊窗體上“點(diǎn)點(diǎn)我,試試效果”按鈕,實(shí)現(xiàn)功能是:打開如圖所示的對話框,如果單擊了“是(Y)”按鈕,彈出“您單擊了按鈕Yes”消息,如果單擊“否(N)”按鈕,彈出“您單擊了按鈕No”消息。控件類型控件名稱控件標(biāo)題1個標(biāo)簽lbl1MsgBox函數(shù)和MsgBox過程的演示1個命令按鈕cmd1點(diǎn)點(diǎn)我,試試效果11.1.4VBA編程驗(yàn)證數(shù)據(jù)
使用窗體和數(shù)據(jù)訪問頁,每當(dāng)保存記錄數(shù)據(jù)時,所做的更改便會保存到數(shù)據(jù)源表中。在控件中的數(shù)據(jù)被改變之前或記錄數(shù)據(jù)被更新之前會發(fā)生BeforeUpdate事件。通過創(chuàng)建窗體或控件的BeforeUpdate事件過程,可以實(shí)現(xiàn)對輸入到窗體控件中的數(shù)據(jù)進(jìn)行各種驗(yàn)證。例如,數(shù)據(jù)類型驗(yàn)證、數(shù)據(jù)范圍驗(yàn)證等。11.1.4VBA編程驗(yàn)證數(shù)據(jù)【例11.7】對窗體fScore上文本框控件txtScore中輸入學(xué)生分?jǐn)?shù)數(shù)據(jù)進(jìn)行驗(yàn)證。要求:該文本框中只接受大于等于0且小于等于100的數(shù)值數(shù)據(jù),若輸入超出范圍則給出提示信息。該文本控件的BeforeUpdate事件過程代碼如下。PrivateSubtxtScore_BeforeUpdate(CancelAsInteger)IfMe!txtScore=""OrIsNull(Me!txtScore)Then'數(shù)據(jù)為空時的驗(yàn)證
MsgBox"成績不能為空!",vbCritical,"警告"Cancel=True'取消BeforeUpdate事件
ElseIfIsNumeric(Me!txtScore)=FalseThen'非數(shù)值型數(shù)據(jù)輸入的驗(yàn)證
MsgBox"成績必須輸入數(shù)值數(shù)據(jù)!",vbCritical,"警告"Cancel=True'取消BeforeUpdate事件
ElseIfMe!txtScore<0andMe!txtScore>100Then'非法范圍數(shù)據(jù)的驗(yàn)證
MsgBox"分?jǐn)?shù)為0~100范圍數(shù)據(jù)!",vbCritical,"警告"Cancel=True'取消BeforeUpdate事件
ElseMsgBox"數(shù)據(jù)驗(yàn)證OK!",vbInformation,"通告"EndIfEndSub驗(yàn)證函數(shù)函數(shù)名稱返回值說明IsNumericBoolean值指出表達(dá)式的運(yùn)算結(jié)果是否為數(shù)值。返回True,為數(shù)值IsDateBoolean值指出一個表達(dá)式是否可以轉(zhuǎn)換成日期。返回True,可轉(zhuǎn)換IsEmptyBoolean值指出變量是否已經(jīng)初始化。返回True,未初始化IsErrorBoolean值指出表達(dá)式是否為一個錯誤值。返回True,有錯誤IsArrayBoolean值指出變量是否為一個數(shù)組。返回True,為數(shù)組IsNullBoolean值指出表達(dá)式是否為無效數(shù)據(jù)(Null)返回True,無效數(shù)據(jù)IsObjectBoolean值指出標(biāo)識符是否表示對象變量。返回True,為對象11.1.5計(jì)時事件TimerVB中提供Timer時間控件可以實(shí)現(xiàn)“計(jì)時”功能。但VBA并沒有直接提供Timer時間控件,而是通過設(shè)置窗體的“計(jì)時器間隔(TimerInterval)”屬性與添加“計(jì)時器觸發(fā)(Timer)”事件來完成類似“計(jì)時”功能。其處理過程是:Timer事件每隔TimerInterval時間間隔就會被激發(fā)一次,并運(yùn)行Timer事件過程來響應(yīng)。這樣重復(fù)不斷,即實(shí)現(xiàn)“計(jì)時”處理功能。注意:“計(jì)時器間隔”屬性值是以毫秒(ms)為計(jì)量單位,1秒等于1000毫秒。11.1.5計(jì)時事件Timer【例11.8】在窗體上有一個文本框控件,名稱為Text1。同時,窗體加載時設(shè)置其計(jì)時器間隔為1秒、計(jì)時器觸發(fā)事件過程則實(shí)現(xiàn)在Text1文本框中動態(tài)顯示當(dāng)前日期和時間。
PrivateSubForm_Load() Me.TimerInterval=1000 EndSub PrivateSubForm_Timer() Me!Text1=Now() EndSub11.2VBA的數(shù)據(jù)庫編程
前面介紹的是Access數(shù)據(jù)庫對象處理數(shù)據(jù)的方法和形式,要開發(fā)出更具有實(shí)際應(yīng)用價值的Access數(shù)據(jù)庫應(yīng)用程序,還應(yīng)當(dāng)了解和掌握VBA的數(shù)據(jù)庫編程方法。11.2.1數(shù)據(jù)庫引擎及其接口
在MicrosoftOfficeVBA中主要提供了3種數(shù)據(jù)庫訪問接口:開放數(shù)據(jù)庫互連應(yīng)用編程接口(OpenDataBaseConnectivityAPI,簡稱ODBCAPI)、數(shù)據(jù)訪問對象(DataAccessObject,簡稱DAO)和ActiveX數(shù)據(jù)對象(ActiveXDataObjects,簡稱ADO)。11.2.2VBA訪問的數(shù)據(jù)庫類型VBA通過數(shù)據(jù)庫引擎可以訪問的數(shù)據(jù)庫有以下3種類型:本地?cái)?shù)據(jù)庫:即Access數(shù)據(jù)庫。外部數(shù)據(jù)庫:指所有的索引順序訪問方法(ISAM)數(shù)據(jù)庫,如dBase、FoxPro。ODBC數(shù)據(jù)庫:符合開放數(shù)據(jù)庫連接(ODBC)標(biāo)準(zhǔn)的C/S數(shù)據(jù)庫。如MicrosoftSQLServer、Oracle等。12.2.3數(shù)據(jù)訪問對象(DAO)DAO包含了很多對象和集合,通過Jet數(shù)據(jù)庫來連接Access數(shù)據(jù)庫和其它ODBC數(shù)據(jù)庫。利用DAO可以完成對數(shù)據(jù)庫的創(chuàng)建、修改、刪除和對記錄的定位和查詢等。數(shù)據(jù)庫操作一般語句和步驟程序段'定義對象變量DimwsAsWorkspaceDimdbAsDatabaseDimrsRecordSet'通過Set語句設(shè)置各個對象變量的值Setws=DBEngine.Workspace(0)'打開默認(rèn)工作區(qū)Setdb=ws.OpenDatabase(〈數(shù)據(jù)庫文件名〉)'打開數(shù)據(jù)庫文件Setrs=db.OpenRecordSet(〈表名、查詢名或SQL語句〉)'打開數(shù)據(jù)記錄集DoWhileNotrs.EOF'利用循環(huán)結(jié)構(gòu)遍歷整個記錄集直至末尾……'安排字段數(shù)據(jù)的各種操作rs.MoveNext'記錄指針移至下一條Looprs.close'關(guān)閉記錄集db.close'關(guān)閉數(shù)據(jù)庫Setrs=Nothing'回收記錄集對象變量的內(nèi)存占有Setdb=Nothing'回收數(shù)據(jù)庫對象變量的內(nèi)存占有……11.2.3數(shù)據(jù)訪問對象(DAO)【例11.9】在“教學(xué)管理”數(shù)據(jù)庫中,“教師”表包括“姓名”和“職稱”等字段,現(xiàn)分別統(tǒng)計(jì)教授、副教授和其他人員的數(shù)量。PrivateSubCommand0_Click()DimdbAsDAO.DatabaseDimrsAsDAO.RecordsetDimzcAsDAO.FieldDimCount1AsInteger,Count2AsInteger,Count3AsInteger
Setdb=CurrentDb()Setrs=db.OpenRecordset("教師")Setzc=rs.Fields("職稱")
Count1=0:Count2=0:Count3=0DoWhileNotrs.EofSelectCasezcCaseIs="教授"Count1=Count1+1CaseIs="副教授"Count2=Count2+1CaseElseCount3=Count3+1EndSelectrs.MoveNextLooprs.CloseSetrs=NothingSetdb=NothingMsgBox"教授:"&Count1&",副教授:"&Count2&",其他:"&Count3EndSub11.2.4ActiveX數(shù)據(jù)對象(ADO)ActiveX數(shù)據(jù)對象(ADO)是基于組件的數(shù)據(jù)庫編程接口,它是一個和編程語言無關(guān)的COM組件系統(tǒng),可以對來自多種數(shù)據(jù)提供者的數(shù)據(jù)進(jìn)行讀取和寫入操作。數(shù)據(jù)庫操作一般語句和步驟程序段1:在Connection對象上打開RecordSet……'創(chuàng)建對象引用DimcnAsADODB.Connection'創(chuàng)建一連接對象DimrsAsADODB.RecordSet'創(chuàng)建一記錄集對象cn.Open〈連接串等參數(shù)〉'打開一個連接rs.Open〈查詢串等參數(shù)〉'打開一個記錄集DoWhileNotrs.EOF'利用循環(huán)結(jié)構(gòu)遍歷整個記錄集直至末尾……'安排字段數(shù)據(jù)的各種操作rs.MoveNext'記錄指針移至下一條Looprs.close'關(guān)閉記錄集cn.close'關(guān)閉連接Setrs=Nothing'回收記錄集對象變量的內(nèi)存占有Setcn=Nothing'回收連接對象變量的內(nèi)存占有……程序段2:在Command對象上打開RecordSet……'創(chuàng)建對象引用DimcmAsnewADODB.Command'創(chuàng)建一命令對象DimrsAsnewADODB.RecordSet'創(chuàng)建一記錄集對象'設(shè)置命令對象的活動連接、類型及查詢等屬性Withcm.ActiveConnection=〈連接串〉.CommandType=〈命令類型參數(shù)〉.CommandText=〈查詢命令串〉EndWithRs.Opencm,〈其他參數(shù)〉'設(shè)定rs的ActiveConnection屬性DoWhileNotrs.EOF'利用循環(huán)結(jié)構(gòu)遍歷整個記錄集直至末尾……'安排字段數(shù)據(jù)的各類操作rs.MoveNext'記錄指針移至下一條Looprs.close'關(guān)閉記錄集Setrs=Nothing'回收記錄集對象變量的內(nèi)存占有11.2.4ActiveX數(shù)據(jù)對象(ADO)【例11.10】在“教學(xué)管理”數(shù)據(jù)庫中,表“院系”存儲院系的基本信息,包括院系編號、院系名稱、院長姓名、院辦電話和院系網(wǎng)址。下面程序的功能是:通過圖11-5所示的窗體向“院系”表中添加院系記錄,對應(yīng)“院系編號”、“院系名稱”、“院長姓名”、“院辦電話”和“院系網(wǎng)址”的5個文本框的名稱分別為tNo、tDep、tName、tTel和tWeb。當(dāng)單擊窗體中的"增加"命令按鈕(名稱為command1)時,首先判斷院系編號是否重復(fù),如果不重復(fù)則向“院系”表中添加新院系記錄;如果院系編號重復(fù),則給出提示信息。11.2.4
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省市深圳市龍崗區(qū)南灣校2025屆初中生物畢業(yè)考試模擬沖刺卷含解析
- 沈陽2024年遼寧沈陽藥科大學(xué)招聘高層次和急需緊缺人才歷年參考題庫(頻考版)含答案解析
- 江西2024年江西工業(yè)貿(mào)易職業(yè)技術(shù)學(xué)院博士研究生招聘10人歷年參考題庫(頻考版)含答案解析
- 桂林2024年廣西桂林師范高等??茖W(xué)校招聘11人歷年參考題庫(頻考版)含答案解析
- 2024年鐵力林業(yè)局職工醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 2024年金鄉(xiāng)縣人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 品牌視覺設(shè)計(jì)師聘用合同
- 船舶制造塔吊租賃合同模板
- 藝術(shù)展覽服裝租賃合同
- 通訊營業(yè)廳店員聘用協(xié)議
- 酒店婚宴銷售年度工作計(jì)劃4篇
- 電鍍產(chǎn)品檢驗(yàn)作業(yè)指導(dǎo)書
- 湖北省武漢市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)及行政區(qū)劃代碼
- 健康教育工作考核記錄表
- 路面輪胎模型建立方法swift
- 裝飾工程施工技術(shù)ppt課件(完整版)
- SJG 05-2020 基坑支護(hù)技術(shù)標(biāo)準(zhǔn)-高清現(xiàn)行
- 汽車維修價格表
- 10KV供配電工程施工組織設(shè)計(jì)
- C#讀取DXF文件
- 支付平臺線上統(tǒng)一對賬接口說明V0.2.docx
評論
0/150
提交評論