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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.BDE管理器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Locate方法用來(lái)在數(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)為每個(gè)待查字段設(shè)置目標(biāo)值。(4)調(diào)用GotoKey方法實(shí)現(xiàn)查詢,并測(cè)試它的返回值判斷查詢是否成功。3.使用FindKey方法的索引查找將設(shè)置查找狀態(tài)、設(shè)置查找值,以及執(zhí)行查找集中在一個(gè)方法調(diào)用中實(shí)現(xiàn)。FindKey方法接受的參數(shù)是放在方括號(hào)中的,是用逗號(hào)分開的查找值數(shù)組。數(shù)組中的每個(gè)值都對(duì)應(yīng)于特定字段的查找值,即參數(shù)中允許有多個(gè)查找值,F(xiàn)indKey允許用戶同時(shí)查找數(shù)據(jù)集中的多個(gè)字段。4.使用GotoNearest和FindNearest方法的近似查找不要求查找結(jié)果與查找值精確匹配。如果找到與指定值匹配的記錄,則將記錄指針到該記錄處,否則,將會(huì)出與指定值最接近的記錄并將記錄指針指向它。

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

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

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

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

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論