?? 031.htm
字號(hào):
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI基礎(chǔ)教程-->第十三章 Delphi開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序概述(一)</TITLE>
<META NAME="keywords" CONTENT=" DELPHI基礎(chǔ)教程 第十三章 Delphi開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序概述(一)">
<META NAME="description" CONTENT=" - DELPHI基礎(chǔ)教程 - 第十三章 Delphi開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序概述(一)">
<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋體"}
.tt2 {font: 12pt/15pt "宋體"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>
<TD CLASS="tt3" VALIGN="top" width="8%" bgcolor="#e0e0e0"><strong><A HREF="032.htm"><FONT style="FONT-SIZE: 9pt">后一頁(yè)</font></A><BR>
<A HREF="030.htm"><FONT style="FONT-SIZE: 9pt">前一頁(yè)</font></A><BR>
<A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目錄</font></A><BR>
<A HREF="../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首頁(yè)</font></A><BR>
</strong>
</TD>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷體_GB2312">第十三章 Delphi開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序概述(一)</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p>13.1 數(shù)據(jù)庫(kù)系統(tǒng)概述 </p>
<p>
數(shù)據(jù)庫(kù)系統(tǒng)為我們提供了一種把與我們的工作和生活緊密相關(guān)的信息集合在一起的方法,它還提供了在某個(gè)集中的地方存儲(chǔ)和維護(hù)這些信息的方法。數(shù)據(jù)庫(kù)系統(tǒng)主要由三大部分組成:數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS:它是專門(mén)負(fù)責(zé)組織和管理數(shù)據(jù)信息的程序)、
數(shù)據(jù)庫(kù)應(yīng)用程序(它使我們能夠獲取、顯示和更新由DBMS存儲(chǔ)的數(shù)據(jù))、數(shù)據(jù)庫(kù)(按一定結(jié)構(gòu)組織在一起的相關(guān)數(shù)據(jù)的集合)。</p>
<p> 一般來(lái)說(shuō),DBMS和數(shù)據(jù)庫(kù)應(yīng)用程序都駐留在同一臺(tái)計(jì)算機(jī)上并在同一臺(tái)計(jì)算機(jī)上運(yùn)行,很多情況下兩者甚至結(jié)合在同一個(gè)程序中,以前使用的大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)都是用這種方法設(shè)計(jì)的。但是隨著DBMS技術(shù)的發(fā)展,目前的數(shù)據(jù)庫(kù)系統(tǒng)正向客戶/服務(wù)器模式發(fā)展。客戶/服務(wù)器數(shù)據(jù)庫(kù)將DBMS和數(shù)據(jù)庫(kù)應(yīng)用程序分開(kāi),從而提高了數(shù)據(jù)庫(kù)系統(tǒng)的處理能力。數(shù)據(jù)庫(kù)應(yīng)用程序運(yùn)行在一個(gè)或多個(gè)用戶工作站(客戶機(jī))上,并且通過(guò)網(wǎng)絡(luò)與運(yùn)行在其它計(jì)算機(jī)上(服務(wù)器)的一個(gè)或多個(gè)DBMS進(jìn)行通信。</p>
<p> 下面是數(shù)據(jù)庫(kù)系統(tǒng)中一些概念和述語(yǔ)。 </p>
<p>13.1.1 數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS) </p>
<p> 數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)是用于描述、管理和維護(hù)數(shù)據(jù)庫(kù)的程序系統(tǒng),是數(shù)據(jù)庫(kù)系統(tǒng)的核心組成部分。它建立在操作系統(tǒng)的基礎(chǔ)上,對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一的管理和控制。其主要功能有:</p>
<p>1. 描述數(shù)據(jù)庫(kù):描述數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)、語(yǔ)義信息和保密要求等。</p>
<p>2.
管理數(shù)據(jù)庫(kù):控制整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的運(yùn)行,控制用戶的并發(fā)性訪問(wèn),檢驗(yàn)數(shù)據(jù)的安
全、保密與完整性,執(zhí)行數(shù)據(jù)檢索、插入、刪除、修改等操作。</p>
<p>3.維護(hù)數(shù)據(jù)庫(kù):控制數(shù)據(jù)庫(kù)初始數(shù)據(jù)的裝入,記錄工作日志,監(jiān)視數(shù)據(jù)庫(kù)性能,修改更新數(shù)據(jù)庫(kù),重新組織數(shù)據(jù)庫(kù),恢復(fù)出現(xiàn)故障的數(shù)據(jù)庫(kù)。</p>
<p>4.數(shù)據(jù)通信 :組織數(shù)據(jù)的傳輸。</p>
<p> DBMS主要有四種類型:文件管理系統(tǒng)、層次數(shù)據(jù)庫(kù)系統(tǒng)、
網(wǎng)狀數(shù)據(jù)庫(kù)系統(tǒng)和關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。因?yàn)槟壳瓣P(guān)系數(shù)據(jù)庫(kù)系統(tǒng)應(yīng)用最為廣泛,所以我們重點(diǎn)對(duì)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中的幾個(gè)概念進(jìn)行介紹。</p>
<p> 關(guān)系數(shù)據(jù)庫(kù)(Relational Database):一個(gè)關(guān)系數(shù)據(jù)庫(kù)是由若干表組成。在Delphi中,數(shù)據(jù)庫(kù)概念對(duì)應(yīng)到物理文件上是有一些不同的。對(duì)于dBASE、FoxPro、Paradox這三種數(shù)據(jù)庫(kù)系統(tǒng),數(shù)據(jù)庫(kù)對(duì)應(yīng)于某一個(gè)子目錄,而其它類型如MS
Access、Btrieve則是指某個(gè)文件。這是因?yàn)榍罢叩谋頌閱为?dú)的文件,而后者的表是聚集在一個(gè)數(shù)據(jù)庫(kù)文件中的。</p>
<p> 表(Table):一個(gè)表就是一組相關(guān)的數(shù)據(jù)按行排列,象一張表格一樣。比如一個(gè)班所有學(xué)生的期末考試成績(jī),存在一個(gè)表中,每一行對(duì)應(yīng)一名學(xué)生,在這一行中,包括學(xué)生的學(xué)號(hào)、姓名以及各門(mén)課程的成績(jī)。</p>
<p> 字段(Field):在表中,每一列稱為一個(gè)字段。每一個(gè)字段都有相應(yīng)的描述信息,如數(shù)據(jù)類型、數(shù)據(jù)寬度等。</p>
<p>記錄(Record):在表中,每一行稱為一條記錄。</p>
<p>索引(Index):為了加快訪問(wèn)數(shù)據(jù)庫(kù)的速度,許多數(shù)據(jù)庫(kù)都使用索引。 </p>
<p>13.1.2 數(shù)據(jù)庫(kù)應(yīng)用程序</p>
<p> DBMS中存儲(chǔ)了大量的數(shù)據(jù)信息,其目的是為用戶提供數(shù)據(jù)信息服務(wù),而數(shù)據(jù)庫(kù)應(yīng)用程序正是與DBMS進(jìn)行通信,并訪問(wèn)DBMS中的數(shù)據(jù),它是DBMS實(shí)現(xiàn)其對(duì)外提供數(shù)據(jù)信息服務(wù)這一目的的唯一途徑。簡(jiǎn)單地說(shuō),數(shù)據(jù)庫(kù)應(yīng)用程序是一個(gè)允許用戶插入、修改、刪除并報(bào)告數(shù)據(jù)庫(kù)中的數(shù)據(jù)的計(jì)算機(jī)程序。數(shù)據(jù)庫(kù)應(yīng)用程序在傳統(tǒng)上是由程序員用一種或多種通用或?qū)S玫某绦蛟O(shè)計(jì)語(yǔ)言編寫(xiě)的,但是近年來(lái)出現(xiàn)了多種面向用戶的數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)工具,這些工具可以簡(jiǎn)化使用DBMS的過(guò)程,并且不需要專門(mén)編程。Delphi就是一種強(qiáng)有力的數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)工具。</p>
<p>用來(lái)生成數(shù)據(jù)庫(kù)應(yīng)用程序的語(yǔ)言主要分為三大類型:</p>
<p>1.過(guò)程化語(yǔ)言</p>
<p> 標(biāo)準(zhǔn)的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言如Pascal、Basic和C都是過(guò)程化語(yǔ)言,這些語(yǔ)言可以通過(guò)某種“應(yīng)用程序接口”(API)來(lái)創(chuàng)建數(shù)據(jù)庫(kù)應(yīng)用程序,這種API由一組標(biāo)準(zhǔn)的函數(shù)(或調(diào)用)組成,這些函數(shù)和調(diào)用則擴(kuò)展了語(yǔ)言的功能,使之能訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)。當(dāng)程序設(shè)計(jì)人員用過(guò)程化語(yǔ)言創(chuàng)建數(shù)據(jù)庫(kù)應(yīng)用時(shí),必須把應(yīng)用的代碼編寫(xiě)成一系列的過(guò)程,每個(gè)過(guò)程執(zhí)行應(yīng)用的某一部分的工作,如一個(gè)過(guò)程查詢數(shù)據(jù)庫(kù),而另一過(guò)程更新數(shù)據(jù)庫(kù)中的數(shù)據(jù),然后不同的過(guò)程通過(guò)其他的用戶界面過(guò)程(例如菜單系統(tǒng))聯(lián)系在一起,并且在應(yīng)用中的適當(dāng)?shù)胤竭\(yùn)行。</p>
<p>
上述這些過(guò)程化語(yǔ)言一般用來(lái)創(chuàng)建非數(shù)據(jù)庫(kù)應(yīng)用程序,它們通常被稱為“第三代語(yǔ)言”(3GL)。還有一些過(guò)程化程序設(shè)計(jì)語(yǔ)言是某種特定的DBMS專用的,
這些語(yǔ)言一般被稱為“第四代語(yǔ)言”(4GL),即數(shù)據(jù)庫(kù)專用語(yǔ)言。常見(jiàn)的數(shù)據(jù)庫(kù)專用的過(guò)程化語(yǔ)言如dBASE語(yǔ)言,Paradox數(shù)據(jù)庫(kù)的PAL語(yǔ)言等等。</p>
<p>2.結(jié)構(gòu)化查詢語(yǔ)言(SQL)</p>
<p> 結(jié)構(gòu)化查詢語(yǔ)言(Structure Query Language)是基于關(guān)系模型的數(shù)據(jù)庫(kù)查詢語(yǔ)言,它是一種非過(guò)程化的程序語(yǔ)言,也就是說(shuō),沒(méi)有必要寫(xiě)出將如何做某事情,只需寫(xiě)出做到什么就可以了。寫(xiě)出的語(yǔ)句可看作是一個(gè)問(wèn)題,稱為“查詢”(Query),針對(duì)這個(gè)查詢,得到所需的查詢結(jié)果。下面是一個(gè)例子: </p>
<p>Select Name,Total from Class where Total>600 </p>
<p> 這個(gè)查詢意為從數(shù)據(jù)庫(kù)表Class中將總分(Total)大于600的所有人選出來(lái),
并列出他們的姓名(Name)和總分(Total)。</p>
<p> 把SQL描述為子語(yǔ)言更適當(dāng)一些,因?yàn)樗鼪](méi)有任何屏幕處理或用戶輸入/輸出的能力。它的主要目的是為了提供訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)方法,而不管數(shù)據(jù)庫(kù)應(yīng)用的其余部分是用什么語(yǔ)言編寫(xiě)的,它既是為數(shù)據(jù)庫(kù)的交互式查詢而設(shè)計(jì)的(因此被稱為動(dòng)態(tài)SQL),
同時(shí)也可在過(guò)程化語(yǔ)言編寫(xiě)的數(shù)據(jù)庫(kù)應(yīng)用程序中使用(因此被稱為嵌入式SQL)。</p>
<p>3.其他語(yǔ)言</p>
<p>
用于開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的語(yǔ)言中,還可以使用目前數(shù)常見(jiàn)的“面向?qū)ο蟪绦蛟O(shè)計(jì)”(OOP)語(yǔ)言,如C++、
Objact Pascal等,OOP代表了一種完全不同的程序設(shè)計(jì)方法,
在這種程序設(shè)計(jì)方法中,活動(dòng)被定義為在“對(duì)象”上發(fā)生的操作,而不是作為一系列過(guò)程來(lái)定義的。在數(shù)據(jù)庫(kù)應(yīng)用程序中使用OOP語(yǔ)言的情況正在不斷增加。</p>
<p>
開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序使用的另一種語(yǔ)言是“宏”語(yǔ)言。宏語(yǔ)言不是一種完全的程序設(shè)計(jì)語(yǔ)言,它實(shí)際上是一個(gè)用戶手工輸入的表,這個(gè)表被輸入到應(yīng)用程序中,以便自動(dòng)執(zhí)行一定的任務(wù)。對(duì)于某個(gè)特定應(yīng)用的高級(jí)語(yǔ)言,宏語(yǔ)言通常可以在低檔DBMS軟件中或數(shù)據(jù)庫(kù)服務(wù)器的前端中找到。</p>
<p> 最后,還有一種“Query-By-Example”(QBE,范例查詢)語(yǔ)言。嚴(yán)格地講QBE不是一種語(yǔ)言,它是面向用戶提供了一個(gè)或多個(gè)空表的界面,這些空表對(duì)應(yīng)于數(shù)據(jù)庫(kù)中的表。用戶可以通過(guò)鍵盤(pán)選擇需要查詢的列,并在適當(dāng)?shù)牧兄刑钊霔l件從而定義查詢的檢索條件,然后DBMS就把QBE轉(zhuǎn)換成相應(yīng)的動(dòng)作,以完成用戶要求的查詢?nèi)蝿?wù)。 </p>
<p>13.2 Delphi的數(shù)據(jù)庫(kù)特性及功能簡(jiǎn)介 </p>
<p>
直到目前為止,計(jì)算機(jī)軟件的開(kāi)發(fā)分為兩個(gè)不同的體系,其中一個(gè)體系是使用傳統(tǒng)的程序設(shè)計(jì)語(yǔ)言(如Pascal、Basic和C等)開(kāi)發(fā)數(shù)值控制、數(shù)值運(yùn)算等軟件,圍繞它們的重點(diǎn)是算術(shù)、數(shù)據(jù)結(jié)構(gòu)以及近年產(chǎn)生的面向?qū)ο蠹夹g(shù)。另一個(gè)體系則是通用的數(shù)據(jù)庫(kù)管理軟件領(lǐng)域(數(shù)據(jù)庫(kù)應(yīng)用程序的開(kāi)發(fā))。這兩個(gè)體系的發(fā)展都極為迅猛,但是二者并沒(méi)出現(xiàn)混合滲透跡象。如果使用數(shù)據(jù)庫(kù)語(yǔ)言進(jìn)行傳統(tǒng)的算術(shù)編程,雖然也能完成相應(yīng)的功能,但是其編程過(guò)程可能極為復(fù)雜。如果使用傳統(tǒng)的編程語(yǔ)言進(jìn)行數(shù)據(jù)庫(kù)編程,通過(guò)調(diào)用專用的數(shù)據(jù)庫(kù)應(yīng)用程序接口函數(shù)和過(guò)程,利用這些函數(shù)和過(guò)程提供的功能,可能也能做得比較完善,但這做起來(lái)大多是極其困難的。而Delphi結(jié)合了兩個(gè)體系的優(yōu)點(diǎn),它結(jié)合了傳統(tǒng)的編程語(yǔ)言O(shè)bject
Pascal和數(shù)據(jù)庫(kù)語(yǔ)言的強(qiáng)大功能,
它即可以用于傳統(tǒng)的算術(shù)編程又可以用于數(shù)據(jù)庫(kù)編程,特別是Delphi具有強(qiáng)大的數(shù)據(jù)庫(kù)功能,利用Delphi的數(shù)據(jù)庫(kù)工具,我們根本不需要編寫(xiě)任何Object
Pascal代碼便可以創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)應(yīng)用。</p>
<p> Delphi是Borland公司于1994年底發(fā)布的用于開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的工具,
它是面向?qū)ο蟮模悄壳伴_(kāi)發(fā)客戶/服務(wù)器數(shù)據(jù)庫(kù)應(yīng)用程序的強(qiáng)有力的工具。Delphi在Window3.1以上版本的系統(tǒng)環(huán)境下運(yùn)行,目前具有兩個(gè)版本:Delphi的標(biāo)準(zhǔn)版本和客戶/服務(wù)器版本。標(biāo)準(zhǔn)版本包含一個(gè)Borland
Database Engine的局部拷貝,它允許用戶創(chuàng)建能訪問(wèn)dBASE、Paradox和Local
InterBase 服務(wù)器的數(shù)據(jù)庫(kù)應(yīng)用, 它還支持具有 ODBC 接口的數(shù)據(jù)庫(kù)。Delphi的客戶/服務(wù)器版本包括Borland
SQL Link, 它能直接訪問(wèn) ORACLE 、 SyBase 和Microsoft SQL Server,Informix以及InterBase數(shù)據(jù)庫(kù)服務(wù)器。</p>
<p> Delphi可以訪問(wèn)多種數(shù)據(jù)庫(kù)管理系統(tǒng)的數(shù)據(jù)庫(kù),憑借窗體(Forms)和報(bào)表(Reports),BDE(Borland
Database Engine)可以訪問(wèn)諸如Paradox、dBASE、本地InterBase
服務(wù)器的數(shù)據(jù)庫(kù),也可以訪問(wèn)遠(yuǎn)程數(shù)據(jù)庫(kù)服務(wù)器上的數(shù)據(jù)庫(kù)(如ORACLE、SyBase、Informix等客戶/服務(wù)器數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)),或任何經(jīng)ODBC(Open
Database Connecticity) 可訪問(wèn)的數(shù)據(jù)庫(kù)管理系統(tǒng)中的數(shù)據(jù)庫(kù)。 </p>
<p>13.2.1 Delphi的數(shù)據(jù)庫(kù)特性 </p>
<p> 跟其他的應(yīng)用程序一樣,Delphi提供了許多部件以方便地創(chuàng)建數(shù)據(jù)庫(kù)應(yīng)用程序。數(shù)據(jù)庫(kù)對(duì)象的數(shù)據(jù)成員既可在設(shè)計(jì)階段設(shè)置,也可在運(yùn)行階段通過(guò)程序代碼進(jìn)行設(shè)置。Delphi的部件板上提供了兩頁(yè)數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)中所要使用的部件:</p>
<p> 數(shù)據(jù)訪問(wèn)頁(yè)(Data Access Page)上的部件用于直接訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)表。</p>
<p> 數(shù)據(jù)控制頁(yè)(Data Control Page)上的部件用來(lái)與用戶交互,顯示、
修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)。</p>
<p>數(shù)據(jù)庫(kù)應(yīng)用程序首先是利用Delphi提供的數(shù)據(jù)庫(kù)部件與BDE建立聯(lián)系,然后再通過(guò)BDE與數(shù)據(jù)庫(kù)聯(lián)系。下圖闡述了Delphi的數(shù)據(jù)庫(kù)工具和部件、Delphi數(shù)據(jù)庫(kù)應(yīng)用程序與BDE
、數(shù)據(jù)源之間的關(guān)系。</p>
<p>下表概括了Delphi的數(shù)據(jù)庫(kù)特性: </p>
<p>表13.1 Delphi的數(shù)據(jù)庫(kù)特性</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p> 工具和部件 主 要 用 途 </p>
<p>────────────────────────────────────── </p>
<p> Data Access Components 訪問(wèn)數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)表、存貯過(guò)程等 </p>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -