• 沒有找到結果。

關聯式資料庫(Relational Database)

N/A
N/A
Protected

Academic year: 2022

Share "關聯式資料庫(Relational Database)"

Copied!
90
0
0

加載中.... (立即查看全文)

全文

(1)

Visual Basic 程式設計 資料庫

資料庫基本觀念簡介 資料表建立

資料庫元件及資料感知元件使用

(2)

基本觀念

資料庫(database):一群相關的資料(data) 資料庫管理系統:用來維護、管理資料庫 的軟體

„ Access

„ SQL Server

„ MySQL

„ ……

資料庫

資料庫管理系統 應用程式

(3)

關聯式資料庫(Relational Database)

目前最常用的資料庫形式 兩大元素

„ 表格(table)

„ 關聯(relation)

(4)

表格 (table)

Table:Employee

代號 姓名 部門 薪資 部門位置 00001 李小輝 A001 10000 台北

00002 連阿戰 A001 8000 台北 00003 陳阿扁 A002 11000 高雄

Row

Primary Key Schema

(5)

表格 (cont.)

Row:又稱recordÆ一筆記錄 Column:又稱attributeÆ欄位

Primary key:用來區分不同的記錄

„ 代碼、身份證號碼……

Schema:用來描述每個欄位的規格

„ 字元、數字……

„ 可否重覆

(6)

表格 (cont.)

Universal table:

„ 把所有的東西都放在同一個表格中

缺點:

„ 資料重覆量大

„ 更新速度慢

代碼 姓名 姓別 住址 電話 部門 部門 位置

部門 電話

(7)

正規化 (Normalization)

將相關的欄位組成一個table

相關的表格用關聯(relation)連接

„ 相連的表格有數量對應關係

代碼 姓名 姓別 住址 電話 部門

部門 部門位置 部門電話

1

(8)

Visual Basic 程式設計 資料庫

資料庫基本觀念簡介 資料表建立

資料庫元件及資料感知元件使用

(9)

資料庫與資料表

一個Access資料庫(Database)是由一個或多個資料 表(Table)所組成。而每個資料表又由一些相關的資 料欄(Data Field)組成,每個資料欄都配合要存放 的資料性質與大小,而有其資料型態(Data Type),

如下:

(10)

建立資料庫

(11)

建立資料庫 (cont.)

1. 執行【增益集/資料庫管理員】指令。

(12)

建立資料庫 (cont.)

2.出現「資料庫管理員」視窗,再執行【檔案/新 增/Microsoft Access/Version 7.0MDB】指令。

(13)

建立資料庫 (cont.)

3.出現下圖的對話方塊,再在「儲存於」方塊選取(或 新增)要建立資料庫的資料夾,及在「檔案名稱」方 塊輸入要建立的資料庫名稱,如下:

(14)

建立資料庫 (cont.)

4.按 鈕,就在指定的資料夾內建立了 student.mdb,出現如下的視窗:

5. 5. 如果不要馬上建立資料表,可執行【檔案如果不要馬上建立資料表,可執行【檔案//離開】指離開】指 令,關閉上面的視窗。如果要馬上建立資料表,可直

(15)

建立資料表

假設要利用VB,在上一節建立的student.mdb資料庫中建立資料表 basic,其步驟如下:

1. 執行【增益集/資料庫管理員】指令,出現「資料庫管理員」

視窗,再執行【檔案/開啟資料庫/Microsoft Access】指令。

(16)

建立資料表 (cont.)

2. 開啟如下的對話方塊,選取資料庫所在的資 料夾與資料庫名稱後,再按 鈕。

(17)

建立資料表 (cont.)

3. 開啟如下的對話方塊,在「資料庫視窗」內按滑鼠右 鍵,再執行快顯功能表中的「新增資料表」指令

(18)

建立資料表 (cont.)

4. 出現如下的「資料表結構」對話方塊,就可建立資料 表。假如要建立資料表basic,可在「資料表名稱」方 塊輸入basic後,再按

(19)

建立資料表 (cont.)

5. 出現如下的「新增資料欄」對話方塊,再輸 入第一個資料欄的名稱、型態與大小,然後按

「確定」鈕。

(20)

建立資料表 (cont.)

【說明】拉下「型態」的列示方塊,便可 選用所要的資料型態,如下:

(21)

建立資料表 (cont.)

6. 再如上一步驟,依序輸入如下表的第2、

3、4個資料欄的名稱、型態與大小:

資料欄名稱 資料型態 大小

資料欄1:學號 number Text 5 Bytes

資料欄2:姓名 name Text 8 Bytes

