收藏 分享(赏)

第十六章 C++ Builder 使用BDE元件开发资料库程式.ppt

上传人:hyngb9260 文档编号:8369698 上传时间:2019-06-23 格式:PPT 页数:91 大小:830.50KB
下载 相关 举报
第十六章 C++ Builder 使用BDE元件开发资料库程式.ppt_第1页
第1页 / 共91页
第十六章 C++ Builder 使用BDE元件开发资料库程式.ppt_第2页
第2页 / 共91页
第十六章 C++ Builder 使用BDE元件开发资料库程式.ppt_第3页
第3页 / 共91页
第十六章 C++ Builder 使用BDE元件开发资料库程式.ppt_第4页
第4页 / 共91页
第十六章 C++ Builder 使用BDE元件开发资料库程式.ppt_第5页
第5页 / 共91页
点击查看更多>>
资源描述

1、第十六章 使用BDE元件開發資料庫程式,在經過前一章的說明後,相信讀者對資料庫的架構與連結方式已經有初步的了解,所以本章將透過C+ Builder提供的BDE連結元件來帶領讀者開發屬於自己的資料庫程式,讓你感受C+ Builder對資料庫程式開發的強力支援。,大綱,16-1. 第一個資料庫應用程式 16-2. BDE的連結設定 16-3. Query元件的使用 16-4. Database元件的使用 16-5. 開發進階資料庫程式,16-1. 第一個資料庫應用程式,【操作實例16-1】第一個資料庫程式 Step 1. 新增一個專案並在專案的表單上加入DataSource、DBGrid、Tabl

2、e三個元件。這些元件分別位在Data Access、Data Controls和BDE頁次中,如下圖所示:,Data Access頁次,Data Controls頁次,BDE頁次,DataSource元件,DBGrid元件,Table元件,16-1. 第一個資料庫應用程式,表單畫面顯示如下,16-1. 第一個資料庫應用程式,Step 2. 設定Table元件的屬性值,設定DatabaseName為BCDEMOS。該名稱為C+ Builder安裝時所預設提供的BDE連結,此名稱連結到Program FilesCommon FilesBorland SharedData目錄下的Paradox類型資

3、料庫檔。,在TableName屬性值中設定所欲連結的資料表名稱,透過下拉選單的方式我們選擇employee.db這個資料表名稱,2.2,2.1,16-1. 第一個資料庫應用程式,Step 3. 設定DataSource元件的屬性值,設定DataSet 屬性值為Table1。 其中Table1為表單中Table元件的名稱。,Step 4. 設定DBGrid元件的DataSource屬性值DataSource1。 DataSource1為Step 3中DataSource元件的名稱。,16-1. 第一個資料庫應用程式,Step 5.回到Table元件的屬性設定,並設定Active屬性為True,設

4、定Active屬性為True後,employee.db資料表中的資料將自動顯示在DBGrid元件中。 這種不需執行程式即可看到資料內容的效果為C+ Builder Data Control元件的特色。,執行結果,第一個資料庫程式完成了!,16-1. 第一個資料庫應用程式,這樣的程式是否夠簡單呢? 不需要任何程式片段即完成一個資料庫程式。 所有效果都能透過元件拖拉和屬性設定來完成的原因在於連結資料庫和顯示資料內容部分的瑣碎細節都已經被C+ Builder所提供的元件處理掉了。 整個程式的執行流程為 Table元件利用BDE連結方式和BCDEMOS建立起連線。 讀取employee.db資料表的內

5、容形成一個資料集合。 接著再透過DataSource元件使Table內的資料集合得以傳到DBGrid元件。 DBGrid元件便根據傳來的資料集合做一個呈現的動作而得到我們所要的效果。,16-1. 第一個資料庫應用程式,接著對之前的程式稍作修改,在表單上再新增一個DBNavigator元件,並設定其DataSource屬性為DataSource1,則再次執行後即可利用DBNavigator元件所提供的按鈕來上下移動紀錄指標。除此,DBNavigator元件還提供新增紀錄、刪除紀錄等功能。,16-1-1. DataSource元件,在上一節我們使用到DataSource元件作為連結Table和DB

6、Grid元件的一個管道,然而該元件在資料庫程式中並非必要。底下我們介紹DataSource元件的真正用途和使用時機: 提供資料集合和Data Control(資料感知)元件溝通的管道,使得Data Control元件能顯示和編輯資料集合中的資料,而Data Control元件因為專門顯示資料集合中的資料,所以也稱為Data-aware資料感知元件。因此對於不使用Data Control元件來顯示資料集合的程式,便不需要DataSource元件。 連結Master/Detail主從關係的兩個資料集合,例如在我們顯示employee資料表時,只能顯示每個員工的所屬部門編號(EmpNo欄位),如果要

