版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第10章數(shù)據(jù)庫(kù)編程用ADO訪問數(shù)據(jù)庫(kù)用DAO訪問數(shù)據(jù)庫(kù)程序運(yùn)行錯(cuò)誤處理本章要點(diǎn):10.1數(shù)據(jù)庫(kù)編程概述學(xué)習(xí)數(shù)據(jù)庫(kù)編程,首先要了解一些基本知識(shí),包括;數(shù)據(jù)庫(kù)對(duì)象類型、數(shù)據(jù)庫(kù)接口、指針移動(dòng)等。10.1.1數(shù)據(jù)庫(kù)對(duì)象類型
用數(shù)據(jù)庫(kù)編程方法訪問數(shù)據(jù)庫(kù),首先要定義數(shù)據(jù)庫(kù)對(duì)象變量,系統(tǒng)為不同的數(shù)據(jù)庫(kù)對(duì)象提供了不同的屬性和方法,這些屬性和方法要由數(shù)據(jù)庫(kù)對(duì)象變量來(lái)調(diào)用。常用數(shù)據(jù)庫(kù)對(duì)象類型:
類型類型名Workspace工作區(qū)對(duì)象Database數(shù)據(jù)庫(kù)對(duì)象Connection連接對(duì)象Command命令對(duì)象Recordset記錄集對(duì)象Field字段對(duì)象Error錯(cuò)誤對(duì)象10.1.2數(shù)據(jù)庫(kù)訪問接口
數(shù)據(jù)庫(kù)訪問接口是指將VBA與后臺(tái)數(shù)據(jù)庫(kù)連接起來(lái)的代碼片段,即VBA與Access數(shù)據(jù)庫(kù)連接的方法。設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序通常需要訪問數(shù)據(jù)庫(kù),而操縱數(shù)據(jù)庫(kù)中的數(shù)據(jù)就要了解數(shù)據(jù)庫(kù)接口技術(shù)。VBA主要提供3種數(shù)據(jù)庫(kù)訪問接口:1.開放式數(shù)據(jù)庫(kù)連接ODBC:(OpenDatabaseConnectivity)稱為開放式數(shù)據(jù)庫(kù)連接,是一種關(guān)系型數(shù)據(jù)庫(kù)的接口界面。ODBC把SQL作為訪問數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn),通過一組通用代碼給數(shù)據(jù)庫(kù)提供驅(qū)動(dòng)程序。2.DAO(DataAccessObjects):
DAO稱為“數(shù)據(jù)訪問對(duì)象”,是一種面向?qū)ο蟮慕缑娼涌?,提供一個(gè)訪問數(shù)據(jù)庫(kù)的對(duì)象模型,用其中定義的一系列數(shù)據(jù)訪問對(duì)象,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的各種操作。使用DAO的程序編碼非常簡(jiǎn)單。3.ADO(ActiveXDataObjects):ADO稱為“Active數(shù)據(jù)對(duì)象”,是基于組件的數(shù)據(jù)庫(kù)編程接口。ADO實(shí)際是一種提供訪問各種數(shù)據(jù)類型的連接機(jī)制,是一個(gè)與編程語(yǔ)言無(wú)關(guān)的COM(ComponentObjectModel)組件系統(tǒng)。ADO設(shè)計(jì)為一種極簡(jiǎn)單的格式,可以方便地連接任何符合ODBC標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)。
VBA可以識(shí)別3類數(shù)據(jù)庫(kù):本地?cái)?shù)據(jù)庫(kù):即Access數(shù)據(jù)庫(kù)。外部數(shù)據(jù)庫(kù):所有索引順序訪問方法(ISAM)數(shù)據(jù)庫(kù),如VFP。也可以訪問文本文件數(shù)據(jù)庫(kù)和MicrosoftExcel或Lotus1-2-3電子表格。ODBC數(shù)據(jù)庫(kù):符合ODBC標(biāo)準(zhǔn)的C/S數(shù)據(jù)庫(kù),如SQLServer、Oracle。10.1.3VBA可訪問的數(shù)據(jù)庫(kù)類型
10.1.4指針定位
系統(tǒng)為記錄集對(duì)象提供指針定位方法:MoveFirst:將指針移到當(dāng)前記錄集的第一條記錄。MoveLast:將指針移到當(dāng)前記錄集的最后一條記錄。MoveNext:將指針從當(dāng)前位置向后移到下一條記錄。MovePrevious:將指針從當(dāng)前位置向回移到上一條記錄。Move:將指針從當(dāng)前位置移過指定數(shù)量的記錄。DAO提供了一種通過程序代碼創(chuàng)建和操縱數(shù)據(jù)庫(kù)的機(jī)制;借助VBA代碼靈活地控制數(shù)據(jù)庫(kù)訪問的各種操作。如:查詢記錄、添加記錄、刪除記錄等。10.2用DAO訪問數(shù)據(jù)庫(kù)10.2.1DAO模型結(jié)構(gòu)DAO模型是設(shè)計(jì)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)結(jié)構(gòu)的對(duì)象類的集合,它們提供了管理關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)所需的全部操作的屬性和方法,其中包括創(chuàng)建數(shù)據(jù)庫(kù)、定義表、字段和索引、建立表之間的關(guān)系、定位和查詢數(shù)據(jù)庫(kù)等。
10.2.2DAO對(duì)象簡(jiǎn)介DBEngine對(duì)象,處于最頂層,表示數(shù)據(jù)庫(kù)引擎,是模型中惟一不被其他對(duì)象所包含的對(duì)象,它包含并控制DAO模型中其他全部對(duì)象。Workspace對(duì)象,表示工作區(qū),可以使用隱含的workspace對(duì)象。Database對(duì)象,代表到數(shù)據(jù)庫(kù)的連接,表示操作的數(shù)據(jù)庫(kù)對(duì)象。RecordSet對(duì)象,代表一個(gè)數(shù)據(jù)記錄的集合,該集合的記錄來(lái)自于一個(gè)表、一個(gè)查詢或一個(gè)SQL語(yǔ)句的運(yùn)行結(jié)果。Field對(duì)象,表示記錄集中的字段。QueryDef對(duì)象,表示數(shù)據(jù)庫(kù)查詢信息。Error對(duì)象,表示數(shù)據(jù)提供程序出錯(cuò)時(shí)的擴(kuò)展信息。
1.用DAO訪問數(shù)據(jù)庫(kù)的流程
定義DAO對(duì)象變量,定義時(shí)在對(duì)象類型的前面加上前綴“DAO”。通過對(duì)象變量調(diào)用對(duì)象的方法,設(shè)置對(duì)象的屬性,實(shí)現(xiàn)數(shù)據(jù)庫(kù)的各種訪問。10.2.3用DAO訪問數(shù)據(jù)庫(kù)10.2.3用DAO訪問數(shù)據(jù)庫(kù)2.用DAO訪問數(shù)據(jù)庫(kù)的一般語(yǔ)句和步驟:下面的程序段給出了用DAO訪問數(shù)據(jù)庫(kù)的一般語(yǔ)句和步驟
Dimwsas
DAO.Workspace
'定義Workspace對(duì)象變量DimdbasDAO.Database
'定義Database對(duì)象變量DimrsasDAO.RecordSet
'定義RecordSet對(duì)象變量DimfdasDAO.Field
'定義Field對(duì)象變量Setws=DBEngine.Workspace(o)'打開默認(rèn)工作區(qū)Setdb=ws.OpenDatabase(數(shù)據(jù)庫(kù)的地址與文件名)'打開數(shù)據(jù)庫(kù)Setrs=db.OpenRecordSet(表名、查詢名或SQL語(yǔ)句)'打開記錄集DoWhilenotrs.EOF'循環(huán)遍歷整個(gè)記錄集直至記錄集末尾
……'對(duì)字段的各種操作rs.MoveNext'記錄指針移到下一條Loop
'返回到循環(huán)開始處rs.close'關(guān)閉記錄集db.close'關(guān)閉數(shù)據(jù)庫(kù)setrs=nothing'釋放記錄集對(duì)象變量所占內(nèi)存空間setdb=nothing'釋放數(shù)據(jù)庫(kù)對(duì)象變量所占內(nèi)存空間3.用DAO打開數(shù)據(jù)庫(kù)的快捷方式
如果是本地?cái)?shù)據(jù)庫(kù),定義Workspace對(duì)象變量可以省略;將打開工作區(qū)和打開數(shù)據(jù)庫(kù)兩條語(yǔ)句合并為一條語(yǔ)句:Setdb=CurrentDb(),這是用DAO打開數(shù)據(jù)庫(kù)的快捷方式?!纠?0-1】設(shè)計(jì)一個(gè)窗體,向“學(xué)生管理”數(shù)據(jù)庫(kù)的“學(xué)生信息”表添加一個(gè)記錄。添加紀(jì)錄按鈕的click事件代碼如下:Privatesubc1_click()Rem定義Recoedset對(duì)象變量DimwsasDao.WorkspaceDimrstasDao.RecordsetDimdbasDao.Database‘打開一個(gè)工作區(qū)
Setws=DBEngine.Workspaces(0)
Rem打開一個(gè)數(shù)據(jù)庫(kù)
Setdb=ws.OpenDatabase(“D\ACCESS\學(xué)生管理.mdb”)Setrst=db.OPenRecordset(“學(xué)生信息”)‘創(chuàng)建一條空的記錄
Rst.addnewRem為新的記錄賦值
Rst.fields(“學(xué)號(hào)”)=”20100105”Rst.fields(“姓名”)=”陽(yáng)陽(yáng)”
Rst.fields(“性別”)=”女”Rst.fields(“年齡”)=20Rst.fields(“入學(xué)時(shí)間”)=#2010/09/12#Rem刷新表,將記錄加入到表中
Rst.UpdateRst.Closedb.Closeendsub運(yùn)行窗體,單擊“添加記錄”命令按鈕,即可向“學(xué)生信息”表中添加一條記錄。例10-2:按職稱調(diào)整工資,用DAO方法將數(shù)據(jù)更新到本地?cái)?shù)據(jù)庫(kù)的數(shù)據(jù)表中,代碼附加給命令按鈕的單擊事件,調(diào)整后工資增加的總數(shù)額顯示在文本框中。
PrivateSubc1_Click()
DimdbAsDAO.Database'定義數(shù)據(jù)庫(kù)變量
DimrsAsDAO.Recordset'定義記錄集變量
DimgzAsDAO.Field'定義字段變量
DimzcAsDAO.Field‘定義字段變量
DimsumAsSingle
'定義單精度變量
DimrateAsSingle'定義單精度變量Setdb=CurrentDb()'快捷方式打開數(shù)據(jù)庫(kù)
Setrs=db.OpenRecordset("gz")'打開記錄集
Setgz=rs.Fields("工資")'字段與字段變量建立連接
Setzc=rs.Fields("職稱")'字段與字段變量建立連接
sum=0'求和變量清零
DoWhileNotrs.EOF'循環(huán)開始
rs.Edit'使記錄集可編輯
Select
Casezc'進(jìn)入多項(xiàng)選擇
CaseIs="教授":rate=0.15'教授工資上調(diào)15%
CaseIs="副教授":rate=0.1'副教授工資上調(diào)10%
CaseElse:rate=0.05'其他人工資上調(diào)5%
EndSelectsum=sum+gz*rate'累加調(diào)整的錢數(shù)
gz=gz+gz*rate'工資調(diào)整
rs.Update'更新到表中
rs.MoveNext'指針移到下一條記錄
Loop
'開始下一次循環(huán)
rs.Closedb.Close
Setrs=Nothing
Setdb=NothingText1=sum'調(diào)整工資的總數(shù)額顯示在文本框中
DoCmd.OpenTable"gz"'打開更新后的表
EndSub轉(zhuǎn)到窗體視圖→單擊命令按鈕。
10.3用ADO訪問數(shù)據(jù)庫(kù)
10.3.1ADO模型結(jié)構(gòu)ADO對(duì)象模型是一系列對(duì)象的集合,對(duì)象不分級(jí),除Field對(duì)象和Error對(duì)象之外,其他對(duì)象可直接創(chuàng)建。使用時(shí),通過對(duì)象變量調(diào)用對(duì)象的方法、設(shè)置對(duì)象的屬性,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問。10.3.2ADO對(duì)象簡(jiǎn)介1.Connection對(duì)象,建立到數(shù)據(jù)源的連接。2.Command對(duì)象,表示一個(gè)命令。3.RecordSet對(duì)象,表示數(shù)據(jù)操作返回的記錄集合。4.Field對(duì)象,表示記錄集中的字段。5.Error對(duì)象,表示數(shù)據(jù)提供程序出錯(cuò)時(shí)的擴(kuò)展信息。
Connection對(duì)象與RecordSet對(duì)象是兩個(gè)ADO中最重要的對(duì)象。RecordSet對(duì)象可以分別與Connection對(duì)象和Command對(duì)象聯(lián)合使用。
10.3.3用ADO訪問數(shù)據(jù)庫(kù)的流程首先創(chuàng)建對(duì)象變量然后用對(duì)象的方法和屬性訪問數(shù)據(jù)庫(kù)。為了與DAO對(duì)象有所區(qū)分,ADO對(duì)象的前面加前綴“ADODB”。10.3.4
ADO訪問數(shù)據(jù)庫(kù)的一般語(yǔ)句和步驟
1.RecordSet對(duì)與Connection對(duì)象聯(lián)合使用DimcnasnewADOBD.Connection'建立連接對(duì)象DimrsasnewADOBD.RecordSet'建立記錄集對(duì)象cn.Provider="Microsoft.Jet.OLEDB.4.0"
'設(shè)置數(shù)據(jù)提供者cn.Open連接字符串'打開數(shù)據(jù)庫(kù)rs.Open查詢字符串'打開記錄集dowhilenotrs.EOF'循環(huán)開始
……'對(duì)字段的各種操作rs.movenext‘記錄指針移到下一條loop
'返回到循環(huán)開始處rs.close'關(guān)閉記錄集cn.close'關(guān)閉連接setrs=nothing'釋放記錄集對(duì)象變量所占內(nèi)存空間setcn=nothing'釋放連接對(duì)象變量所占內(nèi)存空間說(shuō)明:對(duì)于本地?cái)?shù)據(jù)庫(kù),Access的VBA也給ADO提供了類似于DAO的數(shù)據(jù)庫(kù)打開快捷方式,可以將設(shè)置數(shù)據(jù)提供者和打開數(shù)據(jù)庫(kù)兩條語(yǔ)句用下面一條語(yǔ)句代替:
Setcn=CurrentProject.Connection()
2.RecordSet對(duì)與Command對(duì)象聯(lián)合使用DimcmasnewADOBD.Command'建立命令對(duì)象DimrsasnewADOBD.RecordSet'建立記錄集對(duì)象cm.ActiveConnection=連接字符串'建立命令對(duì)象的活動(dòng)連接cm.CommandType=查詢類型'指定命令對(duì)象的查詢類型cm.CommandText=查詢字符串'建立命令對(duì)象的查詢字符串rs.Opencm,其他參數(shù)'打開記錄集dowhilenotrs.EOF'循環(huán)開始
……'對(duì)字段的各種操作rs.movenext'記錄指針移到下一條loop
'返回到循環(huán)開始處rs.close'關(guān)閉記錄集setrs=nothing'釋放記錄集對(duì)象變量所占內(nèi)存空間
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新生兒復(fù)蘇培訓(xùn)制度
- 教職工績(jī)效考核細(xì)則制度
- 國(guó)際關(guān)系學(xué)院雙語(yǔ)教學(xué)課程建設(shè)項(xiàng)目申請(qǐng)表
- 罕見藥藥源性疾病的防控策略
- 2026安徽省面向中國(guó)農(nóng)業(yè)大學(xué)選調(diào)生招錄備考題庫(kù)有答案詳解
- 2026上半年海南事業(yè)單位聯(lián)考瓊海市招聘事業(yè)單位工作人員167人備考題庫(kù)(1號(hào))及一套參考答案詳解
- 2026年1月廣東廣州市幼兒師范學(xué)校附屬幼兒園招聘編外聘用制專任教師2人備考題庫(kù)及答案詳解(考點(diǎn)梳理)
- 罕見腫瘤的個(gè)體化治療療效預(yù)測(cè)模型構(gòu)建與個(gè)體化治療路徑
- 2026安徽蕪湖臻鑫智鎂科技有限公司招聘2人備考題庫(kù)完整參考答案詳解
- 設(shè)備租賃行業(yè)財(cái)務(wù)制度
- 上腔靜脈綜合征患者的護(hù)理專家講座
- 免責(zé)協(xié)議告知函
- 食物與情緒-營(yíng)養(yǎng)對(duì)心理健康的影響
- 2023氣管插管意外拔管的不良事件分析及改進(jìn)措施
- 麻醉藥品、精神藥品月檢查記錄
- 基礎(chǔ)化學(xué)(本科)PPT完整全套教學(xué)課件
- 蕉嶺縣幅地質(zhì)圖說(shuō)明書
- 電梯控制系統(tǒng)論文
- (完整word版)人教版初中語(yǔ)文必背古詩(shī)詞(完整版)
- 湖北省地質(zhì)勘查坑探工程設(shè)計(jì)編寫要求
- GB/T 4310-2016釩
評(píng)論
0/150
提交評(píng)論