資料欄3:地址 address Text 30 Bytes

資料欄4:電話號碼 tel Text 8 Bytes

(22)

建立資料表 (cont.)

最後按 鈕,就關閉新增資料欄方 塊,回到「資料表結構」方塊,如下:

(23)

建立資料表 (cont.)

7. 按 鈕,就完成資料表basic 的建立,再回到「資料庫管理員」視窗。

(24)

建立資料表 (cont.)

8.重覆步驟3~7,再新增資料表score及其 內的資料欄如下:

資料欄名稱 資料型態 大小

資料欄1:學號 number Text 5 Bytes

資料欄2:國文 成績

chinese Integer 2 Bytes

資料欄3:英文 成績

english Integer 2 Bytes

(25)

建立資料表 (cont.)

完成後,「資料庫視窗」的內容如下:

您也可以使用Microsoft Access或其他 資料庫軟體建立資料庫以及資料表。

(26)

在資料表輸入資料記錄

建立資料表後,就可以輸入資料記錄(Data Record)的內容,其方法有二:

一、直接利用資料管理員來輸入資料記錄。

(不必設計程式)

二 、另外設計程式,用來輸入資料記錄的內容。

我們先介紹第一種方法,利用資料管理員輸 入basic資料表的資料記錄(如下表),其步 驟如下:

(27)

在資料表輸入資料記錄 (cont.)

Number

(學號)

Name (姓名)

Address (地址)

Tel

(電話號碼) 92001 許一 台北市北投區一德街100號 92920001

92002 陳二 永和市二水路78號2F 92920002 92003 張三 三重市三重路167號5F 92920003 92004 李四 中和市四平街67號3F 92920004 92005 王五 台北市五常街60號2F 92920005

(28)

在資料表輸入資料記錄 (cont.)

1. 在「資料庫視窗」的資料表名稱basic 上,連按兩下滑鼠左鍵,開啟其對話方 塊,如下:

(29)

在資料表輸入資料記錄 (cont.)

2. 按 鈕後,就出現如下的方塊,輸入 第一筆記錄的各項資料後,再按 鈕。

3.仿照上一步驟,再依序輸入第2~5筆記錄的資 料,完成後再按 鈕,結束資料記錄的 輸入工作。最後再建立score資料記錄。

(30)

操作補充說明

(31)

Visual Basic 程式設計 資料庫

資料庫基本觀念簡介 資料表建立

資料庫元件及資料感知元件使用

(32)

使用資料庫元件

一般控制項

„ Data

資料感知元件

„ Text

„ Label

„ ……

資料控制項

ListBox Text

Database

記錄

查詢/讀取

常用SQL 網路連線

(33)

ADO與資料庫

ADO是Active Data Objects的縮寫,是 Microsoft公司制定的資料庫連結架構,

作為應用程式與資料來源之間的溝通橋 樑,可提供應用程式存取資料庫中的資 料之介面,其情況如下圖:

(34)

資料控制項元件 (Data control)

VB的工具箱中有個資料(Data)控制項,

可用來連結資料庫中的資料表,以便於顯 示或修改其中的資料。

(35)

資料控制項元件 (cont.)

【說明】一個表單上可以安置多個資料控制項,其預設

的物件名稱與標題都依序為Data1、Data2、Data3、…。

也可以在屬性視窗中的Name屬性更改物件名稱(標準 字首為ado),及在Caption屬性更改標題,如更改標 題為「基本資料檔」,如下:

(36)

資料控制項常用的屬性

預設值

Caption(標題) 資料控制項的標題,是預設的屬性 Data1 DatabaseName

(資料庫名稱)

設定資料控制項所連結的資料庫之路徑與名稱

RecordSource (記錄來源)

設定資料控制項所連結的資料表之名稱

ReadOnly (唯讀)

設定資料表內的資料是否不能修改:

True-只能讀取,不能修改 False-可以讀取,也可以修改

False

Connect(連接) 設定要連結的資料庫種類(含版次) Access Exclusive 設定連結的資料庫是否不能被同時共用:True-不能 False

(37)

資料感知(Data Aware)控制項 與資料表內容的連結

可以安排在表單中,具有資料連結功能 的控制項,就稱為「資料感知(Data Aware)控制項」,如文字方塊、標籤、

核取方塊、清單方塊、下拉式清單方塊、

圖片方塊及影像…等都是。

(38)

資料感知(Data Aware)控制項 與資料表內容的連結 (cont.)

通常利用資料控制項連結資料庫時,要同時在 表單中安排「資料感知控制項」,來顯示資料 表中對應記錄的資料欄之內容。此時,其

