Access數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用教程課件第10章 數(shù)據(jù)庫(kù)編程_第1頁(yè)
Access數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用教程課件第10章 數(shù)據(jù)庫(kù)編程_第2頁(yè)
Access數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用教程課件第10章 數(shù)據(jù)庫(kù)編程_第3頁(yè)
Access數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用教程課件第10章 數(shù)據(jù)庫(kù)編程_第4頁(yè)
Access數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用教程課件第10章 數(shù)據(jù)庫(kù)編程_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論