29
第第第第 ActiveX Data Objec ts 20-1 ADO 第第第第第第第 20-2 第第第第第第第第 20-3 第第第第 20-4 第第第第第

第二十章 ActiveX Data Objects

Embed Size (px)

DESCRIPTION

第二十章 ActiveX Data Objects. 20-1ADO 與資料連繫物件 20-2 資料庫編輯的方式 20-3 主副明細 20-4 報表的製作. 前面第十六章,筆者已講述 Borland Database Engine ( 簡稱 BDE) 模式的資料庫操作, BDE 主要 是存取 Borland 公司的 Paradox(*.db) 或 Dbase (*.dbf) 資料庫。本章的 ActiveX Data Objects( 以下簡稱 ADO) 則是微軟所大力推廣的資料庫存取模式,此種模式主要是存取 Access(*.mdb) 資料庫 - PowerPoint PPT Presentation

Citation preview

Page 1: 第二十章   ActiveX Data Objects

第二十章 ActiveX Data Objects 20-1 ADO 與資料連繫物件 20-2 資料庫編輯的方式 20-3 主副明細 20-4 報表的製作

Page 2: 第二十章   ActiveX Data Objects

前面第十六章,筆者已講述 Borland Database Engine ( 簡稱 BDE) 模式的資料庫操作, BDE 主要

是存取 Borland 公司的 Paradox(*.db) 或 Dbase (*.dbf) 資料庫。本章的 ActiveX Data Objects( 以下簡稱 ADO) 則是微軟所大力推廣的資料庫存取模式,此種模式主要是存取 Access(*.mdb) 資料庫

由於 Access 資料庫日益普及,所以 Borland 公司的 Delphi 及 C++Builder 亦支援此模式,故可以使用 ADO 封裝的元件撰寫資料庫程式。ADO 的資料來源元件,其中 ADOTable 及 ADOQuery 的功能與 BDE 的 Table 及 Query 相近。

Page 3: 第二十章   ActiveX Data Objects

ADO 與 BDE 的關係 前面第十五章,我們已說明 Delphi 的資料存取

模式共有 4 種,分別是 BDE 、 ADO 、 dbExpress 及 InterBase ,其中 BDE 、 ADO 、 dbExpress 及 InterBase 稱為資料源元件。

於 BDE 模式中,我們已介紹使用 Table 、 Query 及 Rave 等元件展示、查詢、新增、修改、刪除及列印資料庫的內容。本單元則要使用 ADO模式,重複完成以上資料庫的基本操作工作,讀者將不難發現,要使用 ADO 模式完成以上資料庫基本操作,只要將 BDE 標籤的元件以 ADO 標籤的元件代替即可。請看以下各節介紹。

Page 4: 第二十章   ActiveX Data Objects

20-1 ADO 與資料連繫物件 前面 16-1 節,我們已使用 BDE 模式展示

資料庫的內容,若使用 ADO 模式,則只要將 BDE 模式的 Table 元件以 ADO 模式的 ADOTable 元件取代即可,請看以下範例說明。

Page 5: 第二十章   ActiveX Data Objects

範例 20-1a 請以 ADOTable 元件配合資料庫連繫元件,

展示 school.mdb 的 stugrade 資料表。

Page 6: 第二十章   ActiveX Data Objects

20-2 資料庫編輯的方式 於 BDE 模式中,資料的編輯是使用 Table

與 Query 元件,於 ADO 模式,則有 ADOTable 與 ADOQuery 與之對應。

Page 7: 第二十章   ActiveX Data Objects

ADOTable ADOTable 與 Table 都是一種逐一瀏覽的

方式編輯資料庫,此種資料編輯方式,本書歸納以下幾個單元,分別是資料項的表示、記錄指標的移動、記錄的新增、記錄的刪除、記錄的更正、記錄的搜尋及記錄的排序。

Page 8: 第二十章   ActiveX Data Objects

資料項 ADOTable 元件的資料項表示法如下,其中 FieldByName 與 F

ields 應加型態轉換函式,轉為目的變數型態。可用的轉換函數有 AsVariant 、 AsString 、 AsInteger 、 AsFloat 、 AsCurrency 、 AsDateTime 及 AsBoolean 。例如要將資料項放入 Text1 物件,則應加上 AsString 轉換為 String 型態。以下程式片段是將欄位順序是 0 的 Name 欄位放入 Edit1物件。

