75
資資資資資資資資

資料庫理論與實務

Embed Size (px)

DESCRIPTION

資料庫理論與實務. 以 VB6 建立資料庫. 以 VB6 建立資料表. 按滑鼠右鍵將出現快顯功能表. 輸入資料記錄. 滑鼠左鍵連點兩下. 簡易資料庫程式設計. 資料 (Data) 元件. 第一筆 資料. 最後一筆資料. 資料控制項. 上一筆 資料. 下一筆 資料. 資料控制項的常用屬性. Name :資料控制項的名稱 Caption :資料控制項內的標題 BatabaseName :設定連結的資料庫名稱 RecordSource :設定連結的資料表名稱 ReadOnly :設定是否允許修改 - PowerPoint PPT Presentation

Citation preview

Page 1: 資料庫理論與實務

資料庫理論與實務

Page 2: 資料庫理論與實務

以 VB6 建立資料庫

Page 3: 資料庫理論與實務

以 VB6 建立資料表

按滑鼠右鍵將出現快顯

功能表

Page 4: 資料庫理論與實務

輸入資料記錄

滑鼠左鍵連點兩下

Page 5: 資料庫理論與實務

簡易資料庫程式設計資料 (Data) 元件

第一筆資料

最後一筆資料

上一筆資料

下一筆資料

資料控制項

Page 6: 資料庫理論與實務

資料控制項的常用屬性Name :資料控制項的名稱Caption :資料控制項內的標題BatabaseName :設定連結的資料庫名稱RecordSource :設定連結的資料表名稱ReadOnly :設定是否允許修改Connect :設定資料庫的檔案格式,內定為        AccessExclusive :封閉,設定是否可與妻他程式共用      此資料庫

Page 7: 資料庫理論與實務

資料感知物件 (Data Aware)具有資料連結功能的控制項統稱為 Data Aware

文字方塊 (TextBox)標籤 (Label)核取方塊 (CheckBox)圖片方塊 (PictureBox)影像 (Image)清單方塊 (ListBox)下拉式清單方塊 (ComboBox)格子 (MSFlexGrid)…

共同重要屬性1. DataSource 決定連結的資料控制項名稱2. DataField 決定鏈結的資料連位名稱

Page 8: 資料庫理論與實務

牛刀小試 (1) Label*6

TextBox*6

Data*1

Page 9: 資料庫理論與實務

牛刀小試 (1)--- 續重要屬性設定

Data• DatabaseName

– C:\VB6 投影片 \ 第九章範例 \ 牛刀小試 (1)\db-test.mdb

• RecordSource– student

Page 10: 資料庫理論與實務

牛刀小試 (1)--- 續重要屬性設定 ( 續 )

Text1(0)~Text1(5)• DataSource

– Data1

Text1(0)~Text1(5)• DataField

– Text1(0) stu_no– Text1(1) name– Text1(2) blood– Text1(3) sex– Text1(4) tel– Text1(5) address

Page 11: 資料庫理論與實務

以程式控制移動資料移到第一筆記錄

Data1.Recordset.MoveFirst移到最後一筆記錄

Data1.Recordset.MoveLast移到上一筆記錄

Data1.Recordset.MovePrevious移到下一筆記錄

Data1.Recordset.MoveNext

Page 12: 資料庫理論與實務

牛刀小試 (2)同牛刀小試 (1) 僅新增四個 CommandButton

CommandButton*4

Page 13: 資料庫理論與實務

牛刀小試 (2)--- 續BOF (Begin Of File)

檔案開頭EOF (End Of File)

檔案結尾

若不加上 BOF 或 EOF 的判斷,將發生下圖情形

Page 14: 資料庫理論與實務

新增、刪除、修改資料記錄新增資料記錄

Data1.Recordset.AddNew刪除資料記錄

Data1.Recordset.Delete修改資料記錄 ( 需配合 AddNew 或 Edit)

Data1.Recordset.Update編輯資料記錄

Data1.Recordset.Edit

Page 15: 資料庫理論與實務

牛刀小試 (3)同牛刀小試 (2) 再新增三個 CommandButton

Page 16: 資料庫理論與實務

牛刀小試 (3)--- 續

Page 17: 資料庫理論與實務

查詢資料記錄找出符合資料的第一筆記錄

