版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7章VBA數(shù)據(jù)庫(kù)編程1精選課件本章內(nèi)容
記錄集概述
在Access中引用ADO對(duì)象
引用記錄字段
瀏覽記錄
編輯數(shù)據(jù)
用ADO技術(shù)實(shí)現(xiàn)復(fù)雜查詢
在VBA程序中使用SQL命令
訪問(wèn)當(dāng)前數(shù)據(jù)庫(kù)以外的數(shù)據(jù)庫(kù)
綜合實(shí)例—編制“研究生成績(jī)管理與統(tǒng)計(jì)”程序2精選課件7.1記錄集概述
7.1.1ADO的9個(gè)對(duì)象7.1.2了解記錄集
3精選課件7.1.1ADO的9個(gè)對(duì)象
ADO:ActiveXDataObjectsAccess內(nèi)嵌的VBA是用ADO技術(shù)開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用的主要工具ADO對(duì)象模型有9個(gè)對(duì)象:Connection、Recordset、Record、Command、Parameter、Field、Property、Stream、Error常用對(duì)象:Connection、Command、Recordset4精選課件7.1.1ADO的9個(gè)對(duì)象
Connection對(duì)象:ADO對(duì)象模型中最高級(jí)的對(duì)象,實(shí)現(xiàn)應(yīng)用程序與數(shù)據(jù)源的連接。Command對(duì)象:主要作用是在VBA中通過(guò)SQL語(yǔ)句訪問(wèn)、查詢數(shù)據(jù)庫(kù)中的數(shù)據(jù)。Recordset對(duì)象:存儲(chǔ)訪問(wèn)表和查詢對(duì)象返回的記錄。使用該對(duì)象,可以瀏覽記錄、修改記錄、添加新的記錄或者刪除特定的記錄。Recordset對(duì)象的功能最常用、最重要5精選課件7.1.1ADO的9個(gè)對(duì)象
ADO的3個(gè)對(duì)象之間互有聯(lián)系:Command對(duì)象和Recordset對(duì)象依賴于Connection對(duì)象的連接;Command對(duì)象結(jié)合SQL命令可以取代Recordset對(duì)象,但遠(yuǎn)沒(méi)有Recordset對(duì)象靈活、實(shí)用;Recordset對(duì)象它只能實(shí)現(xiàn)數(shù)據(jù)表內(nèi)記錄集操作,無(wú)法完成表和數(shù)據(jù)庫(kù)的數(shù)據(jù)定義操作;數(shù)據(jù)定義操作一般需通過(guò)Command對(duì)象用SQL命令完成。本章用DoCmd對(duì)象代替Command對(duì)象。6精選課件7.1.2了解記錄集
記錄集(Recordset):對(duì)表執(zhí)行查詢操作時(shí),返回的一組特定記錄。用記錄集可執(zhí)行的操作:對(duì)表中的數(shù)據(jù)進(jìn)行查詢和統(tǒng)計(jì),在表中添加、更新或刪除記錄。記錄集是一個(gè)對(duì)象,它包括記錄和字段,具有其特定的屬性和方法,利用這些屬性和方法就可以編程處理數(shù)據(jù)庫(kù)中的記錄。7精選課件7.2在Access中引用ADO對(duì)象
應(yīng)用程序中的ADO引用:聲明Connection對(duì)象→創(chuàng)建Recordset對(duì)象→編程完成各種數(shù)據(jù)訪問(wèn)操作7.2.1聲明Connection對(duì)象7.2.2聲明與打開(kāi)Recordset對(duì)象7.2.3關(guān)閉Recordset和Connection對(duì)象8精選課件7.2.1聲明Connection對(duì)象
(1)聲明一個(gè)Connection對(duì)象(2)初始化Connection對(duì)象(決定Connection對(duì)
象與哪個(gè)數(shù)據(jù)庫(kù)相連接)例如:
Dim
cnGraduate
AsADODB.Connection
Set
cnGraduate=CurrentProject.Connection
與當(dāng)前數(shù)據(jù)庫(kù)連接
9精選課件7.2.2聲明與打開(kāi)Recordset對(duì)象
(1)聲明Recordset對(duì)象(2)創(chuàng)建Recordset對(duì)象實(shí)例(3)打開(kāi)Recordset對(duì)象例如:
Dim
rsStudents
AsADODB.Recordset
Set
rsStudents=NewADODB.Recordset
rsStudents.Open"研究生",cnGraduate,,,adCmdTable
前面聲明的Connection對(duì)象
表名稱
打開(kāi)的是表對(duì)象
參數(shù)占位符
10精選課件7.2.3關(guān)閉Recordset和Connection對(duì)象
方法:執(zhí)行Recordset對(duì)象和Connection對(duì)象的Close方法→將對(duì)象設(shè)置為Nothing例如:rsStudents.ClosecnGraduate.CloseSet
rsStudents=NothingSet
cnGraduate=Nothing上述語(yǔ)句不是必須的。應(yīng)用程序終止運(yùn)行時(shí),系統(tǒng)會(huì)自動(dòng)關(guān)閉并清除這兩個(gè)對(duì)象。11精選課件7.3引用記錄字段
任何對(duì)記錄集的訪問(wèn)都是針對(duì)當(dāng)前記錄進(jìn)行的。打開(kāi)記錄集時(shí)默認(rèn)的當(dāng)前記錄為第1條記錄。引用記錄的字段:直接在記錄集對(duì)象中引用字段名稱,如Code=rsStudents!學(xué)號(hào)若記錄集字段名包含空格,或者字段名是一個(gè)保留字,則引用時(shí)必須將該字段名用方括號(hào)括起來(lái)。
使用記錄集對(duì)象的Fields(n)屬性。n是記錄中字段從左到右的排列序號(hào),第一個(gè)字段的序號(hào)為0。如Code=rsStudents.Fields(0)記錄集對(duì)象與字段名間的連接符
12精選課件7.3引用記錄字段
[例7-1]建立名為ADO的模塊,編寫(xiě)如下過(guò)程。運(yùn)行該過(guò)程后,輸出對(duì)話框顯示“導(dǎo)師”表中第一位教師的編號(hào)和姓名。13精選課件7.3引用記錄字段
記錄集更多的應(yīng)用是在窗體對(duì)象上:建立一個(gè)空白窗體→設(shè)計(jì)各個(gè)控件→編程引用記錄集當(dāng)前記錄的相關(guān)字段或?qū)⒆侄蔚闹低ㄟ^(guò)控件顯示注意:如果涉及數(shù)據(jù)訪問(wèn)的事件過(guò)程不止一個(gè),可在代碼窗口的通用段定義Connection對(duì)象和Recordset對(duì)象,然后在Form_Load事件過(guò)程中完成數(shù)據(jù)庫(kù)連接和數(shù)據(jù)表的打開(kāi)。14精選課件7.3引用記錄字段
[例7-2]運(yùn)行:分別單擊“導(dǎo)師編號(hào)”和“導(dǎo)師姓名”按鈕
窗體設(shè)計(jì)視圖(刪除導(dǎo)航按鈕)
15精選課件7.3引用記錄字段
例7-2窗體程序代碼
16精選課件7.4瀏覽記錄
Recordset記錄集對(duì)象提供了4種記錄指針的移動(dòng)方法MoveFirst記錄指針移到第一條記錄MoveNext記錄指針移到當(dāng)前記錄的下一條記錄MovePrevious記錄指針移到當(dāng)前記錄的上一條記錄MoveLast記錄指針移到最后一條記錄Recordset記錄集的BOF和EOF屬性用于判斷記錄指針是否處于有記錄的正常位置記錄指針將指向最后一條記錄之后,EOF屬性為T(mén)rue記錄指針將指向第一條記錄之前,BOF屬性為T(mén)rueBOF和EOF屬性的值均為T(mén)rue,表示記錄集為空
17精選課件7.4瀏覽記錄
[例7-3]對(duì)例7-2進(jìn)行修改
增加如下事件過(guò)程代碼:
PrivateSubCommand3_Click()‘單擊“下一個(gè)記錄”按鈕rsTeacher.MoveNext
EndSub18精選課件7.4瀏覽記錄
上面的過(guò)程隱含錯(cuò)誤:移至最后一條記錄后無(wú)法再下移指針,將出現(xiàn)運(yùn)行錯(cuò)誤信息框。兩種糾正錯(cuò)誤的方法:如果記錄集的EOF屬性為T(mén)rue,就回到第一條記錄如果記錄集的EOF屬性為T(mén)rue,就回到最后一條記錄
PrivateSubCommand3_Click()‘單擊“下一個(gè)記錄”按鈕rsTeacher.MoveNextEndSub19精選課件7.4瀏覽記錄
PrivateSubCommand3_Click()
rsTeacher.MoveNextIfrsTeacher.EOFThenrsTeacher.MoveFirstEndIfEndSub方法1:若記錄集的EOF屬性為T(mén)rue,則回到首記錄方法2:若記錄集的EOF屬性為T(mén)rue,則回到末記錄PrivateSubCommand3_Click()
rsTeacher.MoveNextIfrsTeacher.EOFThenrsTeacher.MoveLastEndIfEndSub20精選課件7.4瀏覽記錄
方法2的程序還將運(yùn)行出錯(cuò)。因?yàn)镽ecordset對(duì)象有一個(gè)名為L(zhǎng)ockType的屬性,默認(rèn)值為adLockReadOnly,此時(shí)只能瀏覽記錄數(shù)據(jù),記錄的移動(dòng)方式也只能是MoveNext和MoveFirst。要實(shí)現(xiàn)記錄指針的4種移動(dòng)操作,完成記錄的添加、刪改或更新,必須在使用Open方法打開(kāi)數(shù)據(jù)表之前,將該記錄集對(duì)象的LockType屬性設(shè)置成adLockPessimistic或adLockOptimistic,如rsTeacher.LockType=adLockPessimisticrsTeacher.Open"導(dǎo)師",cnGraduate,,,adCmdTable21精選課件7.4瀏覽記錄
Recordset對(duì)象的LocyType屬性決定數(shù)據(jù)的鎖定方式:adLockReadOnly:數(shù)據(jù)處于只讀狀態(tài)。adLockPessimistic(保守式鎖定):編輯數(shù)據(jù)時(shí)即鎖定數(shù)據(jù)源記錄,直到數(shù)據(jù)編輯完成才釋放。adLockOptimistic(開(kāi)放式鎖定):編輯數(shù)據(jù)時(shí)不鎖定,用Update方法提交數(shù)據(jù)時(shí)才鎖定數(shù)據(jù)源記錄。adLockBatchOptimistic(開(kāi)放式更新):應(yīng)用于批更新模式22精選課件7.4瀏覽記錄
如果數(shù)據(jù)表中沒(méi)有記錄,即BOF和EOF同時(shí)為T(mén)rue,就不能引用表中的數(shù)據(jù)。將單擊“導(dǎo)師姓名”按鈕的事件過(guò)程改寫(xiě)如下PrivateSubCommand2_Click()IfrsTeacher.BOF=TrueAndrsTeacher.EOF=TrueThenText1.Value=""ElseText1.Value=rsTeacher!姓名EndIfEndSub同理,修改單擊“導(dǎo)師編號(hào)”按鈕的事件過(guò)程同理,修改“下一個(gè)記錄”按鈕的事件過(guò)程代碼(空表情況下記錄指針不移動(dòng))23精選課件7.5編輯數(shù)據(jù)
7.5.1用ADO記錄集的AddNew方法添加記錄7.5.2用ADO記錄集的Update方法修改記錄
7.5.3用ADO記錄集的Delete方法刪除記錄
24精選課件7.5.1用ADO記錄集的AddNew方法添加記錄添加新記錄的步驟:(1)用記錄集的AddNew方法產(chǎn)生一個(gè)空記錄(2)為空記錄的各個(gè)字段賦值(3)用記錄集的Update方法保存新記錄[例7-4]在例7-3的基礎(chǔ)上進(jìn)行修改
25精選課件7.5.1用ADO記錄集的AddNew方法添加記錄添加的程序代碼:PrivateSubCommand4_Click()DimAgeAs
BytersTeacher.MoveFirstAge=rsTeacher!年齡'讀取第一條記錄的年齡字段值
rsTeacher.AddNew
'添加一條新記錄rsTeacher!導(dǎo)師編號(hào)="107"rsTeacher!姓名="高原"rsTeacher!年齡=Age
rsTeacher.UpdateEndSub思考:什么情況下單擊“新記錄”按鈕,系統(tǒng)會(huì)提示出錯(cuò)?26精選課件7.5.2用ADO記錄集的Update方法修改記錄修改記錄的步驟:(1)將記錄指針移動(dòng)到需要修改的記錄上(2)對(duì)記錄中的相關(guān)字段的值進(jìn)行修改(3)用Update方法保存更改修改后的結(jié)果不得違反數(shù)據(jù)完整性約束
[例7-5]在模塊ADO中添加過(guò)程Update_Age:將“導(dǎo)師”表中第5條記錄的年齡字段值修改為60歲。注意設(shè)置記錄集的LockType類型27精選課件7.5.2用ADO記錄集的Update方法修改記錄SubUpdate_Age()
DimIAsByte
DimcnGraduateAsADODB.Connection
SetcnGraduate=CurrentProject.Connection
DimrsTeacherAsADODB.Recordset
SetrsTeacher=NewADODB.Recordset
rsTeacher.LockType=adLockPessimisticrsTeacher.Open"導(dǎo)師",cnGraduate,,,adCmdTable
'向下跳過(guò)4條記錄,將記錄指針指向第5條記錄ForI=1To4rsTeacher.MoveNextNextIrsTeacher!年齡=60:rsTeacher.UpdateEndSub28精選課件7.5.2用ADO記錄集的Update方法修改記錄[例7-6]在例7-4的基礎(chǔ)上進(jìn)行修改添加的程序代碼:
PrivateSubCommand5_Click()rsTeacher.MoveFirst
DoWhileNotrsTeacher.EOF
IfrsTeacher!性別="男"ThenrsTeacher!年齡=rsTeacher!年齡+1rsTeacher.UpdateEndIfrsTeacher.MoveNextLoopEndSub29精選課件7.5.3用ADO記錄集的Delete方法刪除記錄刪除記錄要慎重,因?yàn)楸粍h記錄無(wú)法恢復(fù)刪除記錄的步驟:(1)移動(dòng)到需要?jiǎng)h除的記錄上(2)用記錄集對(duì)象的Delete方法刪除當(dāng)前記錄(3)將某條記錄指定為當(dāng)前記錄刪除記錄后,Access不能自動(dòng)使下一條記錄成為當(dāng)前記錄。根據(jù)不同情況,可用MoveNext或MoveLast方法定位記錄指針。
30精選課件7.5.3用ADO記錄集的Delete方法刪除記錄[例7-7]對(duì)例7-6添加如下的單擊窗體事件過(guò)程:PrivateSubForm_Click()rsTeacher.MoveFirst
DoWhileNotrsTeacher.EOF
rsTeacher.MoveNext
LoopMsgBox"待刪除記錄不存在!"EndSub如果找到“高原”,進(jìn)行相關(guān)操作,然后退出過(guò)程轉(zhuǎn)下頁(yè)31精選課件7.5.3用ADO記錄集的Delete方法刪除記錄
IfrsTeacher!姓名="高原"ThenFlag=MsgBox("是否要?jiǎng)h除高原?",vbYesNo,"刪除確認(rèn)")IfFlag=vbYesThen
'確定刪除rsTeacher.DeleteMsgBox"記錄刪除完畢。"rsTeacher.MoveNext'刪除記錄后設(shè)定新的當(dāng)前記錄
IfrsTeacher.EOFThenrsTeacher.MoveLast
ExitSubElseIfFlag=vbNoThen
'不刪除記錄MsgBox"放棄刪除操作!",,"刪除確認(rèn)"
ExitSubEndIfEndIf如果找到“高原”,進(jìn)行相關(guān)操作,然后退出過(guò)程32精選課件7.6用ADO技術(shù)實(shí)現(xiàn)復(fù)雜查詢
[例7-8]在ADO模塊中建立Sex過(guò)程:統(tǒng)計(jì)并在輸出對(duì)話框中顯示男、女研究生人數(shù)比。要求以人數(shù)多的一方為1、放在右側(cè)、保留小數(shù)兩位。程序分析:先遍歷全部記錄,分別統(tǒng)計(jì)出男、女研究生人數(shù)。如果男生人數(shù)多于女生,則男生人數(shù)為1,女生人數(shù)改為女生人數(shù)除以男生人數(shù);反之亦然。
33精選課件7.6用ADO技術(shù)實(shí)現(xiàn)復(fù)雜查詢
SubSex()(定義對(duì)象、完成與數(shù)據(jù)庫(kù)的連接、打開(kāi)研究生表、定義變量)Student.MoveFirst
DoWhile
NotStudent.EOF'統(tǒng)計(jì)男、女研究生人數(shù)
IfStudent!性別="男"ThenBoy=Boy+1IfStudent!性別="女"ThenGirl=Girl+1Student.MoveNextLoopIfGirl<=BoyThen
'以男生人數(shù)為1MsgBox"女:男="&Format(Girl/Boy,"0.00")&":1"Else
'以女生人數(shù)為1MsgBox"男:女="&Format(Boy/Girl,"0.00")&":1"EndIfEndSub34精選課件7.6用ADO技術(shù)實(shí)現(xiàn)復(fù)雜查詢
[例7-9]略[例7-10]35精選課件7.6用ADO技術(shù)實(shí)現(xiàn)復(fù)雜查詢
PrivateSubForm_Load()MSFlexGrid1.Rows=1MSFlexGrid1.Cols=8
'以下為MsFlexGrid添加列標(biāo)題MSFlexGrid1.Row=0:MSFlexGrid1.Col=1'選定0行1列MSFlexGrid1.Value="學(xué)號(hào)"MSFlexGrid1.Col=2:MSFlexGrid1.Value="姓名"MSFlexGrid1.Col=3:MSFlexGrid1.Value="性別"MSFlexGrid1.Col=4:MSFlexGrid1.Value="入學(xué)日期"MSFlexGrid1.Col=5:MSFlexGrid1.Value="入學(xué)分?jǐn)?shù)"MSFlexGrid1.Col=6:MSFlexGrid1.Value="研究方向"MSFlexGrid1.Col=7:MSFlexGrid1.Value="導(dǎo)師編號(hào)"EndSub36精選課件7.6用ADO技術(shù)實(shí)現(xiàn)復(fù)雜查詢
PrivateSubCommand1_Click()'單擊"生成"按鈕(定義變量、定義對(duì)象、完成與數(shù)據(jù)庫(kù)的連接、打開(kāi)研究生表)Student.MoveFirst
DoWhileNotStudent.EOFForI=2ToStudent!入學(xué)分?jǐn)?shù)-1
IfStudent!入學(xué)分?jǐn)?shù)ModI=0ThenExitFor
'不是質(zhì)數(shù)NextI
IfI=Student!入學(xué)分?jǐn)?shù)Then
'如果入學(xué)分?jǐn)?shù)為質(zhì)數(shù)S=""
ForI=0To6'將當(dāng)前記錄各個(gè)字段連成一行
S=S&Student.Fields(I)&Chr(9)
NextIMSFlexGrid1.AddItem“”&vbTab&S'跳過(guò)每行左側(cè)的標(biāo)題欄
EndIfStudent.MoveNextLoopEndSub37精選課件7.7
在VBA程序中使用SQL命令
Access提供了DoCmd對(duì)象,該對(duì)象的RunSQL方法可以在VBA程序中用SQL命令直接對(duì)數(shù)據(jù)源進(jìn)行操作。RunSQL方法的格式為:DoCmd.RunSQL<SQL命令>也可以Dim<字符串變量>AsString<字符串變量>=<SQL命令>DoCmd.RunSQL<字符串變量>
<SQL命令>是一對(duì)由雙引號(hào)括起來(lái)的SQL命令38精選課件7.7
在VBA程序中使用SQL命令
7.7.1定義數(shù)據(jù)7.7.2編輯數(shù)據(jù)7.7.3實(shí)現(xiàn)數(shù)據(jù)完整性約束
7.7.4執(zhí)行查詢操作
39精選課件7.7.1定義數(shù)據(jù)1.創(chuàng)建數(shù)據(jù)表
CREATETABLE<表名>(字段名數(shù)據(jù)類型[NULL|NOTNULL]|字段名AS計(jì)算表達(dá)式[,...n])[例7-11]在SQL模塊中建立如下過(guò)程:
SubCreate_Table()
DoCmd.RunSQL"CREATETABLEStudent(姓名text(6),年齡byte,入學(xué)日期date)"EndSubSubCreate_Table()DimSqlAsString
Sql="CREATETABLEStudent(姓名text(6),年齡byte,入學(xué)日期date)"DoCmd.RunSQLSqlEndSub等價(jià)40精選課件7.7.1定義數(shù)據(jù)2.在表中增加字段
[例7-12]為Student表增加一個(gè)貨幣型的字段“學(xué)費(fèi)”
3.改變字段的類型[例7-13]修改Student表中“年齡”字段的類型SubAdd_Field()DoCmd.RunSQL"ALTERTABLEStudentADD學(xué)費(fèi)CURRENCY"EndSubSubAlter_Fields_Type()DoCmd.RunSQL"ALTERTABLEStudentALTER年齡SmallInt"EndSub如果字段的新類型與原類型不兼容將造成數(shù)據(jù)丟失
41精選課件7.7.1定義數(shù)據(jù)4.改變字段的寬度
[例7-14]更改Student表中“姓名”字段的寬度
5.刪除一個(gè)字段
[例7-15]刪除Student表中的“年齡”字段
SubDelete_Field()DoCmd.RunSQL"ALTERTABLEStudentDROP
年齡"EndSubSubAlter_Fields_Width()DoCmd.RunSQL"ALTERTABLEStudentALTER姓名text(10)"EndSub字段的寬度由大變小,有可能丟失數(shù)據(jù)
42精選課件7.7.1定義數(shù)據(jù)6.刪除一個(gè)表
[例7-16]刪除Student表
7.修改數(shù)據(jù)表名字
[例7-17]將Student表的名字更改成“學(xué)生”SubRename_Table()
DoCmd.Rename"學(xué)生",acTable,"Student"EndSubSubDelete_Table()DoCmd.RunSQL"DROPTABLEStudent"EndSub43精選課件7.7.2編輯數(shù)據(jù)1.向表中追加記錄[例7-18]在Student表中添加一條記錄SubInsert_Table()DoCmd.RunSQL"INSERTINTOStudentVALUES('李大明',35,'2003-1-15')"EndSubVALUES后的數(shù)據(jù)與表中字段的順序要一一對(duì)應(yīng)
說(shuō)明:(1)日期型常量可以放在一對(duì)單引號(hào)或一對(duì)#中。(2)如果數(shù)據(jù)是通過(guò)輸入對(duì)話框等途徑獲得,需在SQL命令中使用變量,然后用&運(yùn)算符將變量連接到SQL命令中。對(duì)于字符串變量或日期型變量,要在這些變量的兩側(cè)加上一對(duì)單引號(hào)。44精選課件7.7.2編輯數(shù)據(jù)[例7-19]通過(guò)變量為Student表添加一條記錄
SubInsert_Table_VBA()
DimS_nameAsString
DimAgeAsByte,S_dateAsDateS_name=InputBox("輸入學(xué)生姓名:")S_date=InputBox("入學(xué)日期:")Age=21DoCmd.RunSQL"INSERTINTOStudentVALUES('"&S_name&"',"&Age&",'"&S_date&"')"EndSub注意單引號(hào)和雙引號(hào)出現(xiàn)的位置
45精選課件7.7.2編輯數(shù)據(jù)2.修改表中記錄[例7-20]將“導(dǎo)師”表中“李向明”的年齡改成40
[例7-21]將“導(dǎo)師”表中所有男導(dǎo)師的年齡增加1歲SubUpdate_Table_1()DoCmd.RunSQL"UPDATE導(dǎo)師SET年齡=40WHERE姓名='李向明'"EndSub如果本例用ADO技術(shù)編程,代碼會(huì)怎樣?SubUpdate_Table_2()DoCmd.RunSQL"UPDATE導(dǎo)師SET年齡=年齡+1WHERE性別='男'"EndSub46精選課件7.7.2編輯數(shù)據(jù)3.刪除特定記錄
[例7-22]將“導(dǎo)師”表中年齡在50歲以下的記錄全部刪除
SubDelete_Record()DoCmd.RunSQL"DELETEFROM導(dǎo)師WHERE年齡<50"EndSub思考:(1)如果要求將“導(dǎo)師”表中低于年齡平均值的導(dǎo)師記錄刪除,例7-22應(yīng)怎樣修改?(2)如果要?jiǎng)h除小于X歲的所有記錄,X的值通過(guò)鍵盤(pán)在程序運(yùn)行時(shí)輸入,程序又該怎樣修改?47精選課件7.7.3實(shí)現(xiàn)數(shù)據(jù)完整性約束
1.設(shè)置主鍵[例7-23]為“導(dǎo)師”表和“研究生”表設(shè)置主鍵(如果這兩個(gè)表已有主鍵和外鍵,請(qǐng)先予以刪除)[例7-24]在創(chuàng)建新表Teacher的同時(shí)設(shè)定code為主鍵
SubCreate_Primary()DoCmd.RunSQL"AlterTable導(dǎo)師AddPrimaryKey(導(dǎo)師編號(hào))"DoCmd.RunSQL"AlterTable研究生AddPrimaryKey(學(xué)號(hào))"EndSubSubCreate_Table_Primary()DoCmd.RunSQL"CREATETABLETeacher(codetext(3)PRIMARYKEY,nametext(6),birthdaydate,salarycurrency)"EndSub48精選課件7.7.3實(shí)現(xiàn)數(shù)據(jù)完整性約束
2.設(shè)置外鍵[例7-25]將研究生表中的“導(dǎo)師編號(hào)”設(shè)為外鍵,對(duì)應(yīng)的參照表是“導(dǎo)師”表(建立“導(dǎo)師”表和“研究生”表間的關(guān)系)[例7-26]在創(chuàng)建新表Student1的同時(shí)指定其外鍵和參照表SubCreate_Foreign()DoCmd.RunSQL"AlterTable研究生AddForeignKey(導(dǎo)師編號(hào))References導(dǎo)師)"EndSubSubCreate_Table_Foreign()DoCmd.RunSQL"CreateTableStudent1(codetext(4)PrimaryKey,nametext(6),sexbit,t_codetext(3),ForeignKey(t_code)ReferencesTeacher(code))"EndSubbit表示“是/否”型變量
49精選課件7.7.4執(zhí)行查詢操作VBA程序中用SQL命令完成的數(shù)據(jù)查詢操作,無(wú)法直接將查詢結(jié)果所返回的記錄集按數(shù)據(jù)表形式顯示,解決方法:
方法1:將查詢形成的記錄集生成一個(gè)新表保存到數(shù)據(jù)庫(kù)中;然后用ADO記錄集對(duì)象打開(kāi)這個(gè)表進(jìn)行各種操作;完成后刪除這個(gè)表。方法2:將返回的記錄集看成是保存在內(nèi)存中的一個(gè)臨時(shí)表,用ADO記錄集對(duì)象直接打開(kāi)該臨時(shí)表進(jìn)行各種操作。50精選課件7.7.4執(zhí)行查詢操作[例7-27]
SubQuery1()DoCmd.RunSQL"Select姓名,職稱,年齡IntotempFrom導(dǎo)師Where職稱in('教授','副教授')"(定義對(duì)象、連接數(shù)據(jù)庫(kù)、設(shè)置記錄集LockType屬性、打開(kāi)temp表)
DoWhileNotrsTeacher.EOF
Debug.PrintrsTeacher!姓名,rsTeacher!職稱,rsTeacher!年齡rsTeacher.MoveNext
LooprsTeacher.Close'關(guān)閉記錄集對(duì)象,終止對(duì)temp的引用DoCmd.RunSQL"DropTabletemp"'刪除數(shù)據(jù)表tempEndSub刪除temp表之前必須先關(guān)閉對(duì)表的引用
職稱='教授'Or職稱='副教授'
51精選課件7.7.4執(zhí)行查詢操作[例7-28]
Sub
Query2()DimSQLAsStringSQL="SELECTt.姓名as導(dǎo)師姓名,s.姓名as學(xué)生姓名FROM導(dǎo)師t,研究生sWHEREt.導(dǎo)師編號(hào)=s.導(dǎo)師編號(hào)andt.性別='男'"(定義對(duì)象、連接數(shù)據(jù)庫(kù)、設(shè)置記錄集LockType屬性、打開(kāi)temp表)rsTeacher.OpenSQL,cnGraduate'打開(kāi)查詢記錄集DoWhileNotrsTeacher.EOFDebug.Print
rsTeacher!導(dǎo)師姓名,rsTeacher!學(xué)生姓名rsTeacher.MoveNextLoopEndSubt、s分別作為“導(dǎo)師”表和“研究生”表的別名
[例7-29]不使用SQL命令實(shí)現(xiàn)上題的功能。略52精選課件7.8訪問(wèn)當(dāng)前數(shù)據(jù)庫(kù)以外的數(shù)據(jù)庫(kù)連接另一個(gè)數(shù)據(jù)庫(kù):使用Connection對(duì)象的Open方法。語(yǔ)法格式為:
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《煤礦地質(zhì)勘探》課件
- 五年級(jí)數(shù)學(xué)(小數(shù)除法)計(jì)算題專項(xiàng)練習(xí)及答案匯編
- 四年級(jí)數(shù)學(xué)(四則混合運(yùn)算帶括號(hào))計(jì)算題專項(xiàng)練習(xí)與答案匯編
- 裝修設(shè)計(jì)服務(wù)合同
- 清潔公司改造拆舊合同范本
- 港口碼頭建設(shè)項(xiàng)目居間合同
- 2024年度浙江省公共營(yíng)養(yǎng)師之四級(jí)營(yíng)養(yǎng)師考前自測(cè)題及答案
- 2025黨支部換屆選舉工作培訓(xùn)方案
- 食品行業(yè)法規(guī)遵循與質(zhì)量保障措施
- 李芳事跡在多元文化教育中的應(yīng)用
- 安徽省淮南四中2025屆高二上數(shù)學(xué)期末統(tǒng)考模擬試題含解析
- 2025屆重慶南開(kāi)中學(xué)數(shù)學(xué)高二上期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 2024年重點(diǎn)信訪人員穩(wěn)控實(shí)施方案
- 保險(xiǎn)專題課件教學(xué)課件
- 常見(jiàn)癥狀腹痛課件
- 《生活垃圾的回收與利用》(教案)-2024-2025學(xué)年四年級(jí)上冊(cè)綜合實(shí)踐活動(dòng)教科版
- 汽車租賃行業(yè)的利潤(rùn)空間分析
- 電商代運(yùn)營(yíng)合作協(xié)議書(shū)2024年
- 2024年中考英語(yǔ)閱讀理解D篇真題匯編(附答案)0117
- 牛津上海版小學(xué)英語(yǔ)一年級(jí)上冊(cè)同步練習(xí)試題(全冊(cè))
- 多數(shù)據(jù)中心數(shù)據(jù)同步保存
評(píng)論
0/150
提交評(píng)論