CBuilder利用dbExpress开发资料库程式.ppt

上传人:小飞机 文档编号:6502827 上传时间:2023-11-07 格式:PPT 页数:56 大小:258KB
返回 下载 相关 举报
CBuilder利用dbExpress开发资料库程式.ppt_第1页
第1页 / 共56页
CBuilder利用dbExpress开发资料库程式.ppt_第2页
第2页 / 共56页
CBuilder利用dbExpress开发资料库程式.ppt_第3页
第3页 / 共56页
CBuilder利用dbExpress开发资料库程式.ppt_第4页
第4页 / 共56页
CBuilder利用dbExpress开发资料库程式.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《CBuilder利用dbExpress开发资料库程式.ppt》由会员分享,可在线阅读,更多相关《CBuilder利用dbExpress开发资料库程式.ppt(56页珍藏版)》请在三一办公上搜索。

1、第十八章 利用dbExpress開發 資料庫程式,dbExpress為C+Builder 6後才新增加的資料庫連結方式,透過一系列輕量級的驅動程式來達到和資料庫快速連結的目的,而最主要的目的則是為了和Kylix相容。Kylix為Borland推出的Linux平台下程式開發軟體,透過C+或Object Pascal語法的使用讓C+Builder/Delphi的使用者能快速的開發或移植程式到Linux平台上,做到Write Once,Run Everywhere的最終目標,所以dbExpress的推出主要在克服BDE、ADO不相容於Linux的缺點,此外,dbExpress連結方式也因為具有免事先

2、設定、攜帶容易、速度快和消耗資源少等優點而成為Borland公司目前全力支援的連結架構。,大綱,18-1dbExpress連結簡介18-2SQLConnection元件18-3SQLDataSet元件18-4SQLQeury元件18-5SQLTable元件18-6SQLMonitor元件的使用,18-1.dbExpress連結簡介,dbExpress因為在效能和使用上都有不錯的表現而成為Borland公司目前全力支持的連結方式,不論是Delphi、Kylix和C+Builder 都可以看到該連結元件的蹤影,而對於要開發能適用於Windows和Linux兩個作業系統下資料庫程式的程式設計師來說,

3、使用dbExpress更是目前唯一可行的方式,和傳統的BDE連結方式相比,該架構最大的不同在於採用單向指標和取消了緩衝記憶體的使用,而非過去的靠緩衝儲存器輔助來實作雙向指標,雖然換來效能上的提昇,但也相對了增加一些使用上的限制,底下為該架構和傳統BDE所不同的地方只支援資料集合中的First和Next方法。因為單向指標的限制導致指標在資料集合內只能單向的往下移動和回到第一筆資料的位置,而無法像雙向指標可以自由的往上或往下移動指標。,18-1.dbExpress連結簡介,沒有對編輯模式的內建支援。因為過去對資料集合內記錄的修改(Edit方法)需要額外緩衝記憶體的支援來儲存這些修改動作,但是由於d

4、bExpress本身並沒有使用到緩衝記憶體,所以自然無法執行過去的編輯模式,而解決方式則是使用SQL語法中的Update來直接進行修改的動作,或是透過其他使用緩衝記憶體的元件來輔助,如連結資料集合至ClientDataSet元件。不支援資料集合內的Filter屬性,也就是說無法對傳回來的資料集合設定過濾條件,因為過濾器的使用同樣也需要緩衝記憶體的支援,所以當你在dbExpress連結方式中使用Filter屬性將會觸發例外處理的產生,解決的方式是使用SQL語法直接對遠端資料庫下過濾條件的設定,而非等資料集合已經形成後再進行篩選的動作。不支援Lookup欄位的設定,因為Lookup欄位同樣需要使用

5、緩衝記憶體來儲存相關的欄位值。,18-1.dbExpress連結簡介,綜合以上的使用限制可以知道,所有用到緩衝記憶體的資料集合屬性和方法在dbExpress下是不被允許的,所以對於需要緩衝記憶體輔助的感知元件當然也無法使用,包括最為熟知的DBGrid、DBLookupListBox和DBLookupComboBox等元件,不過,如果不考慮這些限制的話,dbExpress因為單向指標的使用而成為C+Builder下最快速的資料連結機制,且在使用和安裝部署上亦是最為簡單的。所有dbExpress元件皆位在元件樣版內的dbExpress頁次中,功能不外乎和資料庫相連、對資料庫進行存取和傳回指向資料集

6、合的單向指標。,18-1.dbExpress連結簡介,簡略介紹各元件功能如下:SQLConnection元件負責使用dbExpress連結方式和資料庫建立連結的管道,如果讀者熟悉ADO元件的話,該元件的功能類似ADOConnection。SQLDataSet元件C+Builder提供的四個單向資料集合元件之一,同時也是四個之中最一般化的元件,不論有無回傳資料集合的指令皆可透過CommandText屬性的指定加以執行,相當類似於ADODataSet元件的使用方式。SQLTable元件讀取表格為主的資料集合元件,透過指定表格名稱的方式來讀取資料,而回傳的資料集合僅能透過First和Next方法進行

7、檢視。,18-1.dbExpress連結簡介,SQLQuery元件查詢形式的資料集合元件,也就是完全透過SQL語法的方式對資料庫下執行指令,包括回傳資料集合的Select指令或是沒有回傳集合的DDL語法。SQLStoredProc元件該元件的功能在於執行資料庫內定義的Stored Procedure,並接收Stored Procedure所傳回來的資料集合或執行結果。,18-2.SQLConnection元件,SQLConnection元件負責和資料庫間的連結建立,與BDE連結不同的是:它不需要BDE Administrator之類工具的資料庫連結設定,而採用和ADO相似的設定方式,至於詳細的

8、設定步驟則分為1.驅動程式的指定和2.參數的傳遞驅動程式的指定:使用dbExpress連結所需要的資料庫驅動程式分為兩個檔案:一個是dbExpress本身的驅動程式,為一個動態連結函式庫的DLL檔,根據使用的資料庫不同而對應到不同的DLL檔,預設提供INTERBASE、ORACLE、MYSQL和DB2四種資料庫的驅動程式版本,對應的DLL檔案分別為dbexpint.dll、dbexpora.dll、dbexpmys.dll和dbexpdb2.dll另外一個則為資料庫廠商對於Client端提供的動態聯結函式庫(DLL),也是隨著不同廠商而不同。不過,使用者其實並不需要在意究竟是使用了上述的哪兩個

9、DLL檔,因為當我們設定SQLConnection的DriverName屬性時,SQLConnection會根據dbxdrivers.ini自動選擇對應的DLL檔來使用。,18-2.SQLConnection元件,參數的傳遞指定了驅動程式後,便需要透過參數的傳遞設定連結的資料庫,這些常用的參數包括Database(資料庫名稱)、User Name(使用者名稱)、Password(登入密碼)、Host Name(連線主機)等,不同資料庫的參數設定內容不盡相同。為了設定方便,當指定DriverName屬性後,SQLConnection會根據DriverName的設定值提供對應的參數列表供設定者參考

10、。這些參數中,以Database參數為最基本且必備的設定,該Database參數值來源隨資料庫的種類而不盡相同,像INTERBASE的Database便是根據.gdb檔案的名稱來決定,Oracle則根據TNSNames.ora中的設定,至於DB2則為Client端的節點名稱(node name)。上述的設定還可透過連結編輯器的輔助來省去我們設定的麻煩,如下一小節中所述。,18-2-1.連結編輯器的使用,雙擊表單上的SQLConnection元件開啟連結編輯器的設定畫面,如右圖所示,在預設的畫面中,會提供五個代表不同資料庫的連結名稱(Connection Name)供使用者直接進行設定。在此,我

11、們選擇建立一個新的連結名稱來介紹連結編輯器的使用方式,請點選游標所指的按鈕以建立一個新的連結。,18-2-1.連結編輯器的使用,按下【+】的按鈕後便會彈出如下圖所示的對話框,在對話框中要求設定的資料庫的驅動程式,即連結的資料庫類型,共有 DB2、INTERBASE、Informin、MySQL、Oracle五種不同的驅動程式可供選擇,除此,在Connection Name輸入框中輸入該連結的識別名稱,這裡我們以MySQL為示範,Connection Name為Example。,選擇驅動程式類型,18-2-1.連結編輯器的使用,按下【OK】按鈕後對該連結進行細步設定,畫面如右圖所示:依照實際連結

12、的MySQL資料庫設定HostName(MySQL主機位置)Database(連結資料庫)User_Name(使用者名稱)Password(密碼)四個屬性值接著透過物件檢視器設定SQLConnection元件的VendorLib屬性值至libMySQL.dll路徑所在,如右圖所示:,說明:一般安裝資料庫所附的Client端軟體後,VendorLib屬性值的路徑會自動連結而不需額外指定。,18-2-1.連結編輯器的使用,回到連結設定畫面按下【】按鈕測試設定是否正確,登入資料庫後彈出如下圖畫面即表示連結成功。,18-2-2.SQLConnection的使用,在完成使用連結編輯器對資料庫的連結設定後

13、,透過SQLConnection連結資料庫便成為一個簡單的工作了,而設定SQLConnection最重要的部份就在於ConnectionName屬性值的指定,下面為該元件使用的基本三步驟。透過物件檢視器設定SQLConnection元件的ConnectionName屬性以指定連結的資料庫,至於ConnectionName屬性的設定來源則取決於連結編輯器中的紀錄。當ConnectionName屬性值選定後,DriverNmae、LibraryName和VendorLib三個屬性值會自動隨著ConnectionName設定而變動,並對應到之前在連結編輯器中的設定,因此,只要設定好Connectio

14、nName屬性值就代表完成了該元件的大部分設定,尤其是連結驅動程式的指定上。,18-2-2.SQLConnection的使用,透過LoginPrompt屬性的設定來控制密碼對話框的出現與否;倘若ConnectionName內容已經紀錄了使用者名稱和密碼的資訊,則可以設定LoginPrompt屬性為False以關閉密碼對話框,省去每次SQLConnection元件和資料庫連結時彈出密碼框的麻煩。設定Connected屬性值為True和遠端資料庫建立連線,至於KeepConnection屬性則設定該元件和資料庫之間是否永遠保持連結狀態,縱使沒有其他SQLTable、SQLDataSet或SQLQu

15、ery元件透過該元件和資料庫連結。,18-2-3.SQLConnection常用屬性,18-2-3.SQLConnection常用屬性,18-2-3.SQLConnection常用屬性,18-2-3.SQLConnection常用屬性,18-2-4.SQLConnection常用方法,CloneConnection此方法能產生一個相同的SQLConnection元件,當AutoClone屬性設為False時,可用此方法手動建立一個新的SQLConnection。CloseDataSets呼叫SQLConnection元件的CloseDataSets方法能關閉所有透過該SQLConnection

16、元件連結到資料庫的資料集合元件,但不影響SQLConnection元件本身和資料庫之間的連線。,18-2-4.SQLConnection常用方法,ExecuteSQLConnection元件除了建立連線外,亦可以直接對資料庫進行指令執行的動作,而這SQL語法的指令以不會回傳資料集合的DDL最為適合,因為SQLConnection本身並非資料集合元件,至於使用格式如下所示:SQL用來指定所要執行的SQL語法。Params設定SQL語法內使用的變數值。當SQL語法回傳資料集合時,透過ResultSet來記錄回傳集合的指標。不過建議讀者還是使用其他如SQLDataSet元件來處理資料集合回傳的應用。

17、最後,該函式會傳回資料庫中被該SQL語法影響的資料筆數。,18-2-4.SQLConnection常用方法,程式範例如下:,18-2-4.SQLConnection常用方法,ExecuteDirectExecuteDirect方法執行沒有變數傳入的SQL語法。當SQL語法內不含變數時,便可使用ExecuteDirect方法代替Execute,如果執行正確,回傳值為0,否則回傳dbExpress的錯誤編號。GetFieldNames針對某個資料表,呼叫GetFieldName可以回傳該資料表的所有欄位,使用方式如下:,18-2-4.SQLConnection常用方法,GetTableNames讀

