750 likes | 885 Views
資料庫理論與實務. 以 VB6 建立資料庫. 以 VB6 建立資料表. 按滑鼠右鍵將出現快顯功能表. 輸入資料記錄. 滑鼠左鍵連點兩下. 簡易資料庫程式設計. 資料 (Data) 元件. 第一筆 資料. 最後一筆資料. 資料控制項. 上一筆 資料. 下一筆 資料. 資料控制項的常用屬性. Name :資料控制項的名稱 Caption :資料控制項內的標題 BatabaseName :設定連結的資料庫名稱 RecordSource :設定連結的資料表名稱 ReadOnly :設定是否允許修改
E N D
以VB6建立資料表 按滑鼠右鍵將出現快顯功能表
輸入資料記錄 滑鼠左鍵連點兩下
簡易資料庫程式設計 • 資料(Data)元件 第一筆 資料 最後一筆資料 資料控制項 上一筆 資料 下一筆 資料
資料控制項的常用屬性 • Name:資料控制項的名稱 • Caption:資料控制項內的標題 • BatabaseName:設定連結的資料庫名稱 • RecordSource:設定連結的資料表名稱 • ReadOnly:設定是否允許修改 • Connect:設定資料庫的檔案格式,內定為 Access • Exclusive:封閉,設定是否可與妻他程式共用 此資料庫
資料感知物件(Data Aware) • 具有資料連結功能的控制項統稱為Data Aware • 文字方塊(TextBox) • 標籤(Label) • 核取方塊(CheckBox) • 圖片方塊(PictureBox) • 影像(Image) • 清單方塊(ListBox) • 下拉式清單方塊(ComboBox) • 格子(MSFlexGrid) • … 共同重要屬性 1. DataSource 決定連結的資料控制項名稱 2. DataField 決定鏈結的資料連位名稱
牛刀小試(1) Label*6 TextBox*6 Data*1
牛刀小試(1)---續 • 重要屬性設定 • Data • DatabaseName • C:\VB6投影片\第九章範例\牛刀小試(1)\db-test.mdb • RecordSource • student
牛刀小試(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
以程式控制移動資料 • 移到第一筆記錄 • Data1.Recordset.MoveFirst • 移到最後一筆記錄 • Data1.Recordset.MoveLast • 移到上一筆記錄 • Data1.Recordset.MovePrevious • 移到下一筆記錄 • Data1.Recordset.MoveNext
牛刀小試(2) • 同牛刀小試(1)僅新增四個CommandButton CommandButton*4
牛刀小試(2)---續 BOF (Begin Of File) 檔案開頭 EOF (End Of File) 檔案結尾 若不加上BOF或EOF的 判斷,將發生下圖情形
新增、刪除、修改資料記錄 • 新增資料記錄 • Data1.Recordset.AddNew • 刪除資料記錄 • Data1.Recordset.Delete • 修改資料記錄(需配合AddNew或Edit) • Data1.Recordset.Update • 編輯資料記錄 • Data1.Recordset.Edit
牛刀小試(3) • 同牛刀小試(2)再新增三個CommandButton
查詢資料記錄 • 找出符合資料的第一筆記錄 • 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:未找到符合記錄
其他 • 查詢資料總筆數 • Data1.Recordset.RecordCount • 查詢資料總欄位數 • Data1.Recordset.Fields.Count • 關閉資料表 • Data1.Recordset.Close
牛刀小試(4) • 同牛刀小試(3)再新增三個CommandButton
不用Data元件的方法 DAO(Data Access Object) • 資料存取物件 • VB6中的一種資料存取方法,也是一種物件結構(階層物件集合)的方式 • 最大的階層為DBEngine (Microsoft Jet Database Engine) • 有了DBEngine後VB就會自動配置一塊記憶體空間即Workspace(0)工作空間給使用者 • 然後使用OpenDatabase開啟資料庫 • 待資料庫開啟後接著以OpenRecordset開啟資料表 • 使用DAO必須先完成下列二項宣告 • 資料庫(Database) • 資料表(Recordset)
DAO(續) • DAO設計的第一步引用DAO物件庫
DAO(續) • DAO設計的第二步宣告資料庫及資料表 • DAO設計的第三步開啟資料庫及資料表 Dim db As Database ‘宣告資料庫 Dim rs As Recordset ‘宣告資料表 Set db=DBEngine.Workspaces(0).OpenDatabase(欲開啟的資料庫) ‘開啟資料庫 Set rs=db.OpenRecordset(欲開啟的資料表名稱, dbOpenTable) ‘開啟資料表
Constant Description dbOpenTable Opens a table-type Recordset object ( Microsoft Jet workspaces only). dbOpenDynamic Opens a dynamic-type Recordset object, which is similar to an ODBC dynamic cursor. ( ODBCDirect 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. DAO(續) • 開啟資料表的型式
牛刀小試(5) • 以DAO方式改寫牛刀小試(4)
宣告db為資料庫變數 rs為資料表變數 當按下「|<」鈕時,將第一筆記錄顯示於Text1(0)~(5)中 當按下「>|」鈕時,將最後一筆記錄顯示於Text1(0)~(5)中 當按下「<」鈕時,將指標指向上一筆記錄,並測試是否為 資料檔案的最頂端,假如是的話將指標指向第一筆記錄,將 指標所在記錄的資料顯示於Text1(0)~(5)中 當按下「>」鈕時,將指標指向下一筆記錄,並測試是否為 資料檔案的最尾端,假如是的話將指標指向最後一筆記錄, 將指標所在記錄的資料顯示於Text1(0)~(5)中 設定db為開啟資料庫db-test.mdb 而rs為以dbOpenTable型態來開啟 db中的資料表student 將指標指向第一筆資料錄,並將第 一筆記錄顯示在Text1(0)~(5)中
當按下Command5鈕時,假如鈕上的標題為「新增」當按下Command5鈕時,假如鈕上的標題為「新增」 ,則更改名稱為「確定」,同時將「刪除」鈕更名 為「取消」,然後呼叫cleartext清除Text1(0)~(5) 的內容,並執行AddNew的方法;否則,鈕上的標 題為「確定」時,更改名稱為「新增」,同時將 「取消」鈕更名為「刪除」,並將Text1(0)~(5)的 內容指派給各個欄位,最後執行Update的方法 當按下Command6鈕時,假如鈕上的標題為「刪除」 ,則顯示是否刪除的提示訊息,若確定刪除,則執行 Delete的方法,並執行Command1的動作;否則,鈕 上的標題為「取消」時,更改名稱為「刪除」,同時 將Command5鈕的標題更名為「新增」,Command7 的標題更名為「修改」
當按下Command7鈕時,假如鈕上的標題為「修改」當按下Command7鈕時,假如鈕上的標題為「修改」 ,則更改名稱為「確定」,同時將「刪除」鈕更名 為「取消」;否則,鈕上的標題為「確定」時,更改名稱為「修改」,同時將「取消」鈕更名為「刪除」 ,並將Text1(0)~(5)的內容指派給各個欄位,最後執行Update的方法 當按下Command8鈕時,先關閉以dbOpenTable型態開啟的資料表,再以dbOpenSnapshot型態來開啟student資料表,然後輸入欲查詢的姓名,以FindFirst方法找尋符合的記錄,假如找到的話,將每個欄位分別顯示於Text1(0)~(5),之後關閉資料表,改以dbOpenTable重新開啟資料表student 當按下Command9鈕時,顯示資料表的記錄總筆數 當按下Command10鈕時,顯示資料表的欄位個數
格子控制項(MSFlexGrid) • 也許你也發現到了,之前的範例都是在文字盒中顯示資料,假如碰到了同名同姓的狀況,該如何顯示資料? • 用Print敘述來顯示?也許是個好方法,不過似乎太落伍了! • 用MSFlexGrid來顯示? 酷
格子控制項(續) • 格子在哪裡?
1.格子由連續的欄與列所組成 2.欄與列交會的地方稱為儲存格(Cell) 3.儲存格分為固定與變動兩部分 a.固定:灰色部分,可用以顯示欄 及列的標題 b.變動:白色部分,用以顯示圖形 或文字資料 格子控制項(續) • 引入格子控制項 要多大就拉多大
格子控制項(續) • 常用的屬性 • Text:內容文字 • Picture:內容圖片 • Col:目前作用儲存格所在欄 • Row:目前作用儲存格所在列 • Cols:格子控制項的總欄位數 • Rows:格子控制項的總列數 • ColAlignment:欄位靠齊方式 • ColWidth:欄位寬度(以點[point]為單位) • RowHeight:列的高度(以點[point]為單位)
常數 值 描述 flexAlignLeftTop 0 資料行內容靠左、靠上對齊。 flexAlignLeftCenter 1 字串預設值。資料行內容靠左、居中對齊。 flexAlignLeftBottom 2 資料行內容靠左、靠下對齊。 flexAlignCenterTop 3 資料行內容居中、靠上對齊。 flexAlignCenterCenter 4 資料行內容置中、居中對齊。 flexAlignCenterBottom 5 資料行內容置中、靠下對齊。 flexAlignRightTop 6 資料行內容靠右、靠上對齊。 flexAlignRightCenter 7 數字的預設值。資料行內容靠右、居中對齊。 flexAlignRightBottom 8 資料行內容靠右、靠下對齊。 flexAlignGeneral 9 資料行內容採一般對齊方式之一。對於字串是「靠左、居中」對齊,數字則是「靠右、居中」對齊。 ColAlignment 欄位靠齊方式
牛刀小試(6) • 利用MSFlexGrid顯示九九乘法表
牛刀小試(6)---續 設定格子控制項的總欄位數為9,總列數為10, 令目前作用儲存格為第0列的0~8欄,分別設定 欄寬為500點、文字置中對齊,從第1欄開始依 序顯示2~9的數字為標題 令目前作用儲存格為第0欄的1~9列,從第1列開 始依序顯示1~9的數字為標題 將九九乘法的結果顯示於1~8欄與1~9列 交會的儲存格中
高階資料庫設計 SQL
何謂SQL • 一種與資料庫溝通的共通語言 • Structured Query Language • 唸成 sequel • 1970 年在 IBM 工作的 E.F. Codd,針對關聯式模型 ( relational model ),提出了抽象理論因此奠定了關聯式資料系統的基礎 • 演進 • SQL-87、SQL-89、SQL-92 以及目前最新的 SQL 3
SQL的三大類別 • 為了統一資料庫的基本語法,才訂定出標準的 SQL 語法,提供使用者一致的操作指令 • 一般而言,資料庫的語法 ( SQL ) 分為三大類別 • DDL ( Data Definition Language ) • DCL ( Data Control Language ) • DML ( Data Manipulation Language )
Data Definition Language • 定義資料庫物件使用的語法 • 常見的關鍵字 • Create • 建立資料庫的物件 • Alter • 變更資料庫的物件 • Drop • 刪除資料庫的物件
Data Control Language • 控制資料庫物件使用狀況的語法 • 常見的關鍵字 • Grant • 賦予使用者使用物件的權限 • Revoke • 取消使用者使用物件的權限 • Commit • Transaction 正常作業完成 • Rollback • Transaction 作業異常,異動的資料回復到 Transaction 開始的狀態
Data Manipulation Language • 維護資料庫資料內容的語法 • 常見的關鍵字 • Insert • 新增資料到 Table 中 • Update • 更改 Table 中的資料 • Delete • 刪除 Table 中的資料 • Select • 選取資料庫中的資料
SELECT 陳述式 • SELECT-list • 識別欄位 • FROM • 指定搜尋範圍 • WHERE • 搜尋準則 • ORDER BY • 排列結果
SELECT 陳述式(cont.) • GROUP BY • 將記錄分組統計 • HAVING • 於GROUP BY 所得的資料集中篩選所需記錄 • IN • 從SELECT的結果中再選取資料
SELECT 陳述式(cont.) • 選取需要的欄位 • 若要選取資料表中所有欄位時 • SELECT * FROM Student SELECT field1,field2,….. FROM tablename field n :需要的欄位 tablename:資料表格名稱
SELECT 陳述式(cont.) • 篩選記錄 SELECT field1,field2,….. FROM tablename WHERE criteria field n :需要的欄位 tablename:資料表格名稱 criteria:篩選條件 SELECT Name, Sex, Height FROM Student WHERE Height > 165
SELECT 陳述式(cont.) SELECT * FROM tablename WHERE filed BETWEEN a1 AND a2 tablename:資料表格名稱 field:欄位名稱 a1,a2:數值 • 篩選特定範圍欄位值 SELECT * FROM Student WHERE Height BETWEEN 160 AND 175
SELECT 陳述式(cont.) • 排序 SELECT field1,field2,….. FROM tablename ORDER BY sortorder field n :需要的欄位 tablename:資料表格名稱 sortorde:排序方式 SELECT Name, Sex, Height FROM Student ORDER BY Height ASC SELECT Name, Sex, Height FROM Student ORDER BY Height DESC
SELECT 陳述式(cont.) • 省略重複值 SELECTDISTINCT field1,field2,….. FROM tablename field n :需要的欄位 tablename:資料表格名稱 SELECT DISTINCT Name FROM Student
SELECT 陳述式(cont.) • 使用別名 SELECT field1 AS Alias1,field2 AS Alias2,… FROM tablename field n :需要的欄位 alias n :欄位的別名 tablename:資料表格名稱 SELECT Name AS Name1 FROM Student
SELECT 陳述式(cont.) SELECTTOP n field1,field2,… FROM tablename ORDER BY sortorder • 限定選取資料錄的筆數 SELECTTOP n PERCENT field1,field2,… FROM tablename ORDER BY sortorder field n :需要的欄位 tablename:資料表格名稱 sortorde:排序方式