Delphi 第09章-數(shù)據(jù)庫編程_第1頁
Delphi 第09章-數(shù)據(jù)庫編程_第2頁
Delphi 第09章-數(shù)據(jù)庫編程_第3頁
Delphi 第09章-數(shù)據(jù)庫編程_第4頁
Delphi 第09章-數(shù)據(jù)庫編程_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第9章DelphiXE8數(shù)據(jù)庫編程Delphi程序設(shè)計教程(第3版)清華大學(xué)出版社楊長春主編數(shù)據(jù)庫系統(tǒng)主要由三大部分組成:(1)數(shù)據(jù)庫(按一定結(jié)構(gòu)組織在一起的相關(guān)數(shù)據(jù)的集合)。(2)數(shù)據(jù)庫管理系統(tǒng)(DBMS:它是專門負責(zé)組織和管理數(shù)據(jù)信息的程序)。(3)數(shù)據(jù)庫應(yīng)用程序(它使用戶能夠獲取、顯示和更新DBMS存儲的數(shù)據(jù))。9.1數(shù)據(jù)庫系統(tǒng)開發(fā)基礎(chǔ)9.1.1數(shù)據(jù)庫的基本概念1.?dāng)?shù)據(jù)庫(DataBase)數(shù)據(jù)庫簡單的定義是:有蘊含著一定的意義的數(shù)據(jù),一些按照一定的規(guī)律組織起來所組成的數(shù)據(jù)集合。在數(shù)據(jù)庫中除了用一些作為外部信息的數(shù)據(jù)之外,還有一些內(nèi)部信息數(shù)據(jù)。這些數(shù)據(jù)定義了數(shù)據(jù)庫的用戶及其相應(yīng)的權(quán)限,數(shù)據(jù)庫表單的定義等等,通常把存放這些數(shù)據(jù)的地方叫做數(shù)據(jù)字典。數(shù)據(jù)字典是有數(shù)據(jù)庫系統(tǒng)自行創(chuàng)建并自動維護的,它實際上也是數(shù)據(jù)庫的一組表和視圖,與其他的表單和試圖并沒有物理結(jié)構(gòu)上的區(qū)別,唯一不同的是它的內(nèi)容。2.關(guān)系數(shù)據(jù)庫(RelationalDataBase)關(guān)系數(shù)據(jù)庫是由若干個表組成的,每一張二維表對應(yīng)著一種聯(lián)系。表的每一行稱為記錄;表的每一列叫做字段;域就是屬性的取值范圍。對于dBASE、FoxPro、Paradox這三種數(shù)據(jù)庫系統(tǒng),數(shù)據(jù)庫對應(yīng)于某一個子目錄,而其他類型如MSAccess、Btrieve則是指某個文件。表(Table):一個表就是一組相關(guān)的數(shù)據(jù)按行排列,像一張表一樣。字段(Field):在表中,每一列稱為一個字段。每一個字段都用相應(yīng)的描述信息,如數(shù)據(jù)類型、數(shù)據(jù)域等。記錄(Record):在表中,每一行稱為一條記錄。索引(Index):為了加快訪問數(shù)據(jù)庫的速度、許多數(shù)據(jù)庫都使用索引。主鍵(PrimaryKey,PK):主鍵是對于這張表的惟一標(biāo)識,即一個列或幾個列的組合。主鍵最顯著的特點就是在任何給定的條件,沒有兩個主鍵包含相同的值,這個稱作主鍵的惟一性原則。同時主鍵中每一個屬性都不能被去掉,而同時仍能夠保持主鍵的惟一性,這個我們稱作主鍵的最小性原則。關(guān)系型數(shù)據(jù)庫系統(tǒng)具有很多優(yōu)點:(1)關(guān)系數(shù)據(jù)庫有深厚的理論基礎(chǔ),它是基于關(guān)系代數(shù)和關(guān)系理論的模型。(2)以二維表的形式表示數(shù)據(jù)。(3)不需要用戶了解它在計算機中的物理存儲形式。(4)用系統(tǒng)表來提供其本身的內(nèi)容和結(jié)構(gòu)。(6)可以通過SQL語言來操縱。SQL語言是專門用于操作這種模型的語言。3.?dāng)?shù)據(jù)庫管理系統(tǒng)(DBMS)數(shù)據(jù)庫管理系統(tǒng)是一個用來管理數(shù)據(jù)庫的軟件,是數(shù)據(jù)庫能夠正常工作的核心。對數(shù)據(jù)庫的所有操作,包括創(chuàng)建各種數(shù)據(jù)庫的數(shù)據(jù)類型、表單、視圖、存儲過程,以及其他的數(shù)據(jù)庫應(yīng)用程序?qū)τ跀?shù)據(jù)庫中數(shù)據(jù)的讀取和修改,都是經(jīng)由數(shù)據(jù)庫管理系統(tǒng)完成的。當(dāng)數(shù)據(jù)庫應(yīng)用程序把對于數(shù)據(jù)庫數(shù)據(jù)的操作指令通過數(shù)據(jù)庫管理系統(tǒng)的接口函數(shù)發(fā)送給數(shù)據(jù)庫管理系統(tǒng)后的一切工作都只是數(shù)據(jù)庫管理系統(tǒng)的的了,數(shù)據(jù)庫應(yīng)用程序所要做的就只是等候數(shù)據(jù)庫管理系統(tǒng)把它所需要的數(shù)據(jù)給它,然后進行加工處理。4.?dāng)?shù)據(jù)庫應(yīng)用程序數(shù)據(jù)庫應(yīng)用程序是通過DBMS訪問數(shù)據(jù)庫中的數(shù)據(jù)并向用戶提供數(shù)據(jù)服務(wù)的程序。簡單地說,它們是允許用戶插入、刪除和修改并報告數(shù)據(jù)庫中數(shù)據(jù)的程序。這種程序是由程序員使用通用或者專用的程序設(shè)計軟件開發(fā)的。9.1.2數(shù)據(jù)庫設(shè)計過程1.?dāng)?shù)據(jù)庫的建立創(chuàng)建一個數(shù)據(jù)庫的過程有以下幾個步驟:(1)確定數(shù)據(jù)庫的使用范圍。(2)確定支持數(shù)據(jù)庫所需要的字段。(3)將字段劃分成一些合理的數(shù)據(jù)表。(4)確定數(shù)據(jù)表之間的關(guān)聯(lián)。在確定數(shù)據(jù)庫的需求后,要將這些需求劃分成幾個合理的數(shù)據(jù)表。