18、取SQLConnection連結帳號所能存取的所有資料表名稱,並儲存在TStrings型態的變數下,而透過參數的指定亦可選擇是否要一併讀取系統資料表,使用方式如下:Close和OpenClose關閉SQLConnection和資料庫的連結,而Open則開啟和資料庫之間的連結。,18-2-4.SQLConnection常用事件,18-3.SQLDataSet元件,透過SQLConnection建立起資料庫連結後,便可使用dbExpress方式存取資料庫中的資料,而本節將介紹最基本的SQLDataSet元件,因為它不但允許直接指定資料表來顯示資料,也允許透過SQL語法對資料庫進行存取的動作,另外還

19、支援Stored Procedure的使用和接收Stored Procedure的回傳值,可說是包辦了所有存取遠端資料庫內容的動作。,18-3-1.基本設定,在SQLDataSet的使用上,若要對資料庫內的資料進行存取的動作,則整個設定不外乎選擇連結名稱、指定執行指令和執行指令三個步驟,各步驟簡述如下:選擇連結名稱在dbExpress中和資料庫的連結主要決定在連結名稱的設定上,所以第一步便是要決定透過哪個連結名稱和資料庫達到連結的目的,不過,因為SQLDataSet本身並不具備和資料庫直接連結的能力,所以我們要使用SQLConnection元件來達成間接連結的目的,也就是必須透過SQLConn

20、ection屬性的指定來選擇使用的SQLConnection元件,並利用SQLConnection元件的設定和資料庫進行連結,因此請開啟物件檢視器並設定SQLDataSet元件的SQLConnection屬性為你所欲使用的SQLConnection元件,當然,在設定前請先設定好SQLConnection元件的屬性。,18-3-1.基本設定,指定執行指令在選定連結名稱後,透過對CommandText屬性的指定來對資料庫下達執行指令。比較特殊的是,該CommandText並不侷限在SQL語法的使用,也允許指定資料表或預存函式的名稱,因此還必須靠CommandType屬性的配合來決定CommandT

21、ext的內容型態,底下為兩者之間的對應關係:,18-3-1.基本設定,SQL語法的使用範例則如下面程式碼所示:,18-3-1.基本設定,執行指令執行CommandText的內容。根據內容種類的不同有兩種主要的執行方法:Open和ExecSQLOpen方法負責執行會有資料集合回傳值的CommandText內容,像Select或是選取表格之類的動作便是透過Open來開啟ExecSQL則處理不具有回傳值的CommandText,像是Insert或是Update等,不過,和過去熟悉的ExecSQL所不同的是:SQLDataSet的ExecSQL為一個需要傳入布林值的函式,利用該傳入的布林值來設定是否直

22、接執行CommandText所指定的動作,倘若CommandText沒有參數的傳入則設定布林值為True來直接執行指令,否則應傳入布林值False對CommandText指令進行最佳化的動作,預設值為False。另外,CommandText內容被資料庫執行後,亦會透過ExecSQL函式傳回被影響的資料筆數。,18-3-1.基本設定,用法示範,18-3-2.SQLDataSet的存取動作,SQLDataSet元件為資料集合元件,所以除了不支援dbExpress單向指標的方法外,大致上的使用方式仍和傳統的資料集合元件相同,因此在存取欄位值的應用上亦和其他資料集合元件大同小異,不外乎透過Fields

23、、FieldByName和FieldValues;不過,或許是因為一些資料感知元件不支援dbExpress,導致使用這些方法來存取欄位值的機會比BDE或ADO連結方式多上許多,其中最明顯的就是必須用StringGrid之類的元件來取代DBGrid作為顯示資料集合的內容;此外,SQLDataSet元件亦提供了其他好用的方法來讀取更多的表格資訊,譬如GetFieldData和GetKeyFieldNames就分別提供了讀取資料表欄位和索引的功能。在下面我們以範例來說明SQLDataSet的使用方式。,18-3-2.SQLDataSet的存取動作,【範例18-1】根據選取欄位顯示表單內容透過GetT