DataSource與DataField兩個屬性的設定如下:

(39)

資料庫與資料感知元件之使用

請使用Data元件與資料感知元件完成下 列表單程式:

(40)

資料庫與資料感知元件之使用(cont.)

選取資料控制項,然後在屬性視窗中點選

DatabaseName視窗,再在屬性值欄按一下 鈕。

並選取剛剛建立的student.mdb。

(41)

資料庫與資料感知元件之使用(cont.)

Data元件相關設定

„ RecordType設定為「0-資料表(Table)」

„ RecordSource選取basic資料表

資料感資元件 (Text) 相關設定

„ DataSource選取Data1

„ 並且設定相對應的DataField

(42)

執行結果

上述表單設計完成後(不必設計程式碼),開 始執行程式,就會在對應的文字方塊顯示第一 筆記錄的內容,如下:

(43)

資料控制項常用的方法 (cont.)

使用一般資料檔或資料庫時,基本的功 能要包括新增(Insert)、更新

(Update)、修改(Replace)與刪除

(Delete)。接下來我們要介紹達成上 述基本功能的「方法」,可直接存取資 料庫,自資料表讀出資料,及將資料寫 入資料表中。

(44)

一、新增資料記錄

用法:資料控制項名稱.Recordset.AddNew

功能:將記錄指標移到資料庫的最後,並新增一筆空 白記錄。

說明:

1. 使用此方法後,該記錄是空白的。要接著將資料 放置到資料控制項中對應的資料欄,然後利用

Update方法,將資料寫入新增的記錄中。

2. 要將資料放置到資料控制項中對應的資料欄,就 像針對一般的變數一樣,但是其格式為:

資料控制項名稱.Recordset("資料欄名稱") 例如,要將文字方塊Text1的內容放置到資料控制 項Data1的資料欄number中,其用法如下:

Data1.Recordset("number")=Text1.Text

(45)

資料控制項常用的方法 (cont.)

二、 編輯資料記錄

用法: 資料控制項名稱.Recordset.Edit

功能:編輯(修改)目前記錄指標所在的記錄之 內容。

說明:使用此方法後,要接著將資料放置到資料 控制項中對應的資料欄,然後利用Update方 法(如上一項的說明2),將資料寫入該筆記 錄中。

(46)

三、更新資料記錄

用法:資料控制項名稱.Recordset.Update

功能:將新增或修改的資料實際寫進資料庫中的 對應記錄。

說明:

1.要執行此方法,資料控制項的ReadOnly屬性必須 設定為False。

2.如果執行此方法後,要取消更新功能(即回復更 新前的狀況),可使用UpdateControls方法,其 用法如下:

資料控制項名稱.Recordset.UpdateControls

(47)

新增記錄到學生基本資料

【表單設計】

(48)
(49)

49

【程式碼】

01 Private Sub cmdAdd_Click()

02 Data1.Recordset.AddNew '新增一筆空白記錄

03 Data1.Recordset("number") = Left(Text1, 5) '取左邊5個字元 04 Data1.Recordset("name") = Text2

05 Data1.Recordset("address") = Text3

06 Data1.Recordset("tel") = Left(Text4, 8) '取左邊8個字元 07 Data1.Recordset.Update '將資料寫進新增的記錄中

08 MsgBox "已完成新增紀錄", vbOKOnly, "新增紀錄"

09 Text1 = "": Text2 = "": Text3 = "": Text4 = "" _ '將文字方塊清成空白

10 Text1.SetFocus '設定Text1為輸入焦點,準備再輸入下一筆資料 11 End Sub

12 Private Sub cmdEnd_Click() 13 End

14 End Sub

(50)

資料控制項常用的方法 (cont.)

四、 刪除資料記錄

用法:資料控制項名稱.Recordset.Delete

功能:直接刪除資料表中目前記錄指標所在的 一筆記錄。

說明:使用此方法,會直接刪除掉,不必再用 Update方法來更新。

(51)

五、查詢資料記錄

用法:資料控制項名稱.Recordset.Find方法 "條件式"

功能:

1.Find方法 包括下列四種:

FindFirst 找出符合條件的第一筆記錄 FindPrevious 找出符合條件的前一筆記錄 FindNext 找出符合條件的下一筆記錄 FindLast 找出符合條件的最後一筆記錄

2.「條件式」一定要加前後的雙引號,其中用到字串常 數的前後要加單引號。

3.找到時,記錄指標會停在該筆記錄上。如果找不到,

Nomatch屬性會傳回True值。