所謂合理的數(shù)據(jù)表,通常要滿足以下幾點:

數(shù)據(jù)表中的字段所描述的內(nèi)容有一定的聯(lián)系。

數(shù)據(jù)表中至少有一個字段的記錄不是重復(fù)的。

一個數(shù)據(jù)表與數(shù)據(jù)庫其他的數(shù)據(jù)表中至少一個能夠關(guān)聯(lián)。

一個數(shù)據(jù)表與數(shù)據(jù)庫其他的同一數(shù)據(jù)表不要有多對多的關(guān)聯(lián)。2.?dāng)?shù)據(jù)表的結(jié)構(gòu)在數(shù)據(jù)表結(jié)構(gòu)中需要一個關(guān)鍵字段,數(shù)據(jù)表中的數(shù)據(jù)就是按主關(guān)鍵字段的順序存放的,而且利用主關(guān)鍵字能夠高效地與其他數(shù)據(jù)表建立關(guān)聯(lián)。索引也是數(shù)據(jù)表常用的,在數(shù)據(jù)庫中,利用索引可以加快訪問速度。9.1.3數(shù)據(jù)庫應(yīng)用程序的開發(fā)步驟1.初步設(shè)計設(shè)計階段要根據(jù)用戶的需求,定義數(shù)據(jù)庫和應(yīng)用程序的功能,確定用戶的需求功能哪些在設(shè)計階段實現(xiàn),哪些在程序中實現(xiàn)。2.功能實現(xiàn)將客戶需求功能分成幾個合理的功能塊,分別進行程序設(shè)計、調(diào)試。

常見的劃分方法上分成四個功能塊:(1)信息處理(2)數(shù)據(jù)庫管理(3)系統(tǒng)維護(4)輔助功能信息處理是建立數(shù)據(jù)庫應(yīng)用程序的目的。設(shè)計數(shù)據(jù)庫應(yīng)用程序的目的是為客戶提供所需要的信息服務(wù),輔助管理工作,提高工作效率和水平。信息處理最基本的功能包括各類信息查詢,統(tǒng)計報表等功能,對于特定的應(yīng)用程序還可以有特定的功能。數(shù)據(jù)庫管理的主要功能是負責(zé)數(shù)據(jù)庫的更新、修改等。一個特定的數(shù)據(jù)庫管理操作要由它的用戶的權(quán)限決定,這個權(quán)限要由有權(quán)的用戶指定。系統(tǒng)維護的功能是保證數(shù)據(jù)庫應(yīng)用程序運行的可靠性和安全性,一般包括用戶管理,口令設(shè)置,各類系統(tǒng)變量和數(shù)據(jù)字典維護等。3.運行和維護程序用戶在使用應(yīng)用程序的過程中會對應(yīng)用程序提出一些建議和要求,根據(jù)用戶的建議和要求對數(shù)據(jù)庫應(yīng)用程序進行適當(dāng)?shù)男薷暮屯晟?,從而提高程序的性能?.2.1SQL語言的發(fā)展目前SQL語言被廣泛地使用,它具有強大的生命力,它使用所有數(shù)據(jù)庫用戶包括程序員、DBA管理員和終端用戶都受益非淺。SQL語言具有以下優(yōu)點:(1)SQL語言是所有關(guān)系數(shù)據(jù)庫的公共語言。(2)SQL是非過程化查詢語言。有兩種方式使用SQL語言:一種是在終端交互方式下使用,稱為交互式SQL語言;另一種是嵌入在高級語言編寫的程序中使用,稱為嵌入式SQL語言。9.2SQL結(jié)構(gòu)化查詢語言基礎(chǔ)9.2.2SQL的基本查詢功能

SELECT語句是使用最多的SQL語句,它完成的是數(shù)據(jù)庫的查詢功能,SQLSELECT語句,從數(shù)據(jù)表中選擇出符合條件的記錄。

Distinct語句的作用是對某個表所選擇的字段數(shù)據(jù),忽略重復(fù)的情況,也就是說,針對某個字段查詢出來的記錄結(jié)果是惟一的。1.TOP和ORDERBY語句

TOP語句實現(xiàn)從第一條或最后一條開始(利用ORDERBY條件子句),返回特定記錄的數(shù)據(jù)的功能。如果沒有加上ORDERBY條件的話,所得到的數(shù)據(jù),將會是隨機的數(shù)據(jù)。此外,在TOP語句之后,除了可以加上數(shù)字以外,還可以利用保留字PERCENT來查詢。排序參數(shù):ASC遞增順序排列,默認值。DESC遞減順序控制。

2.IN條件字句指定要查詢哪一個外部數(shù)據(jù)庫的表。3.HAVING條件子句指定一特定的分組記錄,并滿足HAVING所指定的條件或狀態(tài),但條件是針對分組的條件設(shè)置。4.GROUPBY條件子句依據(jù)指定的字段,將具有相同數(shù)值的記錄合并成一條。5.BETWEED…AND運算符決定某一數(shù)值是否介于特定的范圍之內(nèi)。6.LIKE操作數(shù)將一字符串與另一特定字符串樣式比較,并將符合該字符串樣式的記錄過濾出來。

9.2.3SQL的其他應(yīng)用1.SQL數(shù)字函數(shù)(1)AVG:算數(shù)平均數(shù)。(2)COUNT:計算記錄條數(shù)。(3)FIRST與LAST:返回某字段的第一條數(shù)據(jù)與最后一條數(shù)據(jù)。(4)MAX與MIN:返回某字段最大值與最小值。(5)SUM:返回某特定字段或是運算的總和數(shù)值。2.SQL查詢的嵌套嵌套的SQL查詢含義在于:在一個SQL語句中可以包含另一個SQL查詢語句,形成內(nèi)部嵌套的查詢類型,SELECT語句構(gòu)成的多層SQL查詢,必須用()將該語句括起來。3.SQL與數(shù)據(jù)庫的維護(1)表的建立CREATETABLE語句:我們可以利用這個命令,來建立一個全新的表,但前提則是數(shù)據(jù)庫必須已經(jīng)存在。(2)表索引的建立CREATEINDEX語句:這個命令主要是對一個已經(jīng)存在的表建立索引。(3)表的刪除DELETE語句:我們可以利用DELETE語句,將表中的記錄刪除。(4)SELECT…INTO語句:可以通過這個命令,利用已經(jīng)存在的表查詢,來建立一個新表。(5)INNERJOIN操作數(shù):當(dāng)某一個共同的字段數(shù)據(jù)相等時,將兩個表的記錄加以組合。(6)UNION操作數(shù):可以通過UNION操作數(shù)來建立連接的查詢條件,UNION操作數(shù)可以將兩個以上的表或是查詢的結(jié)果組合起來。(7)ALTER語句:在一個表建立后,利用ALTER語句,可以去修改表的字段設(shè)計。(8)DROP語句:針對所指定的表或字段加以刪除,或是把索引刪除。(9)INSERTINTO語句:新建一條數(shù)據(jù)到表當(dāng)中。(10)UPDATE語句:建立一個UPDATE的查詢,通過條件的限制來修改特定的數(shù)據(jù)。

數(shù)據(jù)庫應(yīng)用程序的功能是:使用數(shù)據(jù)訪問組件,通過數(shù)據(jù)引擎(提供數(shù)據(jù)庫驅(qū)動程序),建立與數(shù)據(jù)源(數(shù)據(jù)庫)的連接,并使用數(shù)據(jù)控制組件來創(chuàng)建用戶界面,以便用戶存取和操縱數(shù)據(jù)庫中的數(shù)據(jù)。9.3數(shù)據(jù)庫開發(fā)常用組件9.3.1數(shù)據(jù)集組件訪問數(shù)據(jù)庫,通常需要數(shù)據(jù)源,用DataSource組件描述數(shù)據(jù)源。但該組件不能直接表示數(shù)據(jù),而是引用數(shù)據(jù)庫表、查詢結(jié)果或存儲過程。在窗體中還需要使用Table、Query或StoredProc組件,它們直接與數(shù)據(jù)庫連接,從中獲取數(shù)據(jù)。常稱之為數(shù)據(jù)集組件,它們通過BDE為應(yīng)用程序提供與數(shù)據(jù)庫的連接。當(dāng)要創(chuàng)建一個數(shù)據(jù)庫應(yīng)用程序時,先在窗體上放一個數(shù)據(jù)集組件,然后為數(shù)據(jù)集組件設(shè)置有關(guān)的屬性,指定要訪問的數(shù)據(jù)庫、數(shù)據(jù)表以及表中的記錄等。9.3.2數(shù)據(jù)控制組件數(shù)據(jù)控制組件為用戶提供一個可對數(shù)據(jù)庫中數(shù)據(jù)進行瀏覽、編輯和輸入等數(shù)據(jù)操作的可視化界面,由于數(shù)據(jù)集組件是不可見的,所以,還必須使用可見的數(shù)據(jù)控制組件來提供數(shù)據(jù)庫的顯示,它們通過數(shù)據(jù)訪問組件DataSource相互連接,數(shù)據(jù)控制組件也稱為數(shù)據(jù)感知(Data-aware)組件。9.3.3數(shù)據(jù)訪問組件數(shù)據(jù)訪問組件DataSource負責(zé)雙方數(shù)據(jù)的收發(fā)。使用戶交互式地對數(shù)據(jù)庫進行查詢、修改、插入和刪除等操作。在同一個窗體上幾個數(shù)據(jù)控制組件可以連接到同一個DataSource組件,這幾個數(shù)據(jù)控制組件可以保持同步,因為數(shù)據(jù)控制組件總是顯示當(dāng)前數(shù)據(jù)記錄的數(shù)據(jù)。DataSource組件最好放在數(shù)據(jù)模塊上,與用戶界面分開。

