300 likes | 457 Views
第二十章 ActiveX Data Objects. 20-1 ADO 與資料連繫物件 20-2 資料庫編輯的方式 20-3 主副明細 20-4 報表的製作. 前面第十六章,筆者已講述 Borland Database Engine ( 簡稱 BDE) 模式的資料庫操作, BDE 主要 是存取 Borland 公司的 Paradox(*.db) 或 Dbase (*.dbf) 資料庫。本章的 ActiveX Data Objects( 以下簡稱 ADO) 則是微軟所大力推廣的資料庫存取模式,此種模式主要是存取 Access(*.mdb) 資料庫
E N D
第二十章 ActiveX Data Objects • 20-1 ADO與資料連繫物件 • 20-2 資料庫編輯的方式 • 20-3 主副明細 • 20-4 報表的製作
前面第十六章,筆者已講述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相近。
ADO與BDE的關係 • 前面第十五章,我們已說明Delphi的資料存取模式共有4種,分別是BDE、ADO、dbExpress及InterBase,其中BDE、ADO、dbExpress及InterBase稱為資料源元件。 • 於BDE模式中,我們已介紹使用Table、Query及Rave等元件展示、查詢、新增、修改、刪除及列印資料庫的內容。本單元則要使用ADO模式,重複完成以上資料庫的基本操作工作,讀者將不難發現,要使用ADO模式完成以上資料庫基本操作,只要將BDE標籤的元件以ADO標籤的元件代替即可。請看以下各節介紹。
20-1 ADO與資料連繫物件 • 前面16-1節,我們已使用BDE模式展示資料庫的內容,若使用ADO模式,則只要將BDE模式的Table元件以ADO模式的ADOTable元件取代即可,請看以下範例說明。
範例 20-1a • 請以ADOTable元件配合資料庫連繫元件,展示school.mdb的stugrade資料表。
20-2 資料庫編輯的方式 • 於BDE模式中,資料的編輯是使用Table與Query元件,於ADO模式,則有ADOTable與ADOQuery與之對應。
ADOTable • ADOTable與Table都是一種逐一瀏覽的方式編輯資料庫,此種資料編輯方式,本書歸納以下幾個單元,分別是資料項的表示、記錄指標的移動、記錄的新增、記錄的刪除、記錄的更正、記錄的搜尋及記錄的排序。
資料項 • ADOTable元件的資料項表示法如下,其中FieldByName與Fields應加型態轉換函式,轉為目的變數型態。 可用的轉換函數有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 ;
當我們使用ADOTable物件開啟資料表時,不管記錄的多寡,均存在一個稱為記錄指標的東西,指向資料表的第一筆記錄,我們稱此記錄為作用中的記錄。此時,若進行資料項的編輯,則其操作對象即為此記錄指標所指的記錄,如下圖所示。當我們使用ADOTable物件開啟資料表時,不管記錄的多寡,均存在一個稱為記錄指標的東西,指向資料表的第一筆記錄,我們稱此記錄為作用中的記錄。此時,若進行資料項的編輯,則其操作對象即為此記錄指標所指的記錄,如下圖所示。 記錄指標
範例 20-2a • 示範各種資料項的用法與記錄指標的移動
欄位編輯視窗 • 於表單的資料源元件圖項按二下,即可出現欄位編輯視窗,使用者可於欄位編輯視窗新增一些欄位物件。的ADOTable1Name、ADOTable1Chi及ADOTable1Eng即為新增的欄位物件,此時即可於程式中使用欄位物件存取資料項。例如,以下敘述可將ADOTable1Name的內容交由Edit1顯示。 Edit1.Text:=ADOTable1Name.AsString ;
範例 20-2b • 請以欄位物件重作以上範例
記錄的新增 • 於資料表中欲新增一筆記錄,其方法為使用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 ;
範例 20-2c • 示範記錄的新增 (本例使用test1.mdb的grade資料表)。
記錄的刪除 • 刪除記錄的方法是Delete。其語法如下 ADOTable1.Delete; • 那到底是刪除那一筆記錄呢?答案是刪除記錄指標所指的記錄,請看以下範例。
範例 20-2d • 示範記錄的刪除 (資料表、表單均同上範例)
記錄的更正 • 記錄的更正是使用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 ;
範例 20-2e • 示範記錄的更正(資料表同上範例)。
記錄的搜尋 • ADO模式中記錄的搜尋,其方法有Locate及Filter,分別說明如下: • Locate Locate 的語法如下: function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; 以上語法說明如下: • KeyFields:欲搜尋的欄位名稱。 • KeyValues:欲搜尋的欄位值。 • TLocateOptions:搜尋方式,其型態是集合型態。如下所示,其中loCaseInsensitive是表示搜尋時大小寫不分,loPartialKey是部份字元符合即可, 例如輸入“學樂”,若有“學樂出版社”或“學樂出版有限公司”,均符合搜尋條件。 type TLocateOption = (loCaseInsensitive, loPartialKey); TLocateOptions = setof TLocateOption; • 當搜尋成功時,Locate函數傳回True,並將記錄指標移到合乎條件的第一筆記錄;若傳回False,則記錄指標並不移動。
範例 20-2f • 示範記錄的搜尋。
Filter • 上一單元的Locate較適合做字串的搜尋,若是數值的搜尋,例如 ‘chi>60’或 ‘chi<80’時,則無法使用Locate,像這種搜尋某一範圍的動作,則較適合使用Filter。Filter的語法如下: ADOTable1.Filter := '數值欄位名稱 關係運算子 條件值' ; ADOTable1.Filter :=True ;
範例 20-2g • 示範Filter屬性的用法。
排序 • ADOTable元件使用Sort屬性進行排序,Sort屬性語法如下,預設值是升冪ASC,值得注意的是,ASC與DESC一律都必須 大寫才行 。 ADOTable1.Sort = ‘欄位名稱 <ASC/DESC>';
範例 20-2h • 示範Sort屬性的用法。
範例 20-2i • 示範ADOQuery的用法 (本例欲以DBGrid展示test1.mdb的grade資料表。
20-3 主副明細 • ADOConnection • 前面的ADOTable及ADOQuery均較適合一次開啟一個資料表,但是有些時候您必須同時開啟兩個資料表,此時若還是使用ADOTable或ADOQuery 開啟資料庫,則因要設兩次ConnectionString,所以您的資料庫將被兩個程式所連接而影響執行速度,所以若要同時間開啟兩個資料表,則應使用ADOConnection元件。 • 以下範例則示範如何使用ADOConnection元件連結兩個資料表,以進行主副明細查詢。
範例 20-3a • 示範主副明細查詢,主要資料表是test1.mdb的stuname,次要資料表是stugrd。
20-4 報表的製作 • ADO報表的製作與BDE模式的報表製作完全相同,只要將資料源物件以ADO標籤的元件替換即可。以下僅以列印test1.mdb的grade資料表示範ADO報表製作,其餘請自行參考第17章。