Data1.Recordset.FindFirst “blood=‘B’”找出符合條件的前一筆記錄

Data1.Recordset.FindPrevious “blood=‘B’”找出符合條件的下一筆記錄

Data1.Recordset.FindNext “blood=‘B’”找出符合條件的最後一筆記錄

Data1.Recordset.FindLast “blood=‘B’”是否找到符合的記錄?

Data1.Recordset.NoMatch• True :找到符合記錄• False :未找到符合記錄

Page 18: 資料庫理論與實務

其他查詢資料總筆數

Data1.Recordset.RecordCount查詢資料總欄位數

Data1.Recordset.Fields.Count關閉資料表

Data1.Recordset.Close

Page 19: 資料庫理論與實務

牛刀小試 (4)同牛刀小試 (3) 再新增三個 CommandButton

Page 20: 資料庫理論與實務

牛刀小試 (4)--- 續

Page 21: 資料庫理論與實務

DAO(Data Access Object)

資料存取物件VB6 中的一種資料存取方法,也是一種物件結構(階層物件集合)的方式

• 最大的階層為 DBEngine (Microsoft Jet Database Engine)• 有了 DBEngine 後 VB 就會自動配置一塊記憶體空間即 Workspac

e(0) 工作空間給使用者• 然後使用 OpenDatabase 開啟資料庫• 待資料庫開啟後接著以 OpenRecordset 開啟資料表

使用 DAO 必須先完成下列二項宣告• 資料庫 (Database)• 資料表 (Recordset)

不用 Data 元件的方法

Page 22: 資料庫理論與實務

DAO( 續 )DAO 設計的第一步引用 DAO 物件庫

Page 23: 資料庫理論與實務

DAO( 續 )DAO 設計的第二步宣告資料庫及資料表

DAO 設計的第三步開啟資料庫及資料表

Dim db As Database ‘ 宣告資料庫Dim rs As Recordset ‘ 宣告資料表

Set db=DBEngine.Workspaces(0).OpenDatabase( 欲開啟的資料庫 ) ‘ 開啟資料庫

Set rs=db.OpenRecordset( 欲開啟的資料表名稱 , dbOpenTable ) ‘ 開啟資料表

Page 24: 資料庫理論與實務

DAO( 續 ) 開啟資料表的型式

Constant Description

dbOpenTable Opens a table-type Recordset object ( Microsoft Jet workspaces only).

dbOpenDynamicOpens a dynamic-type Recordset object, which is similar to an ODBC dynamic cursor. ( ODBC

Direct workspaces only)

dbOpenDynaset Opens a dynaset-type Recordset object, which is similar to an ODBC keyset cursor.

dbOpenSnapshot Opens a snapshot-type Recordset object, which is similar to an ODBC static cursor.

dbOpenForwardOnly Opens a forward-only-type Recordset object.

Page 25: 資料庫理論與實務

牛刀小試 (5)以 DAO 方式改寫牛刀小試 (4)

Page 26: 資料庫理論與實務

宣告 db 為資料庫變數 rs 為資料表變數

設定 db 為開啟資料庫 db-test.mdb而 rs 為以 dbOpenTable 型態來開啟db 中的資料表 student將指標指向第一筆資料錄,並將第一筆記錄顯示在 Text1(0)~(5) 中

當按下「 |< 」鈕時,將第一筆記錄顯示於 Text1(0)~(5) 中當按下「 >| 」鈕時,將最後一筆記錄顯示於 Text1(0)~(5) 中

當按下「 < 」鈕時,將指標指向上一筆記錄,並測試是否為資料檔案的最頂端,假如是的話將指標指向第一筆記錄,將指標所在記錄的資料顯示於 Text1(0)~(5) 中當按下「 > 」鈕時,將指標指向下一筆記錄,並測試是否為資料檔案的最尾端,假如是的話將指標指向最後一筆記錄,將指標所在記錄的資料顯示於 Text1(0)~(5) 中

Page 27: 資料庫理論與實務

當按下 Command5 鈕時,假如鈕上的標題為「新增」,則更改名稱為「確定」,同時將「刪除」鈕更名為「取消」,然後呼叫 cleartext 清除 Text1(0)~(5)的內容,並執行 AddNew 的方法;否則,鈕上的標題為「確定」時,更改名稱為「新增」,同時將「取消」鈕更名為「刪除」,並將 Text1(0)~(5) 的內容指派給各個欄位,最後執行 Update 的方法