DataSource組件幾種重要屬性的意義如下:(1)DataSet屬性:指定相連的數(shù)據(jù)集組件。(2)AutoEdit屬性:確定連接的數(shù)據(jù)集組件是否自動處于編輯狀態(tài)。9.4.1建立ODBC數(shù)據(jù)源以Access數(shù)據(jù)庫為例說明創(chuàng)建ODBC數(shù)據(jù)源的方法。1.打開ODBC數(shù)據(jù)源管理器在BDE管理器窗口中,選擇Object菜單的ODBCAdministrator項,或使用Windows控制面板中的ODBC對象,打開ODBC數(shù)據(jù)源管理器窗口。為了便于訪問數(shù)據(jù),Windows系統(tǒng)提供了ODBC數(shù)據(jù)源管理工具,該工具用來設(shè)置數(shù)據(jù)源的名字DSN(DataSourceName)。DSN是一個數(shù)據(jù)源的標(biāo)志,目的是便于應(yīng)用程序訪問數(shù)據(jù),即只要某個數(shù)據(jù)設(shè)置了相應(yīng)的DSN,應(yīng)用程序就不必理會該數(shù)據(jù)庫存儲的位置和驅(qū)動程序,可以按DSN直接訪問數(shù)據(jù)庫。9.4三種常見的數(shù)據(jù)庫連接方式DSN有三種類型:(1)用戶DSN:只對設(shè)置它的用戶可見,而且只能在設(shè)置了該DSN的機器上使用。(2)系統(tǒng)DSN:對機器上的所有用戶都是可見的,包括NT服務(wù)。(3)文件DSN:將DSN的配置信息存在一個文件里,這樣的文件就叫文件DSN。2.選擇【用戶DSN】選項卡,單擊【添加】按鈕,打開創(chuàng)建數(shù)據(jù)源對話框。選擇MicrosoftAccessDriver(*.mdb),并單擊【完成】按鈕。3.在彈出的對話框中通過【選擇】按鈕選擇數(shù)據(jù)庫,或通過【創(chuàng)建】按鈕創(chuàng)建新數(shù)據(jù)庫,還可以修復(fù)和壓縮數(shù)據(jù)庫,還可通過“高級”按鈕設(shè)置登錄名稱和密碼。點【選擇】按鈕,選擇一個已經(jīng)存在的Access數(shù)據(jù)庫C:\book.mdb數(shù)據(jù)庫4.輸入數(shù)據(jù)源的名稱“CCZUTest”,說明部分輸入一些對所創(chuàng)建的數(shù)據(jù)源進行描述的文字,也可不輸入,設(shè)置之后,單擊【確定】按鈕保存設(shè)置這樣就配置好了DSN,關(guān)閉ODBC數(shù)據(jù)源管理器。關(guān)閉所有使用BDE的應(yīng)用程序,打開BDE管理器窗口,切換到DataBase頁,即可看到新建的ODBC數(shù)據(jù)源“CCZUTest”。9.4.2基于BDE的數(shù)據(jù)庫連接方式

DelphiXE8的Borland數(shù)據(jù)引擎(BDE)可直接訪問某些本地數(shù)據(jù)庫,包括dBASE,Paradox,F(xiàn)oxPro,MicrosoftAccess,Delphi安裝程序自動為這些數(shù)據(jù)庫安裝了驅(qū)動程序,并建立了相應(yīng)的配置。如果將BDE與Borland的SQLLink驅(qū)動程序連接,可以訪問Oracle,Sybase,Informix,InterBase和IBMDB2數(shù)據(jù)庫。

1.BDE管理器

BDE管理器是管理Windows注冊表中的BDE系統(tǒng)配置信息和BDE配置文件(IDAPI.cfg)中的別名信息的可視化工具。選擇菜單項【開始】|【程序】|【BorlandDelphiXE8】|【BDEAdministrator】,即打開BDE管理器在BDE管理器窗口的Databases選項卡中,列出了可以使用的所有數(shù)據(jù)庫別名,以類似于Windows資源管理器的樹狀結(jié)構(gòu)顯示出來。在Databases窗格列表中選擇一個別名,即可在Definition窗格查看和修改它的定義。2.?dāng)?shù)據(jù)庫別名在實際應(yīng)用中,計算機尤其是文件服務(wù)器會經(jīng)常更換。相應(yīng)地,各種數(shù)據(jù)庫操作也要轉(zhuǎn)移到新數(shù)據(jù)庫服務(wù)器上進行,因而需要對數(shù)據(jù)庫重新定位。BDE通過數(shù)據(jù)庫別名(數(shù)據(jù)源)解決這個問題。在數(shù)據(jù)庫應(yīng)用程序中,當(dāng)數(shù)據(jù)從一個地方轉(zhuǎn)移到另一個地方時,只要修改別名重新定位數(shù)據(jù)庫位置即可,源程序不必修改。

3.配置數(shù)據(jù)庫驅(qū)動程序BDE管理器的Configuration選項卡用于顯示和配置相關(guān)數(shù)據(jù)庫的驅(qū)動程序,這些驅(qū)動程序可分為Native驅(qū)動和ODBC驅(qū)動兩類。同一種數(shù)據(jù)庫既可以有Native驅(qū)動,也可以有ODBC驅(qū)動,使用時按需要選擇一種即可。在Configuration窗格的驅(qū)動程序列表中選擇一個驅(qū)動程序,它的設(shè)置參數(shù)便會顯示在右側(cè)Definition窗格中,以便查看和修改。

配置好了驅(qū)動程序之后,執(zhí)行Object|Apply命令,將配置保存起來。然后切換到Databases選項卡,即可使用配置好的驅(qū)動程序來建立數(shù)據(jù)源。4.建立BDE數(shù)據(jù)源(1)右擊Databases頁,選擇快捷菜單New項。(2)在DatabseDriverName下拉列表中選擇一種數(shù)據(jù)庫驅(qū)動程序,單擊OK按鈕,生成一個數(shù)據(jù)源。如果選擇的是STANDARD,則自動生成名為Standard1的數(shù)據(jù)源,并顯示在Databases頁的樹形數(shù)據(jù)庫別名表中。(3)根據(jù)需要修改數(shù)據(jù)源的名稱,配置右側(cè)Definition頁中的參數(shù)值。(4)右擊剛創(chuàng)建的數(shù)據(jù)庫別名,選擇快捷菜單Apply項,按提示保存數(shù)據(jù)庫別名配置。

特別提醒:在Delphi7等早期版本中,BDE管理器會出現(xiàn)在開始菜單的Delphi列表內(nèi),用戶可以直接點擊并運行。而現(xiàn)在本教材所使用的DelphiXE8版本中默認不出現(xiàn)在開始菜單列表項中,需要用戶在XE8安裝完畢后自行去下圖所在的路徑中尋找bdeadmin.exe文件并運行,用戶也可創(chuàng)建一個快捷圖標(biāo)在桌面上供后續(xù)使用。1ADO組件介紹

ADO組件(DelphiXE8中稱為dbGo組件)位于DelphiXE8組件面板上的dbGo頁,如圖所示,這些組件可用于連接ADO數(shù)據(jù)存儲、執(zhí)行命令、檢索基于ADO機制的數(shù)據(jù)庫表中的數(shù)據(jù)。多數(shù)ADO組件都能在按其功能在BDE組件面板中找到相應(yīng)的組件。9.4.3基于ADO的數(shù)據(jù)庫連接方式1.ADOConnection

ADOConnection組件位于ADO組件板的第一個組件,該組件用于與數(shù)據(jù)庫建立連接。TADOConnection組件中還有兩個屬性:CommandTimeout和ConnectionTimeout。這兩個屬性主要用于連接遠程數(shù)據(jù)庫時相關(guān)參數(shù)的設(shè)定。

ADOConnection組件和BDE組件板中的Database組件功能相似。2.ADOCommand

ADOCommand組件位于ADO組件板的第二個組件,該組件有CommandType與CommandText兩個重要屬性。3.ADODataSet

ADODataSet組件位于ADO組件板的第三個組件,通過ADODataset組件,可以直接與一個表進行連接,也可以執(zhí)行SQL語句,還可以執(zhí)行存儲過程。在使用時,首先設(shè)定其Connection屬性為ADOConnection組件,沒有ADOConnection組件就直接設(shè)定ConnectionString屬性。接著有兩個重要屬性CommandType與CommandText需要設(shè)定。4.ADOQuery

ADOQuery組件位于ADO組件板的第四個組件,提供數(shù)據(jù)庫連接接口一致化。5.ADOTable

ADOTable組件位于ADO組件板的第五個組件,如果程序中使用ADOConnection連接組件,直接設(shè)定該組件的Connection屬性為ADOConnection組件即可。另外一個重要屬性就是Active屬性,該屬性用來設(shè)置打開或關(guān)閉與該組件相連數(shù)據(jù)表。其值若為True,則打開數(shù)據(jù)表;若為False,則關(guān)閉數(shù)據(jù)表。