4.如果資料表中有多筆記錄符合條件,可利用迴圈來處 理。

(52)

在資料控制項Data1所連結的資料表中,找尋學號為 92003的第一筆記錄,其用法如下:

Data1.Recordset.FindFirst "number='92003'"

如果找不到該記錄,Data1.Recordset.Nomatch會傳 回True值,所以可接著做如下的判斷與動作:

If Data1.Recordset.Nomatch then MsgBox "找不到資料"

Else

MsgBox "找到資料了"

EndIf

(53)

資料控制項常用的方法 (cont.)

如果條件式中的欄位值用變數來表示,可 使用如下:

Try it! 請新增一個Text與Command撰寫查 詢功能。

(54)

六、移動記錄指標

用法:資料控制項名稱.Recordset.Move方法 功能:「Move方法」包括下列四種:

MoveFirst 將指標移到第一筆記錄 MovePrevious 將指標移到前一筆記錄 MoveNext 將指標移到下一筆記錄 MoveLast 將指標移到最後一筆記錄

【說明】

1. 資料集(Recordset)由資料記錄(Record)組成,

最前面有個「檔案開始」標記(BOF,Begin Of File),最後面有個「檔案結束」標記(EOF,End Of File),如有n筆記錄的情況如下圖:

(55)

2. 要修改或刪除某一筆記錄的內容時,可先利用 Find 或Move方法,將記錄指標移到該筆記錄的位置。

3. 如果記錄指標已經在EOF,就不能再往後移動(不能 用MoveNext)。同樣,如果記錄指標已經在BOF,就 不能再往前移動(不能用MovePrevious)。

4. BOF與EOF也是Recordset的屬性,其屬性值為True或 False,組合情況如下:

(56)

【例】假如記錄指標不在BOF,就往前移動一筆記錄。

If Not Data1.Recordset.BOF Then _ Data1.Recordset.MovePrevious

【例】假如記錄指標不在EOF,就往後移動一 筆記錄。

If Not Data1.Recordset.EOF Then _ Data1.Recordset.MoveNext

【例】資料集中沒有資料

If Data1.Recordset.BOF And _

Data1.Recordset.EOF Then Label5="空資料集"

(57)

七、取得資料集的總筆數與總資料欄數

用法與功能:

資料控制項名稱.Recordset.RecordCount 傳回資料表中記錄的總筆數

資料控制項名稱.Recordset.Fields.Count 傳回資料表的總欄位數

說明:資料表的記錄指標移動後,RecordCount 屬性才會開始記錄總筆數。

(58)

八、 關閉資料表

用法:資料控制項名稱.Recordset.Close

功能:關閉所連結的資料表,並將佔用的系統資 源釋放出來。

說明:

1.執行程式碼的End與Unload敍述時,都會自動關 閉資料表。

2.資料表被關閉後,如果要再關閉資料表,會發 生執行錯誤的狀況。

【例】關閉資料控制項Data1所連結的資料表 Data1.Recordset.Close

(59)

綜合應用-移動、更新與刪除記錄

(60)
(61)
(62)
(63)

期末程式作業

請撰寫下列表單程式,將資料表basic及score相對應,顯示每個 學生之各項成績及平均成績。最後在表單右邊統計全班總成績,

並且依平均成績及格與否繪製成績圖餅圖。

註:此份作業請依公告之作業繳交說明完成。

(64)

使用ADO元件

新增控制項

„ Microsoft ADO Data Control 6.0

Š Adodc

„ Microsoft DataGrid Control 6.0

Š DataGrid

按選單的project ->component

(65)

Adodc

按右鍵ÆADOCD屬性

(66)

Adoce

工具出現兩個新的控制項

按一下 adoce控制項

(67)

Adodc (cont.)

提供者

„ Microsoft Jet 4.0 OLE DB Provider

連接

„ 選擇資料庫

(68)

Adodc (cont.)

„ 查取表格:修改 RecordSource

Š CommandType=2- adCmdTable

Š Table=Authors

„ 下指令查詢:修改 RecordSource

Š CommandType=1.adCmd Text

Š CommandText:SQL指令

設定資料來源是哪一 個表格

(69)

DataGrid

新增資料感知元件 新增data grid 控制項

Adodc的 caption

(70)

DataGrid

設定資料感知元件

„ DataSource=資料控制項

Š Ex.設定data grid的屬性DataSource=adodc1

Adodc的 caption

(71)

DataGrid (cont.)

滑鼠在

dataGrid上按 右鍵

Data Grid進階設定

„ Delete/Insert:刪除、增加顯示的欄位

切割

(72)