當按下 Command6 鈕時,假如鈕上的標題為「刪除」,則顯示是否刪除的提示訊息,若確定刪除,則執行Delete 的方法,並執行 Command1 的動作;否則,鈕上的標題為「取消」時,更改名稱為「刪除」,同時將 Command5 鈕的標題更名為「新增」, Command7的標題更名為「修改」

Page 28: 資料庫理論與實務

當按下 Command7 鈕時,假如鈕上的標題為「修改」,則更改名稱為「確定」,同時將「刪除」鈕更名為「取消」;否則,鈕上的標題為「確定」時,更改名稱為「修改」,同時將「取消」鈕更名為「刪除」,並將 Text1(0)~(5) 的內容指派給各個欄位,最後執行 Update 的方法

當按下 Command8 鈕時,先關閉以dbOpenTable 型態開啟的資料表,再以 dbOpenSnapshot 型態來開啟student 資料表,然後輸入欲查詢的姓名,以 FindFirst 方法找尋符合的記錄,假如找到的話,將每個欄位分別顯示於 Text1(0)~(5) ,之後關閉資料表,改以 dbOpenTable 重新開啟資料表 student

當按下 Command9 鈕時,顯示資料表的記錄總筆數當按下 Command10 鈕時,顯示資料表的欄位個數

Page 29: 資料庫理論與實務

格子控制項 (MSFlexGrid)也許你也發現到了,之前的範例都是在文字盒中顯示資料,假如碰到了同名同姓的狀況,該如何顯示資料?

用 Print敘述來顯示?也許是個好方法,不過似乎太落伍了!用 MSFlexGrid 來顯示?

Page 30: 資料庫理論與實務

格子控制項 ( 續 )格子在哪裡?

Page 31: 資料庫理論與實務

格子控制項 ( 續 )引入格子控制項

要多大就拉多大

1. 格子由連續的欄與列所組成2. 欄與列交會的地方稱為儲存格 (Cell)3.儲存格分為固定與變動兩部分  a.固定:灰色部分,可用以顯示欄     及列的標題  b. 變動:白色部分,用以顯示圖形     或文字資料

Page 32: 資料庫理論與實務

格子控制項 ( 續 )常用的屬性

Text :內容文字Picture :內容圖片Col :目前作用儲存格所在欄Row :目前作用儲存格所在列Cols :格子控制項的總欄位數Rows :格子控制項的總列數ColAlignment :欄位靠齊方式ColWidth :欄位寬度 ( 以點 [point] 為單位 )RowHeight :列的高度 ( 以點 [point] 為單位 )

Page 33: 資料庫理論與實務

ColAlignment  欄位靠齊方式

常數 值 描述

flexAlignLeftTop 0 資料行內容靠左、靠上對齊。

flexAlignLeftCenter 1 字串預設值。資料行內容靠左、居中對齊。

flexAlignLeftBottom 2 資料行內容靠左、靠下對齊。

flexAlignCenterTop 3 資料行內容居中、靠上對齊。

flexAlignCenterCenter 4 資料行內容置中、居中對齊。

flexAlignCenterBottom 5 資料行內容置中、靠下對齊。

flexAlignRightTop 6 資料行內容靠右、靠上對齊。

flexAlignRightCenter 7 數字的預設值。資料行內容靠右、居中對齊。

flexAlignRightBottom 8 資料行內容靠右、靠下對齊。

flexAlignGeneral 9 資料行內容採一般對齊方式之一。對於字串是「靠左、居中」對齊,數字則是「靠右、居中」對齊。

Page 34: 資料庫理論與實務

牛刀小試 (6)利用 MSFlexGrid 顯示九九乘法表

Page 35: 資料庫理論與實務

牛刀小試 (6)--- 續設定格子控制項的總欄位數為 9 ,總列數為 10 ,令目前作用儲存格為第 0 列的 0~8 欄,分別設定欄寬為 500點、文字置中對齊,從第 1 欄開始依序顯示 2~9 的數字為標題

令目前作用儲存格為第 0 欄的 1~9 列,從第 1 列開始依序顯示 1~9 的數字為標題