7、再根據這個部門編號去顯示部門名稱時,就必須根據每個員工的部門編號去department資料表中找尋對應的部門名稱。此時,employee和department兩個資料表就是所謂的Master/Detail主從關係,而這樣的應用也必須透過DataSource來達成。,16-1-1. DataSource元件,常用屬性,16-1-2. Table元件,Table為使用BDE連結下的一個資料存取元件,也是最簡單的資料存取元件,你可以透過設定所要連結的資料庫名稱(DatabaseName屬性)和資料表名稱(TableName屬性)在不使用任何SQL語法的情形下直接從資料庫中抓取資料表的資料。 對於簡單

8、的應用來說,使用Table元件是最快速的方法。,16-1-2. Table元件,常用屬性:,16-1-2. Table元件,16-1-2. Table元件,欄位編輯器:設定Table元件的欄位 雖然Table元件只需設定Database和Tablename就可以發揮它的基本功用,但是若要對Table元件作些變化的應用則必須了解整個Table元件的架構。 當Table元件讀取選定的資料表時,並不是把整個資料表上的所有欄位當作一個整體,而是以個別的Field(欄位)元件來記錄每個欄位內的資料,所以很顯然的我們可以根據這些分開的Field元件來對每個欄位進行設定,包括各別欄位的顯示格式和顯示標題等。

9、 欄位的設定會影響到所有以這個Table元件為資料集合的其他元件,包括資料感知元件。 直接使用Table元件時,該元件是使用預設的欄位設定。 雙擊選取的Table元件圖示後,即可開啟欄位編輯器對個別欄位進行設定。,16-1-2. Table元件,欄位編輯器 在第一次彈出的欄位編輯器中,因為預設值的關係我們看不到任何的欄位項目。此時,透過單擊滑鼠右鍵的方式來新增編輯器中的欄位,在這裡我們點選【Add all fields】(新增所有欄位)來對資料表格中的所有欄位進行設定,整個圖示如下圖所示:,單擊滑鼠右鍵,新增所有欄位,16-1-2. Table元件,欄位編輯器 當我們點選欄位編輯器中的任何欄位

10、時,便可以在Object Inspector(物件檢視器)中看到這些欄位的個別屬性設定狀況(如下圖),而這些屬性的作用如下表說明:,16-1-2. Table元件,欄位編輯器常用屬性,16-1-2. Table元件,欄位編輯器常用屬性因此針對不同欄位皆可以設定不同的屬性值,提供變化的彈性,而對於不想顯示的欄位名稱,除了設定Visible屬性為False來達成外,其實亦可直接從欄位編輯器中刪除該欄位名稱來達成同樣的效果。,16-1-2. Table元件,欄位編輯器的快速拖曳 C+ Builder的資料感知元件透過屬性的設定即可解決表單上資料顯示的問題,但是當資料表所要顯示的欄位一多或是使用的資料

11、感知元件數目一多時,設定屬性就成了一件麻煩事。為此,C+ Builder的欄位編輯器提供了非常好用的快速拖曳功能來簡化設定資料感知元件的動作,亦即允許程式設計師直接從欄位編輯器中拖曳所欲顯示的欄位至表單上,而C+ Builder會自動根據欄位的屬性和內容選取最適當的資料感知元件顯示欄位內容。使用方法如下頁圖示。,16-1-2. Table元件,欄位編輯器的快速拖曳 選取所要的欄位直接往表單上拖曳即可。,拖曳,16-1-3. DBNavigator元件,DBNavigator亦為Data Control(資料感知)元件,主要功用在於對資料集合內資料進行操作和維護的工作,其中的操作行為包括移動資料

12、集合內的指標以達成顯示不同筆記錄的目的,諸如顯示資料的第一筆紀錄、下一筆紀錄和最後一筆紀錄等,而維護資料集合的工作則包括了新增資料、刪除資料和調整狀態等工作,所以可說是涵蓋了資料集合中所有常用的操作動作,而這個元件和其他感知元件最大的不同在於它本身並不提供顯示資料的功能,所以必須搭配其他資料感知元件才能發揮它的功用,也因為它本身不負責顯示資料,所以該元件的外觀也和其他資料感知元件不甚相同,主要由十個不同功能的按鈕組成,如下圖顯示,這十個按鈕的功能由左至右介紹如下:,16-1-3. DBNavigator元件,16-1-3. DBNavigator元件,常用屬性 ConfirmDelete 因為