ADOTable組件與BDE中的Table組件對應(yīng)。6.ADOStoredProc

ADOStoredProc組件位于ADO組件板的第六個組件,用于完成數(shù)據(jù)存儲過程。ADOStoredProc組件與BDE中的組件StoredProc對應(yīng)。9.4.3.2通過ADO連接數(shù)據(jù)庫1.構(gòu)造連接字符串(1)在對象觀察中選擇數(shù)據(jù)集組件的ConnectionString屬性,單擊屬性項右側(cè)的符號按鈕,打開連接字符串對話框。(2)連接字符串對話框中有兩個單選項,提供了兩種不同的連接方式。●使用數(shù)據(jù)鏈接文件:數(shù)據(jù)鏈接文件是一個擴展名為.UDL的文件,其中存放了一個連接字符,用戶可以預(yù)先建立數(shù)據(jù)鏈接文件,以便連接字符串能夠重復(fù)利用?!袷褂眠B接字符串:選擇了該項就需要自己創(chuàng)建一個連接字符串??梢栽谙鄳?yīng)的文本框中鍵入一個連接字符串,但一般來說,還要進行數(shù)據(jù)引擎的選擇,所以,應(yīng)單擊Build按鈕,打開數(shù)據(jù)鏈接屬性對話框。(3)選擇數(shù)據(jù)庫引擎。在對話框的Provider頁,選擇要連接的OLEDB提供者。(4)選擇了數(shù)據(jù)提供者之后,可以單擊“下一步”按鈕或選擇“連接”選項卡,該選項卡會按前面選擇的數(shù)據(jù)提供者的不同而顯示不同的設(shè)置項。2.連接本地數(shù)據(jù)庫對數(shù)據(jù)庫的存取和控制稱為數(shù)據(jù)庫操縱,包括數(shù)據(jù)的查詢、讀取、插入、刪除和更新等各種操作。既可利用DelphiXE8本身的功能進行數(shù)據(jù)庫操縱,也可使用通用數(shù)據(jù)庫的結(jié)構(gòu)化查詢語言(SQL)來進行。9.5數(shù)據(jù)庫操縱9.5.1字段的操作

DelphiXE8用字段對象(TField組件)來表示數(shù)據(jù)集中的字段。字段對象附屬于數(shù)據(jù)集組件,在程序設(shè)計和運行過程中都是不可見的。每當(dāng)數(shù)據(jù)集組件從數(shù)據(jù)庫中獲得數(shù)據(jù)時,就將其(當(dāng)前記錄)放入字段對象中。利用字段對象可取得當(dāng)前字段的值,設(shè)置它的值,而且能夠通過修改字段對象的屬性來改變數(shù)據(jù)集。字段對象的創(chuàng)建有兩種方式:(1)在應(yīng)用程序打開數(shù)據(jù)集時自動創(chuàng)建。將數(shù)據(jù)集組件的Active屬性設(shè)為True,或執(zhí)行它們的Open方法,即可創(chuàng)建字段對象。這種方式稱為動態(tài)創(chuàng)建。這樣創(chuàng)建的字段對象在單元文件中沒有聲明語句。當(dāng)數(shù)據(jù)集關(guān)閉,即當(dāng)數(shù)據(jù)集組件的Active屬性設(shè)為False或執(zhí)行它們的Close方法時,便會自動撤消。

(2)通過字段編輯器創(chuàng)建字段對象。這種方式創(chuàng)建的字段對象稱為靜態(tài)字段對象,在關(guān)閉數(shù)據(jù)集時不會撤消。1.字段的數(shù)據(jù)類型一個字段對象用來表示數(shù)據(jù)集中一列的特征,也用于表示字段的顯示特征,另外,當(dāng)在數(shù)據(jù)集的記錄之間滾動時,字段對象將更新當(dāng)前字段的值,并顯示給用戶查看。