將九九乘法的結果顯示於 1~8 欄與 1~9列交會的儲存格中

Page 36: 資料庫理論與實務

高階資料庫設計

SQL

Page 37: 資料庫理論與實務

何謂 SQL 一種與資料庫溝通的共通語言Structured Query Language 唸成 sequel 1970 年在 IBM 工作的 E.F. Codd ,針對關聯式模型 ( relational model ) ,提出了抽象理論因此奠定了關聯式資料系統的基礎演進

SQL-87 、 SQL-89 、 SQL-92 以及目前最新的 SQL 3

Page 38: 資料庫理論與實務

SQL 的三大類別為了統一資料庫的基本語法,才訂定出標準的 SQL 語法,提供使用者一致的操作指令一般而言,資料庫的語法 ( SQL ) 分為三大類別

DDL ( Data Definition Language )DCL ( Data Control Language )DML ( Data Manipulation Language )

Page 39: 資料庫理論與實務

Data Definition Language

定義資料庫物件使用的語法常見的關鍵字

Create•建立資料庫的物件

Alter•變更資料庫的物件

Drop•刪除資料庫的物件

Page 40: 資料庫理論與實務

Data Control Language

控制資料庫物件使用狀況的語法常見的關鍵字

Grant• 賦予使用者使用物件的權限

Revoke• 取消使用者使用物件的權限

Commit• Transaction 正常作業完成

Rollback• Transaction 作業異常,異動的資料回復到 Transaction 開始的狀態

Page 41: 資料庫理論與實務

Data Manipulation Language

維護資料庫資料內容的語法常見的關鍵字

Insert•新增資料到 Table 中

Update•更改 Table 中的資料

Delete•刪除 Table 中的資料

Select•選取資料庫中的資料

Page 42: 資料庫理論與實務

SELECT 陳述式SELECT-list識別欄位

FROM指定搜尋範圍

WHERE搜尋準則

ORDER BY 排列結果

Page 43: 資料庫理論與實務

SELECT 陳述式 (cont.)GROUP BY

將記錄分組統計HAVING

於 GROUP BY 所得的資料集中篩選所需記錄

IN從 SELECT 的結果中再選取資料

Page 44: 資料庫理論與實務

SELECT 陳述式 (cont.)選取需要的欄位

若要選取資料表中所有欄位時• SELECT * FROM Student

SELECT field1,field2,….. FROM tablename

field n :需要的欄位tablename :資料表格名稱

Page 45: 資料庫理論與實務

SELECT 陳述式 (cont.)篩選記錄 SELECT field1,field2,…..

FROM tablenameWHERE criteria

field n :需要的欄位tablename :資料表格名稱criteria :篩選條件

SELECT Name, Sex, Height FROM Student WHERE Height > 165

Page 46: 資料庫理論與實務

SELECT 陳述式 (cont.)篩選特定範圍欄位值

SELECT *FROM tablenameWHERE filedBETWEEN a1 AND a2

tablename :資料表格名稱field :欄位名稱a1,a2 :數值

SELECT * FROM Student WHERE Height BETWEEN 160 AND 175

Page 47: 資料庫理論與實務

SELECT 陳述式 (cont.)排序 SELECT field1,field2,…..

FROM tablenameORDER BY sortorder

field n :需要的欄位tablename :資料表格名稱sortorde :排序方式

SELECT Name, Sex, Height FROM Student ORDER BY Height ASCSELECT Name, Sex, Height FROM Student ORDER BY Height DESC

Page 48: 資料庫理論與實務

SELECT 陳述式 (cont.)省略重複值

SELECT DISTINCT field1,field2,….. FROM tablename

field n :需要的欄位tablename :資料表格名稱

SELECT DISTINCT Name FROM Student

Page 49: 資料庫理論與實務

SELECT 陳述式 (cont.)使用別名

SELECT field1 AS Alias1,field2 AS Alias2,… FROM tablename

field n :需要的欄位alias n :欄位的別名tablename :資料表格名稱

SELECT Name AS Name1 FROM Student

Page 50: 資料庫理論與實務

SELECT 陳述式 (cont.)限定選取資料錄的筆數

SELECT TOP n field1,field2,…FROM tablenameORDER BY sortorder