13、DBNavigator允許使用者對資料集合中的資料進行刪除的動作,為了避免誤刪的情形發生,DBNavigator提供了ComfirmDelete屬性用來設定當刪除資料時是否要出現確認的訊息。當設定為True時,會顯示確認訊息框供,反之則不會顯示任何確認訊息,預設值為True。,確認訊息框,16-1-3. DBNavigator元件,DataSource DataSource為所有資料感知元件皆要設定的屬性,指向你程式中的DataSource元件。 Flat 該屬性的主要功能在美化DBNavigator元件所顯示的畫面,用來設定DBNavigator各按鈕的浮動效果。所謂的浮動效果是指按鈕平常內

14、嵌在表單裡,當滑鼠游標移動到該按鈕時會出現突起來的效果。屬性值False為傳統的按鈕圖示,實際效果如下圖所示。,Flat=False,Flat=True,16-1-3. DBNavigator元件,Hints 在DBNavigator元件上,由於並沒有文字說明來告知使用者每個按鈕的功能,所以常常會有不知按鈕功能的情形。此時,透過Hints屬性來設定提示訊息便可改善這個缺點,而該屬性本身亦提供了一組英文提示訊息,只要設定ShowHint屬性為True即可使用。當然,你亦可在物件檢視器中雙擊DBNavigator元件的Hints屬性開啟String List Editor來編輯屬於自己的提示訊息,

15、如下圖所示:,16-1-3. DBNavigator元件,VisibleButton 在一般的元件上,透過Visible屬性的設定來決定該元件在表單上的顯示與否,同樣的DBNavigator也不例外。只是,對於含有十個按鈕的DBNavigator元件來說,若是只能設定十個按鈕的同時顯示與否則顯得缺乏彈性,所以DBNavigator元件還提供了另外一個屬性來分別設定這十個按鈕的顯示與否,這個屬性便是VisibleButton。該屬性包含十個子屬性,依序用來判斷DBNavigator元件上的各個按鈕顯示與否,當設定其中的一個子屬性值為True時便代表該子屬性所對應到的按鈕會顯示在整個畫面上,相反地

16、設定False則不會顯示該按鈕,右圖為該VisibleButton屬性的設定畫面,16-1-4. DBGrid元件,於需要一次顯示資料表內多筆欄位和資料的使用者來說,DBGrid無疑是最好的選擇。 常用屬性 Columns DBGrid元件內預設的顯示欄位取決於DataSource屬性設定的DataSource元件所連結的資料集合。以DataSource元件連結到Table元件為例,則其顯示的欄位由Table元件透過欄位編輯器設定後決定,然而,DBGrid元件在顯示欄位資料時,仍可透過Columns屬性來決定最後顯示的欄位。 除此,Columns屬性亦能針對其內的每個欄位做更進一步的設定,包括

17、顯示標題、欄位的背景顏色和顯示的字型等。只要在物件檢視器中按下Columns屬性或雙擊表單上的DBGrid元件透過彈出的對話框即可設定最後的顯示欄位與其顯示的格式。,16-1-4. DBGrid元件,Columns屬性設定步驟 在彈出的對話框內按下滑鼠右鍵選擇【Add】新增欄位或【Add All Fields】新增所有欄位來決定DBGrid元件的顯示欄位。其中【Add All Fields】選項會自動載入所連結資料集合的所有欄位。,16-1-4. DBGrid元件,單擊對話框內的欄位,透過物件檢視器對每個欄位的細部屬性進行設定,包括所要顯示的資料集合欄位、背景顏色、字型和可讀與否等,如下圖所示

18、:,16-1-4. DBGrid元件,每個欄位內的屬性設定說明如下,16-1-4. DBGrid元件,FieldCount 透過這個屬性回傳顯示的欄位數目。 FixedColor 設定DBGrid固定部分的顏色,預設值為clBtnFace,其中的固定部分指的是如標題列等不負責顯示資料集合內資料的部分。 SelectedField 傳回目前被使用者點選的欄位資料,為一個TField的型態,而在TField型態下,我們可以得到欄位的名稱和目前指標所指的欄位資料等。 TitleFont TitleFont設定整個欄位的標題字型,當然你也可以在每個欄位的屬性中分別對不同欄位字型進行設定。,16-1-4

