1 / 29

第二十章 ActiveX Data Objects

第二十章 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) 資料庫

Download Presentation

第二十章 ActiveX Data Objects

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 前面第十六章,筆者已講述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相近。

  3. ADO與BDE的關係 • 前面第十五章,我們已說明Delphi的資料存取模式共有4種,分別是BDE、ADO、dbExpress及InterBase,其中BDE、ADO、dbExpress及InterBase稱為資料源元件。 • 於BDE模式中,我們已介紹使用Table、Query及Rave等元件展示、查詢、新增、修改、刪除及列印資料庫的內容。本單元則要使用ADO模式,重複完成以上資料庫的基本操作工作,讀者將不難發現,要使用ADO模式完成以上資料庫基本操作,只要將BDE標籤的元件以ADO標籤的元件代替即可。請看以下各節介紹。

  4. 20-1 ADO與資料連繫物件 • 前面16-1節,我們已使用BDE模式展示資料庫的內容,若使用ADO模式,則只要將BDE模式的Table元件以ADO模式的ADOTable元件取代即可,請看以下範例說明。

  5. 範例 20-1a • 請以ADOTable元件配合資料庫連繫元件,展示school.mdb的stugrade資料表。

  6. 20-2 資料庫編輯的方式 • 於BDE模式中,資料的編輯是使用Table與Query元件,於ADO模式,則有ADOTable與ADOQuery與之對應。

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

  8. 資料項 • 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 ;

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

  10. ADO移動記錄指標的方式如下表:

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

  12. 欄位編輯視窗 • 於表單的資料源元件圖項按二下,即可出現欄位編輯視窗,使用者可於欄位編輯視窗新增一些欄位物件。的ADOTable1Name、ADOTable1Chi及ADOTable1Eng即為新增的欄位物件,此時即可於程式中使用欄位物件存取資料項。例如,以下敘述可將ADOTable1Name的內容交由Edit1顯示。 Edit1.Text:=ADOTable1Name.AsString ;

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

  14. 記錄的新增 • 於資料表中欲新增一筆記錄,其方法為使用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 ;

  15. 範例 20-2c • 示範記錄的新增 (本例使用test1.mdb的grade資料表)。

  16. 記錄的刪除 • 刪除記錄的方法是Delete。其語法如下 ADOTable1.Delete; • 那到底是刪除那一筆記錄呢?答案是刪除記錄指標所指的記錄,請看以下範例。

  17. 範例 20-2d • 示範記錄的刪除 (資料表、表單均同上範例)

  18. 記錄的更正 • 記錄的更正是使用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 ;

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

  20. 記錄的搜尋 • 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,則記錄指標並不移動。

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

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

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

  24. 排序 • ADOTable元件使用Sort屬性進行排序,Sort屬性語法如下,預設值是升冪ASC,值得注意的是,ASC與DESC一律都必須 大寫才行 。 ADOTable1.Sort = ‘欄位名稱 <ASC/DESC>';

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

  26. 範例 20-2i • 示範ADOQuery的用法 (本例欲以DBGrid展示test1.mdb的grade資料表。

  27. 20-3 主副明細 • ADOConnection • 前面的ADOTable及ADOQuery均較適合一次開啟一個資料表,但是有些時候您必須同時開啟兩個資料表,此時若還是使用ADOTable或ADOQuery 開啟資料庫,則因要設兩次ConnectionString,所以您的資料庫將被兩個程式所連接而影響執行速度,所以若要同時間開啟兩個資料表,則應使用ADOConnection元件。 • 以下範例則示範如何使用ADOConnection元件連結兩個資料表,以進行主副明細查詢。

  28. 範例 20-3a • 示範主副明細查詢,主要資料表是test1.mdb的stuname,次要資料表是stugrd。

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

More Related