field n :需要的欄位tablename :資料表格名稱sortorde :排序方式

SELECT TOP n PERCENT field1,field2,…FROM tablenameORDER BY sortorder

Page 51: 資料庫理論與實務

SELECT 陳述式 (cont.)使用統計函數

SELECT 統計函數 AS Alias FROM tablename 函數 意義

COUNT 統計資料錄的總筆數SUM 統計資料錄的某欄位總和MIN 求取所有資料錄某欄位的最小值MAX 求取所有資料錄某欄位的最大值

STDEV 統計所有資料錄某欄位的標準差VAR 統計資料錄某欄位的變異數

FIRST 求取所有資料錄的第一筆LAST 求取所有資料錄的最後一筆

Page 52: 資料庫理論與實務

SELECT 陳述式 (cont.)分組統計

SELECT fieldx,field1,…FROM tablenameGROUP BY fieldx

field x :該分組的欄位

Page 53: 資料庫理論與實務

SELECT 陳述式 (cont.)HAVING 條件式

SELECT fieldx,field1,…FROM tablenameGROUP BY fieldxHAVING criteria

field x :該分組的欄位criteria :條件式

Page 54: 資料庫理論與實務

SELECT 陳述式 (cont.)子集合查詢

SELECT *FROM tablenameWHERE field IN (ct1,ct2,…)

tablename :資料表格名稱ct n :欄位內容

SELECT * FROM Student WHERE Name IN(’張三’ ,’李四’ )

Page 55: 資料庫理論與實務

UPDATE

更新 UPDATE tablenameSET field=newvalue

tablename :資料表格名稱field :欲變更的欄位newvalue :更新值

Page 56: 資料庫理論與實務

INSERT INTO

新增

INSERT INTO tablename(field1,field2,…)VALUES (value1,value2,…)

tablename :資料表格名稱field n :欲新增的欄位value n :新增值

Page 57: 資料庫理論與實務

DELETE

刪除

DELETE FROM tablenameWHERE criteria

tablename :資料表格名稱criteria :篩選條件

Page 58: 資料庫理論與實務

牛刀小試 (7)將牛刀小試 (5) 以 SQL語法改寫

新增的改寫

Page 59: 資料庫理論與實務

牛刀小試 (7)--- 續刪除的改寫

Page 60: 資料庫理論與實務

牛刀小試 (7)--- 續修改的改寫

Page 61: 資料庫理論與實務

牛刀小試 (7)--- 續查詢的改寫

Page 62: 資料庫理論與實務

VB6 與 dBase V (.dbf) 的連結與資料庫連結

與資料表連結

Set db = DBEngine.Workspaces(0).OpenDatabase(App.Path, dbDriverNoPrompt, _ False, "dBASE 5.0;DATABASE=" & App.Path)

Set database = workspace.OpenDatabase (dbname, options, read-only, connect)

Set rs = db.OpenRecordset("AMEMBER.dbf", dbOpenTable, _ dbDenyWrite, dbOptimistic)

Set recordset = object.OpenRecordset (source, type, options, lockedits)

Page 63: 資料庫理論與實務

範例一 人事管理系統

Page 64: 資料庫理論與實務

範例一 人事管理系統 ( 續 )

PictureBox*1

功能表編輯器

Page 65: 資料庫理論與實務

範例一 人事管理系統 ( 續 )功能表編輯器內容

Page 66: 資料庫理論與實務

範例一 人事管理系統 ( 續 )TextBox*57

Label*57

CommandButton*9

Frame*1

Page 67: 資料庫理論與實務

範例一 人事管理系統 ( 續 )Frame*1

OptionButton*7

TextBox*1

CommandButton*2

MSFlexGrid*1

Page 68: 資料庫理論與實務

範例一 人事管理系統 ( 續 )

Label*3

Image1*1

CommandButton*1

Shape*2

Frame*1

Page 69: 資料庫理論與實務

宣告資料庫、資料表變數 db 與 rs , sel 為選擇軍官或士官兵資料維護

當按下「關於」選項後,顯示 Frame1 ,並於 Image1載入 logo.gif 圖案

結束程式執行 Picture1載入圖案 main.gif並設定資料庫為 dBASE 5.0 型式檔案檔案所在路徑採相對路徑指定