19、. DBGrid元件,Options 設定DBGrid的細部選項,每個選項說明如下。,16-1-4. DBGrid元件,16-1-4. DBGrid元件,DBGrid元件常用事件 OnCellClick 當使用者按下DBGrid元件中的儲存格(Cell)時觸發,而且會傳入該儲存格所對應的欄位,為一TColumn型別,所以我們可利用傳入的欄位來得到一些像是欄位名稱與儲存格內容的訊息,用法如下:,16-1-4. DBGrid元件,OnColEnter 當點選某個欄位或使用Tab鍵進入某個欄位時所觸發的事件。和前面介紹的OnCellClick不同的是:OnColEnter亦會偵測鍵盤的事件,這也是為

20、什麼透過tab鍵的移動也會觸發此事件。簡言之,OnCellClick是滑鼠按鍵的事件,而OnColEnter則是進入DBGrid欄位就就會觸發的事件。若我們使用滑鼠點選DBGrid內的儲存格時,兩個事件都會被觸發,其中OnColEnter事件的觸發時機是在按下滑鼠的那一刻,而OnCellClick則是在滑鼠按鍵被釋放時觸發,兩者之間仍有稍微的不同。示範程式如下所示:,16-1-4. DBGrid元件,OnDrawColumnCell 在DBGrid元件呈現資料於表單畫面時觸發。DBGrid元件顯示資料的方式是透過Canvas屬性來設定顯示的內容,就如同畫家在畫布上作畫,只是我們畫的東西以資料集

21、合的資料為主,所以除了印上單純的文字資料外,你當然可以在這畫面上塗上一些不同的圖案和顏色。,16-2. BDE的連結設定,在15章我們曾經提過BDE連結的缺點就是必須對BDE進行額外的連結設定,而上一節我們使用C+ Builder預設提供的BCDEMOS作為Table元件連結的資料庫,也因此並未觸及到BDE連結的設定。但是,倘若我們需使用自己的DBMS或是資料檔時,設定BDE連結就成為必須的工作,所以本小節我們將介紹如何透過BDE Administrator設定屬於自己的BDE連結設定,以供諸如Table元件、Query元件和Database元件等來使用。,16-2-1. BDE Admini

22、strator元件,透過BDE進行連線必須先開啟所謂的BDE Administrator進行設定,而這個程式可經由【開始】【程式集】開啟,畫面如下所示,左邊Database頁次中顯示的內容為BDE Administrator現有的資料庫名稱,又稱為資料庫別名(Database Alias),但該名稱其實僅為一個對應的連結而非遠端資料庫的真實名稱,右邊則顯示了該組連結內的屬性設定,至於屬性的內容則隨資料庫不同而有所不同,若要在BDE Administrator內對連結進行修改或新增的動作,則請在Database頁次中按下滑鼠右鍵進行點選即可,16-2-2. Paradox連結設定,在BDE Ad

23、ministrator內的Databases分頁中按下滑鼠右鍵點選【NEW】建立一個新的資料庫連結,並在彈出的驅動程式對話框中選擇STANDARD,如下兩圖游標所示:,Step 1,Step 2,按下【OK】選定資料庫別名使用的驅動程式後,便會出現該資料庫別名的設定畫面,16-2-2. Paradox連結設定,在Database頁次內設定該資料庫別名的名稱,並在右邊的PATH欄位內設定資料庫存放的路徑,該路徑為一含有副檔名為db檔案的資料夾,當然你也可以在此指定網路上的存放位置,像是要連到Cherry電腦上的DB資料夾,則PATH欄位可寫成CherryDB,如此就可以省去必須先設定網路磁碟機的

24、麻煩,同時請注意Default Driver是否為PARADOX,因為Standard驅動程式的類型還包括dBase、FoxPro,畫面如下所示:,16-2-2. Paradox連結設定,完成上面的設定後,按下滑鼠右鍵選擇【Apply】來儲存該資料庫別名的設定,如下圖所示。至此新增連結設定即告完成,你亦可使用Database Desktop工具來檢查設定是否正確,而Database Desktop的使用方法請參考後面章節所述。,16-2-3. Microsoft SQL Server的連結設定,在建立Microsoft SQL Server的資料庫連結前,請先安裝Microsoft SQL S