DataGrid (cont.)

Data Grid切割

(73)

DataGrid (cont.)

Retrieve Fields:依資料庫內容決定欄位

(74)

其他可和acodc1配合使用的控制項

使用資料感知元件

„ Text

„ Label

Š DataSource

Š DataField

„ DataList

„ DataCombo

Š RowSource

Š ListField

(75)

Exercise

讀取學生基本資料表

1. 新增學生基本資料的mdb檔

2. 從mdb檔讀取所有學生資料表,顯示在 form上

3. Go!!

(76)

這樣就夠了嗎?

如果我只列出要一部份符

合條件的資料怎麼辦?

(77)

Structured Query Language

資料庫存取的標準語言

有些資料庫管理系統使用修改過的SQL Select 欄位名[,欄位名……]

From 表格名 例

Select Author

From Authors Select Author From Authors

(78)

SQL (cont.)

在adodc中

„ RecordSource=1-adCmdText

„ CommandText=select author from authors

SQL命令

(79)

SQL (cont.)

所得的結果存在adodc的recordset中 條件式select: 使用where

Select Au_ID, Author From Authors Where Au_ID>100

可搭配 AND, OR使用

Select Au_ID, Author From Authors Where AuID>100 AND Au_ID<200

(80)

SQL (cont.)

Like: 相似字串

Select Au_ID, Author From Authors Where Author Like ‘A%’

Like後面的字串樣板用單引號括起來

%代表任意字元

(81)

動態產生、執行SQL

Adodc.recordsource=“SQL語法”

Adodc.refresh

為了美觀,

adodc1的visible 可設為false

(82)

Private Sub Command1_Click() Dim min, max As Integer

Dim name As String Dim sqlcmd As String min = Int(Text1.Text) max = Int(Text2.Text) name = Text3.Text

sqlcmd = "select au_id, author ” + _

“from authors " + _

"where (au_id>=" + Str(min) + _

" and au_id<=" + Str(max) + ") + _ and author like ('" + name + "')"

Adodc1.RecordSource = sqlcmd Adodc1.Refresh

End Sub

(83)

動態產生、執行SQL (cont.)

Select au_id, author From authors

Where (au_id>=1

and au_id<=100) and author Like ‘b%’

Î

“Select au_id, author ” + _

“From authors ” + _

“Where (au_id>=1 and ”+

“au_id<=100) and ” + _

“author Like ‘b%’”

(84)

動態產生、執行SQL (cont.)

Î

“Select au_id, author ” + _

“From authors ” + _

“Where (au_id>=” +str(min)+ “ and ” + _

“au_id<=” +str(max)+ “) and ” + _

“author Like ‘” +name+ “’”

(85)

ODBC與專業資料庫

使用ODBC可以讓 程式設計師不去理 會資料庫的位置、

形態

„ 在那個server……

„ 是Oracle, SQL Server 或是

Access……

資料庫控制項

資料庫 ODBC

(86)

ODBC與資料庫 (cont.)

專業資料庫 (Lock, Cache, Backup)

„ SQL Server, Oracle……

„ 常有獨立的伺服器

„ 效能較好,功能較強

一般資料庫

„ Access, FoxPro……

„ 只定義檔格式

執行SQL的 方式不同

(87)

使用專業資料庫

(88)

使用專業資料庫 (cont.)

(89)

使用ODBC (cont.)

控制台ÆODBC資料來源

(90)

參考文獻

相關文件

職稱 姓名 性別 聯絡電話 (或其他聯絡方式) 專長與特色 1)董事長/.

代號 職類 姓名 名次 提名單位.. 02 模具 黃祖榮

職類代號 職類 姓名 名次

九、本月份熱門職缺排名部分,名次差超過 10 名以上熱門職業有 2 項;就雇主提供工作 機會熱門職缺比對求職者希望工作前 20

  春日山麓四恩院院主如圓房朝海令付假名并指姓畢。此假名姓裏書者。土御門大 納言入道 (顯定卿) 之所記錄也。即以彼禪門自筆之點本寫之。可為無雙之證本也而已

九、本月份熱門職缺排名部分,名次差超過 10 名以上熱門職業有 5 項;就雇主提供工作 機會熱門職缺比對求職者希望工作前 20

九、本月份熱門職缺排名部分,名次差超過 10 名以上熱門職業有 4 項;就雇主提供工作 機會熱門職缺比對求職者希望工作前 20

九、本月份熱門職缺排名部分,名次差超過 10 名以上熱門職業有 1 項;就雇主提供工作 機會熱門職缺比對求職者希望工作前 20