第九章 VB的數(shù)據(jù)庫(kù)操作
9.1
數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí)
1.計(jì)算機(jī)數(shù)據(jù)管理技術(shù)的發(fā)展
第一階段:人工管理階段,特點(diǎn)是數(shù)據(jù)不長(zhǎng)期保存,沒(méi)有軟件系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行管理,沒(méi)有文件的概念,一組數(shù)據(jù)對(duì)應(yīng)一個(gè)程序。
第二階段:采用文件管理方式,特點(diǎn)是數(shù)據(jù)不再是程序的組成部分,而是有組織、有結(jié)構(gòu)地構(gòu)成文件形式,形成數(shù)據(jù)文件;文件管理系統(tǒng)是應(yīng)用程序與數(shù)據(jù)文件的接口。
第三階段:數(shù)據(jù)庫(kù)管理方式,特點(diǎn)是對(duì)所有數(shù)據(jù)實(shí)行統(tǒng)一、集中、獨(dú)立的管理,數(shù)據(jù)獨(dú)立于程序存在,并可以提供給各類(lèi)不同用戶使用。
2.數(shù)據(jù)庫(kù)的基本概念
(1) 數(shù)據(jù)庫(kù)(DataBase DB)
定義:是以一定的組織形式存放在計(jì)算機(jī)存儲(chǔ)介質(zhì)上的相互關(guān)聯(lián)的數(shù)據(jù)的集合。
特點(diǎn):
b
具有最小的冗余度
具有數(shù)據(jù)獨(dú)立性
實(shí)現(xiàn)數(shù)據(jù)共享
安全可靠,保密性能好
(2) 數(shù)據(jù)庫(kù)管理系統(tǒng)(DataBase Management
System DBMS)
定義:是操縱和管理數(shù)據(jù)庫(kù)的系統(tǒng)軟件。
功能:維護(hù)數(shù)據(jù)庫(kù)、接收和完成用戶程序或命令提出的訪問(wèn)數(shù)據(jù)庫(kù)的各種請(qǐng)求。
數(shù)據(jù)語(yǔ)言:z |
v數(shù)據(jù)定義語(yǔ)言(DDL): 用來(lái)建立所需的數(shù)據(jù)庫(kù)(即設(shè)計(jì)庫(kù)結(jié)構(gòu)) |
數(shù)據(jù)操作語(yǔ)言(DML): 用來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢和維護(hù)操作。 |
t數(shù)據(jù)控制語(yǔ)言(DCL): 用來(lái)控制數(shù)據(jù)的訪問(wèn)權(quán)限及事務(wù)管理。 |
關(guān)系型數(shù)據(jù)庫(kù)使用的標(biāo)準(zhǔn)語(yǔ)言是結(jié)構(gòu)化查詢語(yǔ)言(Structured Query
Language, SQL)。
(3) 數(shù)據(jù)庫(kù)系統(tǒng)(DataBase System
DBS)
定義; 以數(shù)據(jù)庫(kù)應(yīng)用為基礎(chǔ)的計(jì)算機(jī)系統(tǒng)。
組成:一個(gè)完整的數(shù)據(jù)庫(kù)系統(tǒng)由數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)、數(shù)據(jù)庫(kù)管理員和應(yīng)用程序組成。
數(shù)據(jù)庫(kù)也可以這樣劃分其組成: |
硬件:計(jì)算機(jī)硬件設(shè)備 |
軟件:數(shù)據(jù)庫(kù)管理系統(tǒng) 、操作系統(tǒng)、開(kāi)發(fā)工具、應(yīng)用程序 |
用戶:應(yīng)用程序設(shè)計(jì)員、終端用戶、數(shù)據(jù)庫(kù)管理員 |
分類(lèi) |
層次型數(shù)據(jù)庫(kù) |
網(wǎng)狀型數(shù)據(jù)庫(kù) |
網(wǎng)狀型數(shù)據(jù)庫(kù) |
分代 |
第一代 非關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng),60年代末問(wèn)世,包括層次型和網(wǎng)狀型 |
第二代 關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)(RDBS),70年代中期問(wèn)世 |
第三代 對(duì)象-關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)(ORDBS 、OOBDS),80年代中期至今 |
上述三個(gè)概念之間的聯(lián)系:在數(shù)據(jù)庫(kù)系統(tǒng)中通過(guò)數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)建立和使用數(shù)據(jù)庫(kù)。
3.數(shù)據(jù)模型
數(shù)據(jù)模型:即描述實(shí)體模型的數(shù)據(jù)。
數(shù)據(jù)模型的分類(lèi): |
層次模型(采用樹(shù)型結(jié)構(gòu)) |
網(wǎng)絡(luò)模型(采用無(wú)向圖型結(jié)構(gòu)) |
關(guān)系模型(采用二維表結(jié)構(gòu)) |
關(guān)系模型的性質(zhì):
|
二維表的記錄數(shù)隨數(shù)據(jù)的增加而改變,但其字段數(shù)是相對(duì)固定的 |
二維表中的每一列均有唯一的字段名 |
二維表中不允許出現(xiàn)完全相同的兩行 |
二維表中行的順序、列的順序均可以任意交換 |
4. 關(guān)系型數(shù)據(jù)庫(kù)的基本結(jié)構(gòu)
關(guān)系型數(shù)據(jù)庫(kù)的基本結(jié)構(gòu)是一張二維表,包括以下概念:
(1) 記錄(Record):數(shù)據(jù)表中的每一行數(shù)據(jù)
(2) 字段(Field):數(shù)據(jù)表中的每一列,表頭(第一行)的內(nèi)容為字段名
(3) 數(shù)據(jù)表(Table):相關(guān)數(shù)據(jù)組成的二維表格
(4) 數(shù)據(jù)庫(kù)(Database):相關(guān)數(shù)據(jù)表的集合
(5) 關(guān)系(Relation):相關(guān)表之間通過(guò)相關(guān)聯(lián)的字段建立的聯(lián)系。
(6) 索引(Index):指按表文件中某個(gè)關(guān)鍵字段或表達(dá)式建立記錄的邏輯順序。它是由一系列記錄號(hào)組成的一個(gè)列表,目的是提供對(duì)數(shù)據(jù)的快速訪問(wèn)。索引不改變表中記錄的物理順序。
索引關(guān)鍵字(索引表達(dá)式):用來(lái)建立索引的一個(gè)字段或字段表達(dá)式。
ngf 數(shù)據(jù)庫(kù)和數(shù)據(jù)表可以通過(guò)數(shù)據(jù)庫(kù)管理系統(tǒng)軟件來(lái)建立,如:Access,Visual FoxPro,SQL Server 、Sybase、 Oracle。在VB環(huán)境下可以直接建立Access數(shù)據(jù)庫(kù)。
關(guān)系型數(shù)據(jù)表的特點(diǎn):(1)每一個(gè)字段不可再分解,也不能有名字相同的字段;
hgfhgfyh(2)每一列中的數(shù)據(jù)都有相同的數(shù)據(jù)類(lèi)型;
hfyftytfyyy(3)表中沒(méi)有內(nèi)容完全相同的行(記錄)。
5.查詢的概念
查詢(query):從相關(guān)數(shù)據(jù)表中選取符合特定要求的數(shù)據(jù)。
創(chuàng)建方法:可以通過(guò)查詢生成器創(chuàng)建一個(gè)查詢,也可以在SQL窗口直接用SELECT—SQL命令寫(xiě)出查詢。
9.2
數(shù)據(jù)庫(kù)管理器
1. 數(shù)據(jù)庫(kù)管理器介紹
在VB中可以通過(guò)“外接程序”菜單中的“可視化數(shù)據(jù)管理器”調(diào)出“VisData”數(shù)據(jù)庫(kù)管理器窗口。
菜單選項(xiàng)
|
功能描述
|
文件
|
打開(kāi)數(shù)據(jù)庫(kù)
|
打開(kāi)指定的數(shù)據(jù)庫(kù)
|
新建
|
根據(jù)所選類(lèi)型建立新數(shù)據(jù)庫(kù)
|
導(dǎo)入/導(dǎo)出
|
從其他數(shù)據(jù)庫(kù)導(dǎo)入數(shù)據(jù)表,或?qū)С鰯?shù)據(jù)表及SQL查詢結(jié)果
|
工作空間
|
顯示注冊(cè)對(duì)話框注冊(cè)新工作空間,用新輸入的用戶名和密碼從新的工作空間重新打開(kāi)當(dāng)前數(shù)據(jù)庫(kù)。
|
壓縮MDB
|
壓縮指定的Access數(shù)據(jù)庫(kù),創(chuàng)建一個(gè)加密或解密文件。
|
修復(fù)MDB
|
修復(fù)指定的Access數(shù)據(jù)庫(kù)
|
實(shí)用程序
|
查詢生成器
|
建立、查看、執(zhí)行和存儲(chǔ)SQL查詢
|
數(shù)據(jù)窗口設(shè)計(jì)器
|
創(chuàng)建數(shù)據(jù)窗體并將其添加到VB工程中
|
全局替換
|
創(chuàng)建SQL表達(dá)式并更新所選數(shù)據(jù)表中滿足條件的記錄
|
附加
|
顯示當(dāng)前Access數(shù)據(jù)庫(kù)中所有附加數(shù)據(jù)表及連接條件
|
用戶組/用戶
|
查看和修改用戶組、用戶、權(quán)限等設(shè)置
|
System.mda
|
創(chuàng)建System.mda文件,以便為每個(gè)文件設(shè)置安全機(jī)制
|
性能選項(xiàng)
|
設(shè)置超時(shí)值
|
2. 建立數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)的基本操作: |
創(chuàng)建數(shù)據(jù)表:
|
設(shè)計(jì)表名和表結(jié)構(gòu) |
輸入記錄 |
建立索引 |
數(shù)據(jù)維護(hù):
|
增加記錄 |
修改記錄 |
刪除記錄 |
創(chuàng)建數(shù)據(jù)表的主要步驟: 設(shè)計(jì)表結(jié)構(gòu) →
輸入記錄 → 建立索引 → 數(shù)據(jù)維護(hù)
(1)設(shè)計(jì)表結(jié)構(gòu)
啟動(dòng)可視化數(shù)據(jù)管理器 → 在database窗口中右擊,從菜單中選擇“新表” → 在表結(jié)構(gòu)窗口中輸入表名→ 添加字段 → 確定字段名稱(chēng)和屬性、有效性規(guī)則 → 建立索引 →生成表結(jié)構(gòu)。
“添加字段”對(duì)話框各選項(xiàng)說(shuō)明
選項(xiàng)名
|
描述
|
名稱(chēng)
|
即每個(gè)字段的名字(對(duì)所用字符沒(méi)有什么限制)
|
類(lèi)型
|
指該字段的數(shù)據(jù)特征,包括:Boolean、Byte、Integer、Long、Currency、Single、Double、Date/Time、Text、Binary(二進(jìn)制型,存放圖片)、Memo(備注型,存放長(zhǎng)文本)
|
大小
|
字段寬度,指該字段所能容納數(shù)據(jù)的的最大字節(jié)數(shù)
|
固定字段
|
字段寬度固定不變
|
可變字段
|
字段寬度可變
|
允許零長(zhǎng)度
|
表示空字符串可作為有效的字段值
|
必要的
|
表示該字段值不可缺少
|
順序位置
|
字段在表中的順序位置
|
驗(yàn)證文本
|
當(dāng)向表中輸入無(wú)效值時(shí)系統(tǒng)顯示的提示信息
|
驗(yàn)證規(guī)則
|
驗(yàn)證輸入字段值的簡(jiǎn)單規(guī)則,目的是使所輸數(shù)據(jù)符合設(shè)定的條件
|
默認(rèn)值
|
在輸入時(shí)設(shè)置的字段初始值,以減少輸入重復(fù)性數(shù)據(jù)時(shí)的工作量
|
(2)輸入記錄
在database窗口中選中表名并右擊,從菜單中選擇“打開(kāi)” →在數(shù)據(jù)表窗口輸入記錄(注意窗口樣式)→ 單擊“新增”→ 在窗口中輸入記錄并“更新” →重復(fù)……
(3) 維護(hù)記錄
在database窗口中選中表名并右擊,從菜單中選擇“打開(kāi)” →單擊“編輯”/“刪除”/“新增”,即可完成對(duì)記錄的修改、刪除、添加操作。
3. 建立查詢
建立查詢就是在數(shù)據(jù)表中找到符合特定條件的記錄并組成一張新表。
在database窗口中選中表名并右擊,從菜單中選擇“新查詢” →在查詢生成器中構(gòu)造查詢條件→單擊“運(yùn)行” →單擊“保存”,給出查詢結(jié)果文件名→“關(guān)閉”。
查詢生成器說(shuō)明
各選項(xiàng)
|
描述
|
查詢表達(dá)式
|
設(shè)置查詢應(yīng)該滿足的基本條件,可以用and /or來(lái)設(shè)置應(yīng)滿足的多個(gè)條件
|
表/字段名
|
設(shè)置查詢結(jié)果中將顯示的字段名,單擊一個(gè)加亮便選中了
|
前百分之幾條
|
只顯示查詢結(jié)果中的前若干條記錄
|
前N條記錄
|
只顯示查詢結(jié)果中的前N條記錄
|
“運(yùn)行”按鈕
|
執(zhí)行查詢命令,并顯示出查詢結(jié)果
|
“顯示”按鈕
|
用消息框顯示SQL命令
|
“復(fù)制”按鈕
|
將SQL命令復(fù)制到SQL窗口
|
“保存”按鈕
|
將查詢結(jié)果取個(gè)名并保存到數(shù)據(jù)庫(kù)中
|
“清除”按鈕
|
清除條件列表框中的查詢條件
|
分組條件
|
將查詢結(jié)果分組,一般每組只有一個(gè)記錄
|
排序條件
|
將查詢結(jié)果按順序顯示出來(lái),ASC(升序)、DESC(降序)
|
連接條件
|
設(shè)置相關(guān)表之間的連接字段
|
9.3
數(shù)據(jù)控件
1. 數(shù)據(jù)控件的建立
從VB工具箱中單擊Data控件,在窗體上畫(huà)出數(shù)據(jù)控件即可。
2. 數(shù)據(jù)控件的屬性
屬性名稱(chēng)
|
作用
|
Connect
|
指定數(shù)據(jù)控件所要連接的數(shù)據(jù)庫(kù)類(lèi)型,VB默認(rèn)的是Access的MDB數(shù)據(jù)庫(kù),也可以連接DBF、XLS、ODBC等數(shù)據(jù)庫(kù)
|
DatabaseName
|
指定具體使用的數(shù)據(jù)庫(kù)文件名,包括路徑名
|
RecordSource
|
指定具體可訪問(wèn)的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成記錄集對(duì)象Recordset對(duì)象,可以是數(shù)據(jù)庫(kù)中的單個(gè)表名、一個(gè)存儲(chǔ)查詢,也可以是SQL查詢命令
|
RecordsetType
|
確定記錄集類(lèi)型,有三種:
0——Table(表);
1——Dynaset(動(dòng)態(tài),默認(rèn)的) ;2——Snapshot(快照)
|
BofAction
|
當(dāng)記錄指針指向記錄集的開(kāi)始時(shí),確定數(shù)據(jù)控件該采取的操作:
0——控件重定位到第一個(gè)記錄
1——移過(guò)記錄集開(kāi)始位,定位到一個(gè)無(wú)效記錄,觸發(fā)數(shù)據(jù)控件對(duì)第一個(gè)記錄的無(wú)效事件Validate
|
EofAction
|
當(dāng)記錄指針指向記錄集的結(jié)束時(shí),確定數(shù)據(jù)控件該采取的操作:
0——控件重定位到最后一個(gè)記錄
1——移過(guò)記錄集結(jié)束位,定位到一個(gè)無(wú)效記錄,觸發(fā)數(shù)據(jù)控件對(duì)最后一個(gè)記錄的無(wú)效事件Validate
2——向記錄集加入新的空記錄,可以對(duì)新記錄進(jìn)行編輯,移動(dòng)記錄指針新記錄寫(xiě)入數(shù)據(jù)庫(kù)
|
綁定控件、數(shù)據(jù)控件、數(shù)據(jù)庫(kù)之間的關(guān)系:
綁定控件的屬性:
DataSource——通過(guò)一個(gè)有效的數(shù)據(jù)控件連接到一個(gè)數(shù)據(jù)庫(kù)上。
DataField——將數(shù)據(jù)庫(kù)中的有效字段連接到綁定控件上。
除了常規(guī)控件外,可以與Data數(shù)據(jù)控件綁定的控件有:
控件名稱(chēng)
|
部件名稱(chēng)
|
常用屬性
|
MSFlexGrid
|
Microsoft FlexGrid
Control 6.0(OLE DB)
|
DataSourse
|
DBCombo
|
Microsoft Data Bound List
Controls 6.0
|
DataField、DataSource、ListField、RowSource、BoundColumn
|
DBList
|
DBGrid
|
Microsoft Data Bound Grid
Control 5.0(SP3)
|
DataSourse
|
3. 數(shù)據(jù)控件的事件
事件名稱(chēng)
|
觸發(fā)時(shí)間
|
Reposition
|
發(fā)生在一條記錄成為當(dāng)前記錄后。只要將記錄指針從一條記錄移動(dòng)到另一條記錄就會(huì)觸發(fā)。
|
Validate
|
在一條不同的記錄成為當(dāng)前記錄之前,Update 方法之前(用
UpdateRecord 方法保存數(shù)據(jù)時(shí)除外);以及
Delete、Unload 或 Close
操作之前會(huì)發(fā)生該事件。它檢查被數(shù)據(jù)控件綁定的控件內(nèi)的數(shù)據(jù)是否發(fā)生變化。
語(yǔ)法:Private Sub
Data_Validate(Action As Integer, Save As Integer) …… End
Sub
|
Validate事跡的 Action參數(shù)
Action值
|
描述
|
Action值
|
描述
|
0
|
取消對(duì)數(shù)據(jù)控件的操作
|
6
|
Update 操作
|
1
|
MoveFirst 方法
|
7
|
Delete 方法
|
2
|
MovePrevious 方法
|
8
|
Find 方法
|
3
|
MoveNext 方法
|
9
|
設(shè)置Bookmark
屬性
|
4
|
MoveLast 方法。
|
10
|
Close 的方法
|
5
|
AddNew 方法
|
11
|
卸載窗體
|
4. 數(shù)據(jù)控件的常用方法
方法名稱(chēng)
|
作用
|
示例
|
Refresh
|
激活數(shù)據(jù)控件,使各用戶對(duì)數(shù)據(jù)庫(kù)的操作有效。
|
Data1.Refresh
|
UpdateControls
|
將數(shù)據(jù)從數(shù)據(jù)庫(kù)中重新讀到數(shù)據(jù)控件綁定的控件內(nèi),通過(guò)它可以終止用戶對(duì)綁定控件內(nèi)數(shù)據(jù)的修改。
|
放棄修改按鈕代碼:
Data1.
UpdateControls
|
UpdateRecord
|
強(qiáng)制數(shù)據(jù)控件將綁定控件內(nèi)的數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)中,不再觸發(fā)Validate事件
|
確認(rèn)修改按鈕代碼:
Data1.
UpdateRecord
|
5. 記錄集的屬性與方法
名稱(chēng)
|
作用
|
屬性
|
AbsolutePostion
|
返回當(dāng)前指針值,如果是第一條記錄,其值為0;是只讀屬性
|
Bof / Eof
|
Bof判斷記錄指針是否在首記錄之前,若是則為True;Eof判斷記錄指針是否在末記錄之后,若是則為True
|
Bookmark
|
用于設(shè)置或返回當(dāng)前指針的標(biāo)簽,可以用在在程序中重定位記錄集的指針,其值采用字符串類(lèi)型。
|
NoMatch
|
在記錄集中進(jìn)行查找時(shí),如果找到相匹配的記錄,則為Falue,找不到則為True。
|
RecordCount
|
對(duì)Recordset對(duì)象中的記錄記數(shù),為了準(zhǔn)確起見(jiàn),在記數(shù)前用MoveLast方法將記錄指針移到最后一條記錄上;是只讀屬性。
|
方法
|
Move
|
用于移動(dòng)記錄指針,共有5種方法:
MoveFirst——將指針移到第1條記錄
MoveLast——將指針移到最后一條記錄
MoveNext——將指針移到下一條記錄
MovePrevious——將指針移到上一條記錄
Move n——將指針向前或向后移動(dòng)n條記錄
|
Find
|
在指定的Dynaset或
Snapshop類(lèi)型的Recordset對(duì)象中查找與指定條件相符的一條記錄,并使之成為當(dāng)前記錄,共有4種方法:
FindFirst——從記錄集的開(kāi)始查找滿足條件的第1條記錄
FindLast——從記錄集的尾部向前查找滿足條件的第1條記錄
FindNext——從當(dāng)前記錄開(kāi)始查找滿足條件的下一條記錄
FindPrevious——從當(dāng)前記錄開(kāi)始查找滿足條件的上一條記錄
語(yǔ)法格式舉例:
Data1.Recordset.FindFirst "課程名='計(jì)算機(jī)基礎(chǔ)'
"
Find方法支持通配符,默認(rèn)情況下忽略大小寫(xiě),可以添加說(shuō)明改變默認(rèn)設(shè)置:
Option Compare Text (與大小寫(xiě)無(wú)關(guān))
Option Compare Binary (與大小寫(xiě)有關(guān))
如果找不到相匹配的記錄,當(dāng)前記錄保持在查找的始發(fā)處;如果找到了,則指針定位到該記錄。
|
Seek
|
使用該方法必需打開(kāi)表的索引,它在Table表中查找與指定索引規(guī)則相符的第一條記錄,并使其成為當(dāng)前記錄。
語(yǔ)法格式舉例:
Data1.Recordset.Index= "課程名"
Data1.Recordset.Seek "=",
"計(jì)算機(jī)基礎(chǔ)"
|
6. 利用數(shù)據(jù)控件對(duì)數(shù)據(jù)庫(kù)進(jìn)行增、刪、改操作
操作項(xiàng)目
|
操作方法
|
注意事項(xiàng)
|
增加記錄
|
1) 調(diào)用AddNew方法:Data1.Recordset.
AddNew
2) 給各字段賦值:Recordset.Fields("字段名")=值或在綁定控件中直接輸入內(nèi)容
3) 調(diào)用Update方法,將緩沖區(qū)內(nèi)的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù):
Data1.Recordset. Update
4) 調(diào)用MoveLast方法顯示新記錄:
Data1.Recordset.
MoveLast
|
如果缺少第3)步而將指針移動(dòng)到其他記錄或關(guān)閉了記錄,則所做的輸入全部丟失;若沒(méi)有第4)步。雖然加入了新記錄,但記錄指針自動(dòng)返回到添加新記錄前的位置上,并不顯示新記錄。
|
刪除記錄
|
1) 定位被刪除記錄使之成為當(dāng)前記錄(用Move或Find方法)
2) 調(diào)用Delete方法:Data1.Recordset.
Delete
3) 調(diào)用MoveNext方法移動(dòng)記錄指針
|
使用Delete方法時(shí),當(dāng)前記錄立即刪除,但被數(shù)據(jù)庫(kù)約束的綁定控件仍舊顯示該記錄的內(nèi)容,故必須用第3)步刷新綁定控件。
|
修改記錄
|
1) 調(diào)用Edit方法:Data1.Recordset.
Edit
2) 給各字段賦值:在綁定控件中直接修改
3) 調(diào)用Update方法,確定所做的修改:
Data1.Recordset. Update
|
如果要放棄對(duì)數(shù)據(jù)的所有修改,可在第3)步之前用Refresh方法,重讀數(shù)據(jù)庫(kù),刷新記錄。
|
9.4
ADO數(shù)據(jù)控件
1. 什么是ADO?
ADO(ActiveX Data Object)數(shù)據(jù)訪問(wèn)接口是微軟處理數(shù)據(jù)庫(kù)信息的最新技術(shù),它是一種ActiveX對(duì)象,采用了OLE DB(動(dòng)態(tài)連接與嵌入數(shù)據(jù)庫(kù))的數(shù)據(jù)訪問(wèn)模式,是數(shù)據(jù)訪問(wèn)對(duì)象DAO、遠(yuǎn)程數(shù)據(jù)對(duì)象RDO和開(kāi)放式數(shù)據(jù)庫(kù)互連ODBC三種方式的擴(kuò)展。
要使用ADO對(duì)象必需先為當(dāng)前工程引用ADO對(duì)象庫(kù),方法是: 執(zhí)行“工程”菜單中的“引用”命令,在對(duì)話框中選中“Microsoft ActiveX Data Object 2.0 Library”。
ADO對(duì)象描述
對(duì)象名
|
描述
|
Connection
|
連接數(shù)據(jù)來(lái)源
|
Command
|
從數(shù)據(jù)源獲取所需數(shù)據(jù)的命令信息
|
Recordset
|
所獲取的一組記錄組成的記錄集
|
Error
|
在訪問(wèn)數(shù)據(jù)庫(kù)時(shí),由數(shù)據(jù)源所返回的錯(cuò)誤信息
|
Parameter
|
與命令對(duì)象相關(guān)的參數(shù)
|
Field
|
包含了記錄集中某個(gè)字段的信息
|
2.使用ADO數(shù)據(jù)控件
(1) 添加ADO數(shù)據(jù)控件
從“工程”菜單中選擇“部件”命令,在對(duì)話框中選中“Microsoft ADO Data ControlS 6.0(OLE DB)”,將其添加到工具箱,并在窗體上拖劃出ADO數(shù)據(jù)控件。
(2) ADO數(shù)據(jù)控件的基本屬性
屬性名
|
作用
|
ConnectionString
|
用來(lái)與數(shù)據(jù)庫(kù)建立連接,它包括4個(gè)參數(shù):
Provide——指定數(shù)據(jù)源的名稱(chēng)
FileName——指定數(shù)據(jù)源所對(duì)應(yīng)的文件名
RemoteProvide——在遠(yuǎn)程數(shù)據(jù)服務(wù)器打開(kāi)一個(gè)客戶端時(shí)所用的數(shù)據(jù)源名稱(chēng)
RemoteServer——在遠(yuǎn)程數(shù)據(jù)服務(wù)器打開(kāi)一個(gè)主機(jī)端時(shí)所用的數(shù)據(jù)源名稱(chēng)
|
RecordSource
|
確定具體可訪問(wèn)的數(shù)據(jù),可以是數(shù)據(jù)庫(kù)中的單個(gè)表名、一個(gè)存儲(chǔ)查詢或一個(gè)SQL查詢字符串
|
ConnectionTimeout
|
設(shè)置數(shù)據(jù)連接的超時(shí)時(shí)間,若在指定時(shí)間內(nèi)連接不成功則顯示超時(shí)信息
|
MaxRecords
|
確定從一個(gè)查詢中最多能返回的記錄數(shù)
|
(3) ADO數(shù)據(jù)控件的屬性設(shè)置
1)先在窗體上放置一個(gè)ADO數(shù)據(jù)控件
2)在ADO屬性窗口中單擊ConnectionString屬性右邊的…按鈕,從對(duì)話框中選擇連接數(shù)據(jù)源的方式:
使用連接字符串——單擊“生成”按鈕,通過(guò)選項(xiàng)設(shè)置系統(tǒng)自動(dòng)產(chǎn)生連接字符串
使用Data
Link文件——通過(guò)一個(gè)連接文件來(lái)完成
使用ODBC數(shù)據(jù)資源名稱(chēng)——在下拉列表中選擇某個(gè)創(chuàng)建好的數(shù)據(jù)源名稱(chēng)作為數(shù)據(jù)來(lái)源對(duì)遠(yuǎn)程數(shù)據(jù)庫(kù)進(jìn)行控制。
3)在ADO屬性窗口中單擊RecordSource屬性右邊的…按鈕,在“命令類(lèi)型”中選擇2——adCmdTable,在“表或存儲(chǔ)過(guò)程名稱(chēng)”中選擇所需要的表。
以上2)、3)可以合并成一步:在ADO控件上單擊右鍵,從快捷菜單中選擇ADODC屬性,直接在屬性頁(yè)對(duì)話框中進(jìn)行所有設(shè)置。
(4) ADO數(shù)據(jù)控件的方法和事件
與Data數(shù)據(jù)控件完全相同。
(5) 在ADO上新增綁定控件
可以從“工程”的“部件”中添加如下綁定控件:
控件名稱(chēng)
|
部件名稱(chēng)
|
常用屬性
|
DataGrid
|
Microsoft DataGrid Control
6.0(OLE DB)
|
DataSource
|
DataCombo
|
Microsoft DataList Controls
6.0(OLE DB)
|
DataField、DataSource、ListField、RowSource、BoundColumn
|
DataList
|
MSChart
|
Microsoft Chart Control
6.0(OLE DB)
|
DataSource
|
3. 使用數(shù)據(jù)窗體向?qū)?/span>
從“外接程序”菜單中選擇“外接程序管理器”,在對(duì)話框中選中VB6數(shù)據(jù)窗體向?qū)В?#8220;加載”并“確定”,再?gòu)?#8220;外接程序”菜單中選擇“數(shù)據(jù)窗體向?qū)?#8221;,然后根據(jù)系統(tǒng)提示逐步操作即可創(chuàng)建所需要的數(shù)據(jù)窗體,系統(tǒng)自動(dòng)把所創(chuàng)建的窗體加到工程中。
9.5
結(jié)構(gòu)化查詢語(yǔ)言
1.SQL的基本組成
SQL語(yǔ)言由命令、子句、運(yùn)算、函數(shù)等組成:
(1) SQL命令
命令
|
功能
|
CREATE
|
用于建立新的數(shù)據(jù)表結(jié)構(gòu)
|
DROP
|
用于刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)表及其索引
|
ALTER
|
用于修改數(shù)據(jù)表結(jié)構(gòu)
|
SELECT
|
用于查找符合特定條件的某些記錄
|
INSERT
|
用于向數(shù)據(jù)表中加入數(shù)據(jù)
|
UPDATE
|
用于更新特定記錄或字段的數(shù)據(jù)
|
DELETE
|
用于刪除記錄
|
(2) SQL子句
子句
|
功能
|
FROM
|
用于指定數(shù)據(jù)所在的數(shù)據(jù)表
|
WHERE
|
用于指定數(shù)據(jù)需要滿足的條件
|
GROUP BY
|
將選定的記錄分組
|
HAVING
|
用于說(shuō)明每個(gè)群組需要滿足的條件
|
ORDER BY
|
用于確定排序依據(jù)
|
INTO
|
查詢結(jié)果去向
|
(3) SQL運(yùn)算符
邏輯運(yùn)算符
|
And (與)、 Or(或)、
Not(非)
|
比較運(yùn)算符
|
< <=
> >= =
<>
|
(4) SQL函數(shù)
AVG
|
COUNT
|
SUM
|
MAX
|
MIN
|
求平均值
|
計(jì)數(shù)
|
求和
|
求最大值
|
求最小值
|
2. SQL語(yǔ)句的應(yīng)用
語(yǔ)句功能
|
語(yǔ)法格式
|
建立數(shù)據(jù)表
|
CREATE TABLE 數(shù)據(jù)表名
(字段名1
數(shù)據(jù)類(lèi)型(長(zhǎng)度), 字段名2
數(shù)據(jù)類(lèi)型(長(zhǎng)度),……)
舉例:create table student(xh text(9),
xm text(8) , cj single(4), nl integer(2))
建立含有xh、xm、cj、nl 4個(gè)字段的student表
|
添加字段
|
ALTER
TABLE 數(shù)據(jù)表名 ADD COLUMN 字段名
數(shù)據(jù)類(lèi)型(長(zhǎng)度)
舉例:alter table student add column
xb text(2) '在學(xué)生表中添加性別字段
|
刪除字段
|
ALTER
TABLE 數(shù)據(jù)表名 DROP COLUMN 字段名
舉例: alter table student drop
column nl '將學(xué)生表中的年齡字段刪除
|
數(shù)據(jù)查詢
|
SELECT 字段名表 FROM 子句 WHERE 子句 GROUP BY
子句HAVING 子句 ORDER BY 子句 INTO 子句
舉例:select xh, xm from student
where xb="男" order by xh
從學(xué)生表中查詢性別為男的學(xué)生,顯示其學(xué)號(hào)和姓名并使結(jié)果按學(xué)號(hào)升序排列。
|
添加記錄
|
INSERT INTO 數(shù)據(jù)表名(字段名1,字段名2……) VALUES(數(shù)據(jù)1,數(shù)據(jù)2……)
舉例:insert into student (xh, xm, xb)
values("015200101", "王小二", "男")
|
刪除記錄
|
DELETE FROM 數(shù)據(jù)表名
WHERE 條件表達(dá)式
舉例:delete from student where
xb="男"
|
更新記錄
|
UPDATE 數(shù)據(jù)表名 SET 新數(shù)據(jù)值 WHERE 條件表達(dá)式
舉例:update student set cj=cj+5
where xb="女"
|
9.6
報(bào)表制作
1. 報(bào)表的概念
利用報(bào)表可以把數(shù)據(jù)表中的數(shù)據(jù)按一定的格式輸出到屏幕上或打印到紙上。
2. 制作報(bào)表的方法
在VB6.0中可以利用報(bào)表設(shè)計(jì)器來(lái)制作報(bào)表,從“工程”中選擇“添加data report”,將報(bào)表設(shè)計(jì)器加入到當(dāng)前工程中,報(bào)表由5部分組成:
報(bào)表標(biāo)頭——每份報(bào)表只有一個(gè),可以用標(biāo)簽建立報(bào)表名。
頁(yè)標(biāo)頭——每頁(yè)有一個(gè),即每頁(yè)的表頭,如字段名。
細(xì)節(jié)——需要輸出的具體數(shù)據(jù),一行一條記錄。
頁(yè)腳注——每頁(yè)有一個(gè),如頁(yè)碼。
報(bào)表腳注——每份報(bào)表只有一個(gè),可以用標(biāo)簽建立對(duì)本報(bào)表的注釋、說(shuō)明。
使用報(bào)表設(shè)計(jì)器處理的數(shù)據(jù)需要利用數(shù)據(jù)環(huán)境設(shè)計(jì)器創(chuàng)建與數(shù)據(jù)庫(kù)的連接, 從“工程”菜單中選擇 “添加Data Enviroment”,在連接中選擇指定的數(shù)據(jù)庫(kù)文件,完成與數(shù)據(jù)庫(kù)的連接,然后產(chǎn)生Command對(duì)象連接數(shù)據(jù)庫(kù)內(nèi)的表。
制作報(bào)表的步驟:
(1) 新建工程,在窗體上放置兩個(gè)命令按鈕;
(2) 從“工程”菜單中“添加Data Enviroment”,右擊Connection1,在屬性中選擇“Microsoft Jet
4 OLE DB Provider”,在“連接”中指定數(shù)據(jù)庫(kù);
(3) 再次右擊Connection1,選則“添加命令”,創(chuàng)建Command1對(duì)象,右擊Command1,在屬性中設(shè)置該對(duì)象連接的數(shù)據(jù)源為需要打印的數(shù)據(jù)表;
(4) 在從“工程”菜單中“添加Data Report”,在屬性窗口中設(shè)置DataSource為數(shù)據(jù)環(huán)境DataEnviroment1對(duì)象,DataMember為Command1對(duì)象,即指定數(shù)據(jù)報(bào)表設(shè)計(jì)器DataReport1的數(shù)據(jù)來(lái)源;
(5) 將數(shù)據(jù)環(huán)境設(shè)計(jì)器中Command1對(duì)象內(nèi)的字段拖到數(shù)據(jù)報(bào)表設(shè)計(jì)器的細(xì)節(jié)區(qū);
(6) 利用標(biāo)簽控件在報(bào)表標(biāo)頭區(qū)插入報(bào)表名,在頁(yè)標(biāo)頭區(qū)設(shè)置報(bào)表每一頁(yè)頂部的標(biāo)題;
(7) 利用線條控件在報(bào)表內(nèi)加入直線,利用圖形控件和形狀控件加入圖案或圖形;
(8) 利用DataReport1對(duì)象的Show方法顯示報(bào)表,在窗體Click事件加代碼:DataReport1.Show;
(9) 利用預(yù)覽窗口按打印按鈕可以打印報(bào)表;
(10) 利用預(yù)覽窗口工具欄上的導(dǎo)出按鈕可以將報(bào)表內(nèi)容輸出成文本文件或Html文件;也可以利用DataReport1對(duì)象的ExportReport方法將報(bào)表內(nèi)容輸出成文本文件或Html文件。
制作報(bào)表的簡(jiǎn)單方法是從“外接程序”中選擇報(bào)表向?qū)?lái)設(shè)計(jì)報(bào)表。
9.7
MIS系統(tǒng)設(shè)計(jì)示例
學(xué)生成績(jī)管理系統(tǒng)的設(shè)計(jì)
1. 建立工程文件
2. 設(shè)計(jì)系統(tǒng)主界面,驗(yàn)證用戶身份
3. 建立Access數(shù)據(jù)庫(kù),輸入若干記錄
4. 設(shè)計(jì)帶菜單的主窗體,把其他窗體組織起來(lái)
5. 根據(jù)需要完成系統(tǒng)功能,設(shè)計(jì)帶數(shù)據(jù)控件的各種窗體
6. 調(diào)試、修改
7. 生成EXE文件