25、erver的Client端程式(附於Microsoft SQL Server安裝程式內),接著開啟BDE Administrator程式並在Database頁次中新增一個資料庫別名,選擇使用的驅動程式類型為MSSQL,如下圖所示:,按下【OK】進入驅動程式的參數設定畫面,16-2-3. Microsoft SQL Server的連結設定,對下面的參數進行設定的動作: DATABASE NAME:設定遠端Microsoft SQL Server的資料庫名稱,強烈建議避免設定所謂的系統資料庫以確保Microsoft SQL Server的正常運作。 SERVER NAME:設定遠端Microsof

26、t SQL Server的電腦名稱或是IP 位址以供驅動程式找尋該台電腦。例如Microsoft SQL Server主機名稱為Cherry,而IP為10.113.1.189,則Server Name的設定可以為Cherry或是10.113.1.189;不過,透過電腦名稱的找尋方式僅限同一網域下的電腦。 USER NAME:該欄位用來輸入登入遠端SQL Server的使用者帳號,也可以省略待連結時再行輸入。 設定好上述參數後按下【Apply】以儲存該連結設定,接著便可雙擊該資料庫別名以測試Microsoft SQL Server連結是否正確,當Definition頁次中的欄位名稱字體變為粗體時

27、,表示連結正確,否則將會帶出錯誤訊息。,16-2-4. ODBC連結Microsoft Access的設定,由於BDE本身所提供的Microsoft Access驅動程式只支援Microsoft Access 97使用的Jet Engine,所以若用Microsoft Access 2000以後的版本將會發生連結錯誤的情形,而改善這種問題的辦法就是使用ODBC來取代BDE提供的驅動程式,方法如下所述。 首先必須進入ODBC的設定畫面:在Windows 98/Me環境下位於【控制台】內;在Windows 2000環境下位在【控制台】【系統管理工具】裡;在Windows XP環境下則位在【控制台】

28、【效能及維護】【系統管理工具】內,16-2-4. ODBC連結Microsoft Access的設定,雙擊ODBC圖示後,會顯示如下圖的對話框,在使用者資料來源名稱這個頁次中按下【新增】按鈕以新增一個資料來源。,接著,選擇Microsoft Access Driver(*.mdb)作為連結使用的驅動程式,該驅動程式提供和Microsoft Access資料庫的連結,如下所示。,16-2-4. ODBC連結Microsoft Access的設定,接著對Microsoft Access的連結細節進行設定,包括設定此資料來源的名稱和所存取的資料庫(如下圖所指)。所謂的資料來源名稱用來識別不同的資料庫

29、連結設定,所以你可以選擇一個好記的資料來源名稱以供自己辨識。下圖中就以AccessODBC作為資料來源的名稱,以後只要透過AccessODBC的資料來源指定,就可以讀取到該資料來源所指定的資料庫內容。,16-2-4. ODBC連結Microsoft Access的設定,按下資料庫的【選取】按鈕即可設定所要存取的資料庫,在此我們以Borland提供的範例檔為例,路徑為C:Program FilesCommon FilesBorland SharedDatabcdemos.mdb,設定完成後按下【確定】按鈕關閉對話框。,回到上層的視窗按下【確定】按鈕即完成整個ODBC的設定。此時開啟BDE Adm

30、inistrator將可發現剛才所設定的資料來源名稱已出現在左邊的Database頁次中,代表BDE Administrator已經自動抓取到透過ODBC所設定的資料來源了,16-2-4. ODBC連結Microsoft Access的設定,現在你可以在BDE Administrator內用滑鼠雙擊該資料來源名稱以測試是否能正確連結,並在彈出登入訊息時直接按下【OK】即可。,說明: Access預設的身分認證機制允許匿名使用者的登入,所以在登入訊息出現時可以直接以空白做為輸入,或是使用Access預設的User Name登入。Access預設的User Name是Admin而Password則

31、為空白。,Definition頁次的粗體字代表著資料庫的連結成功,16-2-5. ODBC連結Oracle的設定,在設定ODBC前,請先安裝Oracle的Client端程式並完成相關的設定,以Oracle 8.1.7來說必須先設定Net 8。 首先,和前一小節相同地透過ODBC資料管理員以新增一個使用者資料來源,只是此時我們選擇Oracle ODBC Driver選項為使用的ODBC驅動程式,該選項為安裝Oracle Clinet端軟體後才會增加的驅動程式選項,除此之外,也可以選擇內附在ODBC管理員中的Microsoft ODBC for Oracle選項作為連結Oracle的驅動程式,不過

32、即使使用Microsoft ODBC for Oracle驅動程式仍需安裝Client端程式。驅動程式選項如下圖所示。,16-2-5. ODBC連結Oracle的設定,選定後按下【完成】按鈕進入設定驅動程式連結的對話框(右圖所示)。 在Data Source Name欄位輸入一個代表該資料來源的名稱;在Service Name欄位輸入你欲連結的資料服務名稱,這裡的服務名稱為之前在Net8 Configuration下所設定的服務名稱。如果當初設定Net8時使用預設的服務名稱,則該服務名稱即等於遠端資料庫的Global Database Name。 輸入完成後按下【OK】鍵完成整個Oracle的

33、ODBC連結設定,而這個新增的連結也會出現在BDE Administrator的Databases頁次中。,16-2-6. ODBC連結MySQL的設定,MySQL為目前網路上最常使用的資料庫,配合PHP和Apache的使用幾乎成為了網路資料庫的鐵三角組合,而這股MySQL風潮也因為該產品便宜、安裝容易和效能不差慢慢普及到一般的資料庫程式應用上,並且發展出不同的作業系統版本。所以若是讀者想以MySQL作為後端的資料庫,或許可以考慮安裝Win32版本下的MySQL進行練習,不過在BDE Administrator內的設定卻必須靠ODBC的幫助來進行連結,因為BDE Administrator本身

34、並沒有提供MySQL的驅動程式。因此,在進行設定前請至MySQL的網站下載MyODBC以安裝MySQL的ODBC驅動程式,網址為http:/ ODBC連結MySQL的設定,解壓縮後按下setup.exe檔案即進入MyODBC的安裝畫面,如右圖所示,請選擇【Continue】按鈕繼續整個ODBC的安裝過程接著選擇所要安裝的ODBC驅動程式為MySQL,並按下【OK】按鈕確認,如右圖所示:,16-2-6. ODBC連結MySQL的設定,選定了所要安裝的驅動程式後,底下便會彈出一個資料來源的對話框,在此你可以對各種資料來源進行設定,就像在ODBC管理員中對資料來源進行設定般。不過,你會發現選項中出現

35、了一個sample-MySQL項目,這是一個MySQL的資料來源範本,代表著你已經可以對MySQL的驅動程式進行設定,底下我們就以sample-MySQL這個預設的資料來源名稱為範例來設定我們的MySQL資料來源,如下圖,16-2-6. ODBC連結MySQL的設定,在資料來源中選定了sample-MySQL後,按下右邊的【Setup】按鈕,將會帶出如右圖的對話框: Window DSN Name欄位為你想用來識別這個資料來源的名稱,預設值為sample-MySQL。 MySQL host欄位填入該資料來源的電腦名稱或是IP位址。 MySQL database name欄位指定你所要開啟的資料

36、庫。 User和Password欄位填入登入MySQL時所使用的使用者名稱和密碼。 倘若你所使用的Port並非MySQL預設的3306,則在Port欄位中輸入使用的Port。 設定完成後按下【OK】確定,回到上層的對話框按下【Close】即完成整個ODBC驅動程式的安裝和設定。,16-2-6. ODBC連結MySQL的設定,回到ODBC管理員內將可發現sample-MySQL已經出現在使用者資料來源名稱的頁次中,而後面的驅動程式顯示為MySQL,代表著之前所設定的sample-MySQL資料來源已經安裝成功,另外,你也可以在驅動程式頁次中看到新增加的MySQL驅動程式,如下圖所示。,16-3.

37、 Query元件的使用,Query和Table元件同樣具有連結資料庫存取資料的功能,不過Query元件是以SQL語法作為存取資料集合的根據,不像Table是以指定資料表的方式來處理,雖然如此,兩者在使用上還是有許多相似之處,尤其是在資料集合的處理上,而整個Query元件最重要的兩個屬性則為SQL和Database:其中SQL屬性決定Query元件使用的SQL語法;Database屬性則為資料存取元件必備的屬性。,16-3-1. 如何指定SQL語法,既然SQL屬性為Query元件最重要的設定之一,如何指定SQL語法便顯得特別重要,雖然指定SQL語法沒有像Table元件中指定TableName那樣

38、方便,但是當你熟悉SQL設定後便會深深覺得Query元件的好用,尤其是在多表格和多條件式的資料集合存取上更顯出它的使用彈性,而指定SQL屬性內容最簡單的方式為透過物件檢視器來設定。 在物檢檢視器中選取Query元件,單擊SQL屬性即可彈出String List Editor對話框設定SQL語法。,編輯SQL語法,16-3-1. 如何指定SQL語法,除了事前透過物件檢視器設定SQL屬性外,也可在程式片段中再對Query的SQL屬性進行設定,整個SQL屬性的設定過程不外乎清除、新增和指定,敘述如下: 清除 清除SQL屬性內的所有內容。當我們在程式裡指定SQL屬性值前,為了確保SQL屬性內不含任何之