Edit1.Text:=ADOTable1.FieldValues['Name'];Edit1.Text:=ADOTable1['Name'];Edit1.Text:=ADOTable1.FieldByName('Name').AsString;Edit1.Text:=ADOTable1.Fields[0].AsString;

若已將欄位物件加入欄位編輯器,則亦可使用欄位物件名稱代表某一資料項,例如以下敘述是存取 Name 資料項的內容。

Table1Name.AsString ;

Page 9: 第二十章   ActiveX Data Objects

記錄指標 當我們使用 ADOTable 物件開啟資料表時,不管記錄的

多寡,均存在一個稱為記錄指標的東西,指向資料表的第一筆記錄,我們稱此記錄為作用中的記錄。此時,若進行資料項的編輯,則其操作對象即為此記錄指標所指的記錄,如下圖所示。BOF

 

---- 記錄指標     

EOF

Page 10: 第二十章   ActiveX Data Objects

ADO 移動記錄指標的方式如下表:方法 or 屬性 說 明

First() 將記錄指標移到資料表的第一筆記錄。Last() 將記錄指標移到資料表的最後一筆記錄。

Next() 將記錄指標移到下一筆記錄。Perior() 將記錄指標移到上一筆記錄。

MoveBy(n) 將記錄指標向上 (n<0) 或向下 (n>0) 移 n 筆記錄。

BOF 測試記錄指標是否在檔案開始處。True : 記錄指標位在資料表第一筆。

False : 記錄指標不是在資料表的第一筆。EOF 測試記錄指標是否在檔案結束處。

True : 記錄指標位在資料表最後一筆。

False : 記錄指標不是在資料表的最後第一筆。GetBookmark() 將資料表目前的記錄指標位置存在書籤物件內。

GotoBookmark() 將記錄指標移到指定的書籤位置。FreeBookmark() 釋放指定的書籤物件。

Page 11: 第二十章   ActiveX Data Objects

範例 20-2a 示範各種資料項的用法與記錄指標的移動

Page 12: 第二十章   ActiveX Data Objects

欄位編輯視窗 於表單的資料源元件圖項按二下,即可出現欄位

編輯視窗,使用者可於欄位編輯視窗新增一些欄位物件。的 ADOTable1Name 、 ADOTable1Chi 及 ADOTable1Eng 即為新增的欄位物件,此時即可於程式中使用欄位物件存取資料項。例如,以下敘述可將 ADOTable1Name 的內容交由 Edit1顯示。

Edit1.Text:=ADOTable1Name.AsString ;

Page 13: 第二十章   ActiveX Data Objects

範例 20-2b 請以欄位物件重作以上範例

Page 14: 第二十章   ActiveX Data Objects

記錄的新增 於資料表中欲新增一筆記錄,其方法為使用 Insert 及 Post 方法,

其中 Insert 是告訴資料庫即將新增記錄、 Post 是將位於記憶體緩衝區的資料回存硬碟。其中資料項的表示,本例使用 [' 欄位名稱 '] ,讀者可自行使用上一單元所介紹的其它資料項表示法。

ADOTable1.Insert ;ADOTable1.[' 欄位名稱 1']:= 欄位值 ;ADOTable1.[' 欄位名稱 2']:= 欄位值 ;.ADOTable1.Post ;

以下程式片段,可於 Test1.mdb 的 grade 資料表新增一筆記錄。ADOTable1.Insert ;ADOTable1['name']:= '謝承佑 ';ADOTable1['chi']:=92;ADOTable1['eng']:=88;ADOTable1.Post ;

Page 15: 第二十章   ActiveX Data Objects

範例 20-2c 示範記錄的新增

( 本例使用 test1.mdb 的 grade 資料表 ) 。

Page 16: 第二十章   ActiveX Data Objects

記錄的刪除 刪除記錄的方法是 Delete 。其語法如下

ADOTable1.Delete; 那到底是刪除那一筆記錄呢 ?答案是刪除

記錄指標所指的記錄,請看以下範例。

Page 17: 第二十章   ActiveX Data Objects

範例 20-2d 示範記錄的刪除

( 資料表、表單均同上範例 )

Page 18: 第二十章   ActiveX Data Objects

記錄的更正 記錄的更正是使用 Edit 及 Post 的方法,其語法如下:

ADOTable1.Edit ; ADOTable1.[' 欄位名稱 1']; ADOTable1.[' 欄位名稱 2']; ADOTable1.[' 欄位名稱 n'];ADOTable1.Post ;

以下程式片段可更正 grade 資料表的記錄指標所在記錄。ADOTable1.Edit ; ADOTable1.['name']:= '孫大明 '; ADOTable1.['chi']:=22; ADOTable1['eng']:=33;ADOTable1.Post ;

以下程式片段可更正 DBEdit 元件所輸入的內容。ADOTable1.Edit ; ADOTable1.['name']:=DBEdit1.Text; ADOTable1.['chi']:= DBEdit2.Text; ADOTable1.[ 'eng']:= DBEdit3.Text;ADOTable1.Post ;

Page 19: 第二十章   ActiveX Data Objects

範例 20-2e 示範記錄的更正 ( 資料表同上範例 ) 。

Page 20: 第二十章   ActiveX Data Objects

記錄的搜尋 ADO 模式中記錄的搜尋,其方法有 Locate 及 Filter ,分別說明如下: Locate

Locate 的語法如下: function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean;

以上語法說明如下:1. KeyFields:欲搜尋的欄位名稱。2. KeyValues:欲搜尋的欄位值。3. TLocateOptions:搜尋方式,其型態是集合型態。如下所示,其中 loCaseInsensi

tive 是表示搜尋時大小寫不分, loPartialKey 是部份字元符合即可,例如輸入“學樂”,若有“學樂出版社”或“學樂出版有限公司”,均符合搜尋條件。

type TLocateOption = (loCaseInsensitive, loPartialKey); TLocateOptions = setof TLocateOption;

當搜尋成功時, Locate 函數傳回 True ,並將記錄指標移到合乎條件的第一筆記錄;若傳回 False ,則記錄指標並不移動。

Page 21: 第二十章   ActiveX Data Objects

範例 20-2f 示範記錄的搜尋。

Page 22: 第二十章   ActiveX Data Objects

Filter 上一單元的 Locate較適合做字串的搜尋,若是數值的搜尋,例如 ‘ chi>60’ 或 ‘ chi<80’ 時,則無法使用 Locate ,像這種搜尋某一範圍的動作,則較適合使用 Filter 。 Filter 的語法如下:ADOTable1.Filter := ' 數值欄位名稱 關係運算子 條件值 ' ;

ADOTable1.Filter :=True ;

Page 23: 第二十章   ActiveX Data Objects

範例 20-2g 示範 Filter屬性的用法。

Page 24: 第二十章   ActiveX Data Objects

排序 ADOTable 元件使用 Sort屬性進行排序,

Sort屬性語法如下,預設值是升冪 ASC ,值得注意的是, ASC 與 DESC 一律都必須大寫才行 。

ADOTable1.Sort = ‘欄位名稱<ASC/DESC>';

Page 25: 第二十章   ActiveX Data Objects

範例 20-2h 示範 Sort屬性的用法。

Page 26: 第二十章   ActiveX Data Objects

範例 20-2i 示範 ADOQuery 的用法

( 本例欲以 DBGrid 展示 test1.mdb 的 grade 資料表。

Page 27: 第二十章   ActiveX Data Objects

20-3 主副明細 ADOConnection 前面的 ADOTable 及 ADOQuery均較適合一次

開啟一個資料表,但是有些時候您必須同時開啟兩個資料表,此時若還是使用 ADOTable 或 ADOQuery 開啟資料庫,則因要設兩次 ConnectionString ,所以您的資料庫將被兩個程式所連接而影響執行速度,所以若要同時間開啟兩個資料表,則應使用 ADOConnection 元件。

以下範例則示範如何使用 ADOConnection 元件連結兩個資料表,以進行主副明細查詢。

Page 28: 第二十章   ActiveX Data Objects

範例 20-3a 示範主副明細查詢,主要資料表是 test1.

mdb 的 stuname ,次要資料表是 stugrd 。

Page 29: 第二十章   ActiveX Data Objects

20-4 報表的製作 ADO 報表的製作與 BDE 模式的報表製作

完全相同,只要將資料源物件以 ADO 標籤的元件替換即可。以下僅以列印 test1.mdb 的 grade 資料表示範 ADO 報表製作,其餘請自行參考第 17章。