24、ableNames方法和StringGrid元件的使用完成顯示表單內容的程式。而本章所有範例使用的資料表架構如下圖所示:,18-3-2.SQLDataSet的存取動作,表單畫面,重要元件屬性,18-3-2.SQLDataSet的存取動作,主要程式碼(參閱書附光碟)【執行結果】依照選定的顯示欄位,按下【Show】按鈕即可顯示資料表內容。,18-3-3.SQLDataSet常用屬性,18-3-3.SQLDataSet常用屬性,資料集合的其他屬性請參考BDE或ADO資料集合元件的說明。,18-3-4.SQLDataSet常用方法,ExecSQL和Open負責執行CommandText屬性值所設定的指

25、令,當會回傳資料集合時使用Open,否則使用ExecSQL,更詳細的說明請參考18-3-1小節。GetFieldData該方法能根據所使用的資料表傳回資料表內的所有欄位。ParamByName和Params屬性同樣都是用來傳遞或指定參數內容,只是該方法以參數名稱來指定參數值,非Params所使用的編號方式。,18-3-4.SQLDataSet常用方法,Next和First為dbExpress資料集合內,移動資料集合指標僅能使用的方法。因為dbExpress單向指標的緣故,所以過去資料集合中能使用的Prior、MoveBy和GotoBookmark等移動指標的方法皆無法使用。,18-4.SQLQ

26、uery元件,SQLQuery元件為使用SQL語法對資料庫進行存取動作的資料集合元件,在使用上和BDE下的Query 與ADO下的ADOQuery有著幾分類似,因此如果對於前面兩個元件已經有所認識的讀者來說,對該元件的上手也就變得簡單許多,不過由於該元件完全仰賴SQL語法來對連結的資料庫或資料表進行存取的動作,所以建議讀者在學習本元件前最好對SQL語法有一定的熟悉度。SQLQuery元件的基本操作和18-3介紹的SQLDataSet極為類似,透過SQLConnection屬性的指令完成和資料庫的連結設定,而SQL屬性則決定所要執行的SQL語法內容,而執行的方法則依回傳值的與否有Open和Exe

27、cSQL之分:Open限用於回傳資料集合的指令;ExecSQL則用於不會回傳資料集合的指令。,18-4-1.使用SQLQuery存取資料,【範例18-2】新增刪除資料表的內容透過SQLQuery元件的使用,允許使用者新增/刪除資料表中的資料。表單畫面,18-4-1.使用SQLQuery存取資料,主要程式碼(參閱書附光碟)【執行結果】在輸入框中填入資料,按下【輸入】按鈕即完成對資料表的輸入,而在StringGrid顯示框中雙擊滑鼠即可刪除所點選的那筆紀錄。,新增資料前,新增資料後,18-4-2.SQLQuery常用屬性,SQLQuery元件為資料集合元件,所以可使用繼承至資料集合元件的大部分屬性

28、。,18-5.SQLTable元件,SQLTable元件為直接指定資料表作為讀取依據的dbExpress資料集合元件。和SQLQuery相比,不需要對SQL語法有任何了解即可讀取資料表的內容是它最主要的優勢,但相對的,在複雜的存取應用上就顯得力不從心了,何況該資料集合只具備單純的唯讀功能,所以實際應用上的取捨還是決定在你對資料表格的動作而定,當然你也可以直接使用SQLDataSet元件來包辦SQLQuery和SQLTable兩個元件的工作。,18-5-1.SQLTable的基本操作,SQLTable元件的基本設定還是維持一貫的簡單原則,只需先透過SQLConnection屬性指定一個SQLCo

29、nnection元件作為連結的依據再利用TableName屬性決定資料表名稱即完成基本的操作,而若是透過物件檢視器來指定TableName屬性,物件檢視器還會根據所設定的SQLConnection屬性提供可用的資料表列表,可說是再方便不過了,最後再設定Active屬性為true即可讀取資料表的內容。,18-5-2.SQLTable的Master/Detail設定,不論是BDE中的Table元件、ADO中的ADOTable元件到dbExpress中的SQLTable元件,Borland皆貼心的提供了欄位編輯器供程式設計員使用,而透過欄位編輯器的快速拖曳功能,可以自動產生顯示欄位內容的資料感知元件