39、前設定的資料,所以常使用SQL-Clear()指令來清除之前SQL屬性內的資料。,16-3-1. 如何指定SQL語法,新增 清除SQL屬性的內容後便可透過Add方法對SQL屬性填入新的SQL語法,而新增加的內容將全部附加於原有的屬性值後,所以可透過多次的Add方法來完成SQL語法指定的工作,底下分兩次輸入來指定“選取1001號員工基本資料”的SQL語法:指定 除了使用SQL-Add()來新增SQL語法內容外,也可直接使用SQL-Text指定SQL屬性的內容,這種設定方式的好處在於不需要執行額外的SQL-Clear()方法。,16-3-2. 如何執行SQL語法,當透過SQL屬性指定所要執行的SQ

40、L語法後,接著便要對Query元件下執行的指令以傳遞SQL語法至資料庫執行。在Query元件內執行SQL語法的指令分為Open和ExecSQL兩種: Open Open方法的執行適用於會回傳資料集合的SQL語法,也就是SelectFromWhere,執行後的效果相當於Active屬性設為True的作用。 ExecSQL 相對於Open會回傳資料集合,ExecSQL適合不會傳回任何資料集合的SQL語法使用,而這些不傳回資料集合的SQL語法包括了Insert、Delete、Update等。,16-3-2. 如何執行SQL語法,為了加速SQL語法的執行效率,在SQL語法真正執行前,我們可以使用Pre

41、pare方法先送出該SQL語法的查詢內容讓遠端的資料庫可以先進行最佳化的處理工作。建議讀者在執行SQL語法前皆能先執行Prepare來改善執行效率。,16-3-3. Query中的變數指定,前一節的查詢員工資料範例中,我們僅能查詢固定的員工編號而無法動態的給定一個查詢值供Query元件進行查詢的動作,以至於降低了該元件在使用上的彈性,但這並不表示Query元件不支援這樣的一個動態查詢方式,所以本節我們將介紹如何在SQL屬性值中加入變數供我們查詢之用。 介紹之前,我們先回顧一下之前的程式片斷 Query1-SQL-Add(“Where EmpNo=1001 ”); 該片段中的1001為一常數,如

42、果能換成像X或Y之類的變數便可達到指定變數的功用,但取代的結果 Query1-SQL-Add(“Where EmpNo=X ”); 所代表的意思只是把 X 視為一個字元,而非變數,所以該敘述會因為字元沒有單引號的夾注而產生錯誤的訊息。為了避免錯誤,C+ Builder提供了一個冒號保留字(:)來辨別變數和字元的差別,也就是我們必須在代表變數的字元前面加個冒號來區別和字元的不同,所以上面的程式片段必須修改為如下的形式:Query1-SQL-Add(“Where EmpNo=:X “);,16-3-3. Query中的變數指定,當SQL屬性內的SQL語法含有變數時,Query元件會把這些變數丟入T

43、Params型別中,而TParams則以陣列的形式來儲存這些變數,若要對TParams內的變數進行讀取或是指定的動作則可透過Params和ParamByName兩個方法來完成。其中,Params是以變數在TParams內的存放位置作為存取的依據,而ParamByName則是以變數的名稱作為指定值時的判斷。下面的兩段程式碼透過不同的方法對變數值進行指定的動作。,16-3-4. Query的常用屬性,Query和Table元件皆可透過Database屬性的指定和BDE連結的資料庫進行存取的動作,也都能接收回傳的資料集合,所以可歸類為相同的資料存取元件。除此,兩者在屬性的使用上也極為類似,常用的有R

44、ecordCount、FieldCount、EOF、BOF、CanModify和FieldValue等,可參考Table元件內的介紹。至於Query元件專屬的常用屬性有Params、Prepared、RowAffected和SQL,如下面表格說明:,16-3-4. Query的常用屬性,Query元件和Table元件除了有無使用SQL語法的差別外,其實在存取資料集合上亦有所差別的。 對於Query元件來說,當下達的SQL語法指令為Select時,回傳的資料集合其實只是透過一個指標在紀錄著,資料集合的內容仍存在資料庫端的記憶體內,然而,Table元件當你選取某個資料表進行檢視時,所有的資料集合其