數(shù)據(jù)集中的字段有多種數(shù)據(jù)類型,每種數(shù)據(jù)類型都有一個獨立的TField類型與之對應(yīng)。常用的TField類型有:TBooleanField(布爾型)、TCurrencyField(貨幣型)、TStringField(字符串型)、TIntegerField(整數(shù))、TFloatField(浮點型)和TBLOB(二進制對象)。使用最多的是TStringField和TIntegerField類型的字段對象。2.字段對象的訪問(1)數(shù)據(jù)集組件有一個默認的數(shù)組屬性FieldValues,這個數(shù)組以Variant類型返回字段的值,利用它可以存取字段值,利用它可以存取字段值。(2)利用數(shù)據(jù)集組件的數(shù)組屬性Fields也可以存取字段的值。Fields屬性的每個元素都代表一個字段,這樣就可以按序號(從0開始)來訪問字段的值。(3)利用數(shù)據(jù)集組件的FieldByName方法,通過列名也可訪問字段對象。FieldByName方法以數(shù)據(jù)集的字段名作為參數(shù)(用引號)。(4)編輯當(dāng)前記錄中一個字段的操作步驟如下:●調(diào)用數(shù)據(jù)集組件的Edit方法,使數(shù)據(jù)集處于編輯狀態(tài)。●給當(dāng)前字段賦新值?!裾{(diào)用Post方法將數(shù)據(jù)的變化提交給數(shù)據(jù)集。(5)在數(shù)據(jù)集中插入或刪除記錄時需以下操作:●調(diào)insert或append方法,使數(shù)據(jù)集處于相應(yīng)模式?!駥?shù)據(jù)集中的字段賦值?!裾{(diào)用方法將數(shù)據(jù)的變化提交給數(shù)據(jù)。

3.創(chuàng)建靜態(tài)字段創(chuàng)建靜態(tài)對象要用到字段編輯器。(1)雙擊Table組件,打開字段編輯器。(2)右擊字段編輯器,選擇ADDFields項,彈出添加字段對話框。(3)在添加字段對話框中選定要創(chuàng)建靜態(tài)字段對象的字段,單擊OK按鈕,將選定的字段添加到字段編輯器中。4.訪問靜態(tài)字段選擇要設(shè)置屬性的字段,在對象觀察器中修改字段對象的屬性。1.Alignment:設(shè)置字段在數(shù)據(jù)控制組件中的對齊方式,左對齊、右對齊和居中。2.DisplayLabel:說明字段對象咱DBGrid組件中的顯示的標(biāo)題,默認為字段對象名稱。3.DisplayWidth:字段對象在DBGrid組件中顯示的列的寬度。4.FileName:字段對象對應(yīng)的字段名稱。5.Index:字段對象在DataSet組件中的索引號,從0開始。6.Name:字段對象名。7.ReadOnly:相應(yīng)字段是否能修改。8.Visible:相應(yīng)字段是否在DBGrid中顯示。9.EditMask:設(shè)置掩碼編輯格式。10.MaxValue和MinValue:設(shè)置字段最大最小值,超范圍時產(chǎn)生EdatabaseError異常。靜態(tài)字段對象的訪問相對于動態(tài)字段對象來要簡單得多,在程序中可以直接通過字段對象的名稱(即Name屬性)來訪問。

9.5.2使用Tabel組件的記錄查找在數(shù)據(jù)集中檢索記錄中有幾種方式:一是使用Locate函數(shù)或Lookup函數(shù)進行檢索;二是使用GotoKey方法或FindKey方法,基于索引關(guān)鍵字進行檢索;三是使用GotoNearest方法或FindNearrest方法,執(zhí)行非精確匹配檢索。1.使用Locate方法的通用查找

Table組件的Locate方法和Lookup方法可以在任何數(shù)據(jù)表中按任何類型的字段來搜索記錄,數(shù)據(jù)表不必建立索引。

Locate方法用來在數(shù)據(jù)表中搜索一條符件條件的記錄,如果找到的話,該記錄即可成為當(dāng)前記錄。在使用Locate方法執(zhí)行查詢之前,先要調(diào)用SetKey方法,將連接表的Table組件設(shè)置成查詢狀態(tài)。2.使用GotoKey方法的索引查找

Table組件的GotoKey方法可以基于索引中的字段搜索匹配的記錄,并使找到的記錄成為當(dāng)前記錄。

使用GotoKey方法查找步驟如下:(1)確保待查字段是關(guān)鍵字段(索引中的字段)或已經(jīng)為它定義了輔助索引。(2)調(diào)用SetKey方法,將連接表的Table組件設(shè)置成為查詢狀態(tài)。(3)為每個待查字段設(shè)置目標(biāo)值。(4)調(diào)用GotoKey方法實現(xiàn)查詢,并測試它的返回值判斷查詢是否成功。3.使用FindKey方法的索引查找將設(shè)置查找狀態(tài)、設(shè)置查找值,以及執(zhí)行查找集中在一個方法調(diào)用中實現(xiàn)。FindKey方法接受的參數(shù)是放在方括號中的,是用逗號分開的查找值數(shù)組。數(shù)組中的每個值都對應(yīng)于特定字段的查找值,即參數(shù)中允許有多個查找值,F(xiàn)indKey允許用戶同時查找數(shù)據(jù)集中的多個字段。4.使用GotoNearest和FindNearest方法的近似查找不要求查找結(jié)果與查找值精確匹配。如果找到與指定值匹配的記錄,則將記錄指針到該記錄處,否則,將會出與指定值最接近的記錄并將記錄指針指向它。

9.5.3使用Query組件的SQL查詢1.連接數(shù)據(jù)庫表使用Query組件構(gòu)造數(shù)據(jù)庫應(yīng)用程序需要一個DataSource組件來和數(shù)據(jù)控制組件相連,而且也要通過DataBaseName屬性指定數(shù)據(jù)庫名稱或目錄路徑。Query組件和Table組件的不同之處在于,它沒有TableName屬性,而是用SQL屬性編寫語句和某個數(shù)據(jù)集相連并相連并選擇要顯示的域。2.SQL命令文本的編寫(1)使用字符串列表編輯器編寫利用Query組件的SQL屬性打開字符串列表編輯器,鍵入SQL語句之后,單擊OK按鈕可將編輯器中的SQL命令文本裝入SQL屬性中。也可右擊編輯器,選擇Save項,將編好的SQL命令保存到一個文件中供使用。打開字符串列表編輯器之后,還可右擊編輯器,選擇快捷菜單的Load項,從一個SQL命令文件中調(diào)入SQL命令。(2)使用SQL構(gòu)造器(SQLBuilder)可用于編寫Select語句。右擊Query組件,選擇快捷菜單的SQLBuilder項,彈出SQLBuilder對話框。

SQL構(gòu)造器的上半部用于選擇數(shù)據(jù)、數(shù)據(jù)表,以及表中的字段等;下半部用于選擇性地構(gòu)造查詢條件。在SQL構(gòu)造器中組織好一個查詢并退出構(gòu)造器時,其中的SQL命令會自動寫入相應(yīng)SQLBuilder組件的SQL屬性。3.靜態(tài)查詢

SQL語句有兩種:靜態(tài)SQL語句和動態(tài)SQL語句。靜態(tài)SQL語句在程序設(shè)計階段就已經(jīng)固定了。而動態(tài)SQL語句則在語句中加入一些參數(shù),在程序運行過程中,可以改變參數(shù)的值,即可以動態(tài)地給SQL語句中的參數(shù)賦值。4.動態(tài)查詢

對于較復(fù)雜的查詢,一般采用動態(tài)查詢,即在程序運行期可以改變查詢條件的查詢。動態(tài)SQL語句就是參數(shù)化的語句,即在SQL語句中包含著表示字段名或表名的參數(shù)動態(tài)SQL語句的編寫方式可通過參數(shù)編輯器賦值。方法是:在對象觀察器中,找到Query組件的Parames屬性,打開參數(shù)編輯器。在其中的參數(shù)列表中選擇一個參數(shù),對象觀察器便會顯示參數(shù)屬性。其中,DataType屬性表示參數(shù)數(shù)據(jù)類型,ParamType屬性表示參數(shù)使用類型,Value屬性具有參數(shù)的值(Value)和類型(Type)兩個子屬性。設(shè)置了參數(shù)之后,關(guān)閉參數(shù)編輯器,打開Query組件所連接的數(shù)據(jù)庫,則在與Query組件相連接的數(shù)據(jù)控制組件中會顯示查詢結(jié)果。還可在應(yīng)用程序運行過程中為參數(shù)賦值,這是使用可變參數(shù)的主要方法,這種賦值方法分為以下3種情況:(1)使用Parems屬性按序號訪問參數(shù)

Query組件的Params屬性在設(shè)計時不可有,在程序運行過程中可用而且是動態(tài)建立的。在為Query組件編寫動態(tài)SQL語句時,DelphiXE8自動建立一個數(shù)組Params,數(shù)組從0下標(biāo)開始,依次對應(yīng)SQL語句中的參數(shù),即命令中第一個參數(shù)對應(yīng)Params[0],第二個參數(shù)對應(yīng)Params[1],依此類推。(2)使用ParemByName函數(shù)按名稱訪問參數(shù)

ParemByName是一個函數(shù),用動態(tài)SQL語句中的參數(shù)作為調(diào)用ParemByName函數(shù)的參數(shù),這樣便可為其賦值。(3)使用DataSource屬性從另一個數(shù)據(jù)集獲得參數(shù)使用上述兩種方法的前提是用戶預(yù)先知道具體的參數(shù)值,而在有些程序中,參數(shù)值是無法確定的。這就需要設(shè)置Query組件的DataSource屬性值,其值為另一個DataSource組件的名字。9.6.1需求分析

人事管理系統(tǒng)就是要實現(xiàn)對某單位的職工進行管理,整個系統(tǒng)包括人事資料錄入、資料查詢、資料刪除等功能。

經(jīng)分析后,本系統(tǒng)具有以下3個功能模塊:1.系統(tǒng)功能(1)用戶管理模塊。該模塊主要是實現(xiàn)操作用戶的增加、刪除和修改。(2)密碼修改模塊。該模塊主要實現(xiàn)各操作用戶修改自己的操作密碼,系統(tǒng)管理用戶可以修改其他用戶的密碼。(3)系統(tǒng)初始化模塊。主要用來實現(xiàn)初始化功能。(4)退出模塊。就是退出系統(tǒng)。9.6人力資源管理系統(tǒng)開發(fā)2.人事管理主要實現(xiàn)人事信息的增加、修改和刪除等功能。3.人事查詢實現(xiàn)按各種條件進行查詢,并且實現(xiàn)打印查詢結(jié)果。9.6.2數(shù)據(jù)庫分析為了人事管理系統(tǒng)正常運行,需要創(chuàng)建兩個數(shù)據(jù)表:一個是操作用戶數(shù)據(jù)表Operator表;另一個是人事信息數(shù)據(jù)表Info表。9.6.3數(shù)據(jù)庫與數(shù)據(jù)源創(chuàng)建1.BDE方式(1)選擇【開始】|【程序】|【BorlandDelphi7】|【BDEAdministrator】,即可打開BD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論