當按下「士官兵資料維護」選項後,令 sel=2 ,清空所有 TextBox 後,顯示Frame2 ,設定開啟的資料表為 BMEMBER.dbf ,然後將指標指到資料表的第一筆記錄,將第一筆記錄的內容選適於螢幕上

當按下「軍官資料維護」選項後,令 sel=1 ,清空所有 TextBox 後,顯示Frame2 ,設定開啟的資料表為 AMEMBER.dbf ,然後將指標指到資料表的第一筆記錄,將第一筆記錄的內容選適於螢幕上

Page 70: 資料庫理論與實務

關閉「關於」 (Frame1) 的顯示

當按下「 |< 」按鈕時,清空所有 TextBox將指標指到第一筆記錄,並顯示於螢幕上

當按下「 >| 」按鈕時,清空所有 TextBox將指標指到最後一筆記錄,並顯示於螢幕上

當按下「 < 」按鈕時,清空所有 TextBox將指標指向前一筆記錄,假如為資料表頭,則將指標指到第一筆記錄,並顯示記錄於螢幕上

當按下「 > 」按鈕時,清空所有 TextBox將指標指向後一筆記錄,假如為資料表底,則將指標指到最後一筆記錄,並顯示記錄於螢幕上

Page 71: 資料庫理論與實務

清空所有的 TextBox

當按下 Command6 鈕時,假如鈕上的標題為「新增」,則更改名稱為「確定」,同時將「刪除」鈕更名為「取消」,然後呼叫 cleartext 清除 Text1(0)~(56)的內容,並執行 AddNew 的方法;否則,鈕上的標題為「確定」時,更改名稱為「新增」,同時將「取消」鈕更名為「刪除」,並將 Text1(0)~(56) 的內容指派給各個欄位,最後執行 Update 的方法

當按下 Command7 鈕時,假如鈕上的標題為「刪除」,則顯示是否刪除的提示訊息,若確定刪除,則執行 Delete 的方法,並執行 Command3 的動作;否則,鈕上的標題為「取消」時,更改名稱為「刪除」,同時將 Command6 鈕的標題更名為「新增」, Command8 的標題更名為「修改」

當按下 Command8 鈕時,假如鈕上的標題為「修改」,則更改名稱為「確定」,同時將「刪除」鈕更名為「取消」;否則,鈕上的標題為「確定」時,更改名稱為「修改」,同時將「取消」鈕更名為「刪除」,並將 Text1(0)~(56) 的內容指派給各個欄位,最後執行 Update 的方法

Page 72: 資料庫理論與實務

當按下 Command9 鈕 ( 查詢 ) 時,顯示 Frame3 ,清空 text2 、 MSFlexGrid1 內容,並起始設定MSFLEXGrid1 的行、列總數及各欄的寬度

當按下 Command10 鈕 (離開 ) 時,關閉資料表並隱藏 Frame2

當按下 Command12 鈕 (放棄查詢 ) 時,隱藏Frame3

Page 73: 資料庫理論與實務

當按下各個查詢條件時,將 Text2 與 MSFlexGrid1 清空,並設定總列數為 2

當按下 MSFlexGrid1 中的任一項次時,將 Frame3隱藏,清空所有 Text2 內容,在資料表中以 FindFirst 尋找欄位名稱為 MEMBER_ID 的內容與 MSFlexGrid1 中第 2 欄的內容相同的記錄,並將記錄內容顯示於各個 TextBox 中,關閉資料表,假如之前的選項為「軍官資料維護」則重新以 dbOpenTable 的型式開啟 AMEMBER.dbf 檔,否則開啟 BMEMBER.dbf 檔

Page 74: 資料庫理論與實務

當按下「開始查詢」按鈕後,先關閉資料表,重新以 dbOpenSnapshot 型式開啟 AMENBER.dbf (軍官)或BMEMBER.dbf (士官兵),令 ret等於 Text2 中欲查詢的內容,按不同的查詢條件組合成 str1 ,然後在資料表中查詢符合 str1 條件的第一筆記錄,假如找到的話,將內容中的部分欄位顯示於 MSFlexGrid1 中,然後再尋找符合 str1 條件的下一筆記錄,直到不再有符合條件的資料為止

Page 75: 資料庫理論與實務

The End