45、實已經暫放到本機的記憶體中,所以當資料集合大時,使用Query元件會得到較好的使用效率。 當對資料集合進行條件查詢時,Table元件是先把資料集合抓到本機電腦中再去過濾不符合條件的資料,而Query元件則是在資料庫端進行條件處理後才回傳符合條件的資料給本機電腦使用,所以就效率上來看是有差別的。,16-3-4. Query的常用屬性,【範例16-2】Query元件的應用,16-3-4. Query的常用屬性,主要程式碼,16-3-4. Query的常用屬性,16-3-4. Query的常用屬性,執行結果 執行程式的畫面如下所示,使用者在Memo中輸入SQL語法後按下【確定】按鈕即可檢視SQL語法

46、對應的資料集合。,16-4. Database元件的使用,資料庫一個很重要的機制在於提供身分確認的動作,也就是不同使用者在連結資料庫時必須輸入一組帳號與密碼,而資料庫據此提供不同的使用權限,但是在之前的範例中,由於使用Paradox的資料庫檔作為儲存媒介,所以並沒有看到這樣的一個登入動作,但是當你的資料庫換成MS SQL Server或是MySQL等DBMS時,執行程式時便會彈出一個要求輸入認證資料的對話框,倘若你想把認證的動作隱藏起來或是讓程式自動傳送認證訊息時,便需要透過Database元件的輔助來完成,當然Database元件的功能還不止於此,底下我們就透過簡單的說明來讓讀者了解Data

47、base元件在資料庫程式所扮演的角色。,16-4. Database元件的使用,何謂Database元件?其實就是一個能和遠端資料庫透過BDE進行連結的元件,進而使本地端的程式能抓取遠端的資料,而這個功能對於Table和Query元件同樣也能達到;不過,和Table、Query相比,Database仍有下面兩個優點: 透過Database元件的使用,可以減少和遠端資料庫連結的窗口:因為Table和Query元件允許透過Database屬性和Database元件進行連結,而將資料庫的選擇交由Database元件來決定,所以當遠端資料庫的設定變動時,便只要更改Database元件的設定即可,省去再

48、修改Table或Query元件Database屬性的麻煩,如此架構的示意圖如下所示:,16-4. Database元件的使用,Database元件提供儲存連結所需參數的功能,因此可以儲存登入資料庫時所需的身分認證資料,包括使用者名稱和密碼,如此在登入時就可以免去再輸入的麻煩,而所有透過該元件和遠端資料庫相連的元件亦可以免去輸入認證資料的動作。 在了解到Database元件的優點後,建議讀者往後在使用BDE開發資料庫程式上皆透過Database元件和遠端資料庫相連,尤其是對於複雜的程式專案開發上,因為這將可以省去日後維護上的麻煩。,16-4-1. Database元件的使用,由於Database

49、元件提供的功能只限於和資料庫的連結,所以設定十分簡單,其中較為特殊的部分為傳遞連結資料庫時的參數,設定方法如下: 在表單上雙擊Database元件以進入屬性設定畫面,如下顯示:透過上圖的Name欄位指定該Database元件的名稱,此名稱會反映到物件檢視器內Database元件的DatabaseName屬性,代表著一個資料庫名稱。往後諸如Table或Query元件便可在DatabaseName屬性內指定該名稱作為其連結的資料庫,如程式裡的Query元件欲使用Database元件作為和資料庫連結的中介,則只要在Query元件中的DatabaseName屬性中指定該Database元件的Datab

50、aseName屬性值即可。,16-4-1. Database元件的使用,在AliasName欄位中設定Database元件的AliasName屬性。該屬性負責指定連結的資料庫名稱,你可以在下拉選單中點選BDE Administrator中目前可供使用的資料庫連結設定。 在Parameter Overrides中輸入和資料庫連結時所需傳遞的參數。最常傳遞的參數為登入時的身分認證資訊,如Username=使用者名稱和Password=密碼。畫面如上頁圖示。 最後,因為我們已經指定了所要傳遞的參數,所以請取消Options裡LoginPrompt選項的選取符號以關閉登入時的參數輸入對話框,否則縱使你已經設定了連結參數亦會彈出一個對話框要求你輸入使用者名稱和密碼。 按下【OK】按鈕關閉設定對話框,並在物件檢視器中設定Database元件的Connected屬性值為True以連結資料庫,如沒有錯誤訊息出現便表示連結成功。,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报