30、,避免因為重複設定所產生的錯誤,進而縮短程式的開發時間,詳細的使用方法請參考16-1-2節中的說明;不過由於SQLTable為單向指標的資料集合元件,所以並不支援在BDE和ADO中常使用到的Lookup欄位設定,但是仍可透過DataSource元件的輔助完成Master/Detail的資料庫程式開發。Master/Detail資料庫程式需要兩個資料集合元件的使用,其中一個為Master資料集合;另一個為Detail資料集合,兩者之間透過欄位設定對應的關係,因此Detail端指定Master資料來源就成為設定對應欄位的第一步:透過物件檢視器設定Detail資料集合的MasterSource屬性以

31、選擇Master資料表的來源,接著點選MasterFields屬性設定Detail/Master所要對應的欄位即完成了Master/Detail資料表的對應關係,18-5-2.SQLTable的Master/Detail設定,底下為設定步驟的流程:,SQLTable1,SQLTable2,DataSource1,18-5-2.SQLTable的Master/Detail設定,【範例18-3】Master/Detail的應用透過Master/Detail資料表的設定,建立employee和orders兩個資料表間的關聯:根據employee資料表內的員工編號查詢orders資料表內該員工所有的接

32、單紀錄。表單畫面,18-5-2.SQLTable的Master/Detail設定,說明:DBRadioGroup透過Items和Values屬性設定顯示值和資料表欄位值之間的關係。當Gender欄位值為“M”時,DBRadioGroup的“男”選項會呈現選取的狀態,反之,“女”呈線選取的狀態。SQLConnection設定請參考前面範例。DataSource元件的Name為DataSource1,設定其DataSet屬性為SQLTable1。,18-5-2.SQLTable的Master/Detail設定,主要程式碼(參閱書附光碟)【執行結果】,18-6.SQLMonitor元件,SQLMon

33、itor元件監視應用程式和資料庫之間的訊息傳遞情形,透過這些訊息的檢視可以了解dbExpress連結和資料庫實際的溝通方式,有助於程式除錯時對應用程式和資料庫間傳遞內容的了解:包括語法是否傳遞正確或是指令是否確實執行等,而本元件的作用和 BDE下提供的SQL Monitor工具極為類似,只不過SQL Monitor為一個應用程式,SQLMonitor為C+Builder內的一個元件。,18-6-1.基本使用,SQLMonitor主要針對程式除錯(Debug)之用,所以能提供的功能就相對有限,因此在元件設定上的變化也相對減少許多。以最基本的使用來說,你只要指定以下幾個屬性就可以利用該元件達到檢視

34、訊息的工作:SQLConnection:指定所要監視的SQLConnection連結,而不論SQLDataSet、SQLTable和SQLQuery等元件透過該SQLConnection元件和資料庫間的訊息傳遞都會被SQLMonitor紀錄。FileName:設定儲存監視訊息的檔案路徑,若不設定則不儲存於檔案中。AutoSave:設定是否自動儲存監視訊息至FileName所指定的檔案中。Active:設定SQLMonitor作動與否,當Active值為True時則開啟監視器。,18-6-1.基本使用,底下為在【範例18-3】中新增一個SQLMonitor元件所觀察到的訊息,可發現SQLTabl

35、e元件其實是把使用者所選取的資料表轉換成SQL語法後再送到資料庫中處理的。,18-6-2.屬性/事件說明,18-6-2.屬性/事件說明,透過上述屬性/事件的使用可以開發出和BDE連結中SQL Monitor相同功能的程式,而該程式最重要的部分在於利用OnLogTrace事件處理SQLMonitor元件接收到的訊息。程式碼如下所示,有興趣的讀者可以自行嘗試。,本章習題,習題試比較dbExpress和BDE連結方式的異同。dbExpress和資料庫連結的主要元件為何?又所使用的驅動程式可分為哪兩部分?試比較dbExpress的三個資料集合元件SQLDataSet、SQLQuery和SQLTable之間的異同。利用SQLMonitor元件實作可監視資料庫連線的程式,所有訊息利用Memo元件顯示。本章節介紹SQLTable元件的Master/Detail資料表設定。請試著以SQLQuery元件完成同樣的Master/Detail設定。提示:Detail端SQLQuery元件利用DataSource屬性指定Master端資料集合元件,並利用參數方式設定SQL語法的查詢內容來完成和Master資料表的對應關係。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号