| 後一頁 前一頁 回目錄 回首頁 |
13.1 資料庫系統概述 資料庫系統為我們提供了一種把與我們的工作和生活緊密相關的資訊集合在一起的方法,它還提供了在某個集中的地方存儲和維護這些資訊的方法。資料庫系統主要由三大部分群群組成:資料庫管理系統(DBMS:它是專門負責群群組織和管理數據資訊的程式)、 資料庫應用程式(它使我們能夠獲取、顯示和更新由DBMS存儲的數據)、資料庫(按一定結構群群組織在一起的相關數據的集合)。 一般來說,DBMS和資料庫應用程式都駐留在同一台電腦上並在同一台電腦上執行,很多情況下兩者甚至結合在同一個程式中,以前使用的大多數資料庫系統都是用這種方法設計的。但是隨著DBMS技術的發展,目前的資料庫系統正向用戶/伺服器模式發展。用戶/伺服器資料庫將DBMS和資料庫應用程式分開,從而提高了資料庫系統的處理能力。資料庫應用程式執行在一個或多個用戶工作站(用戶機)上,並且通過網路與執行在其它電腦上(伺服器)的一個或多個DBMS進行通信。 下面是資料庫系統中一些概念和述語。 13.1.1 資料庫管理系統(DBMS) 資料庫管理系統(DBMS)是用於描述、管理和維護資料庫的程式系統,是資料庫系統的核心群群組成部分。它建立在作業系統的基礎上,對資料庫進行統一的管理和控制。其主要功能有: 1. 描述資料庫:描述資料庫的邏輯結構、存儲結構、語義資訊和保密要求等。 2. 管理資料庫:控制整個資料庫系統的執行,控制用戶的並發性存取,檢驗數據的安 全、保密與完整性,執行數據檢索、插入、解除、修改等操作。 3.維護資料庫:控制資料庫初始數據的載入,記錄工作日誌,監視資料庫性能,修改更新資料庫,重新群群組織資料庫,恢復出現故障的資料庫。 4.數據通信 :群群組織數據的傳輸。 DBMS主要有四種型式:文件管理系統、層次資料庫系統、 網狀資料庫系統和關係資料庫系統。因為目前關係資料庫系統應用最為廣泛,所以我們重點對關係資料庫系統中的幾個概念進行介紹。 關係資料庫(Relational Database):一個關係資料庫是由若干表群群組成。在Delphi中,資料庫概念對應到物理文件上是有一些不同的。對於dBASE、FoxPro、Paradox這三種資料庫系統,資料庫對應於某一個子目錄,而其它型式如MS Access、Btrieve則是指某個文件。這是因為前者的表為單獨的文件,而後者的表是聚集在一個資料庫文件中的。 表(Table):一個表就是一群群組相關的數據按行排列,象一張表格一樣。比如一個班所有學生的期末考試成績,存在一個表中,每一行對應一名學生,在這一行中,包括學生的學號、姓名以及各門課程的成績。 欄位(Field):在表中,每一列稱為一個欄位。每一個欄位都有相應的描述資訊,如數據型式、數據寬度等。 記錄(Record):在表中,每一行稱為一條記錄。 索引(Index):為了加快存取資料庫的速度,許多資料庫都使用索引。 13.1.2 資料庫應用程式 DBMS中存儲了大量的數據資訊,其目的是為用戶提供數據資訊服務,而資料庫應用程式正是與DBMS進行通信,並存取DBMS中的數據,它是DBMS實現其對外提供數據資訊服務這一目的的唯一途徑。簡單地說,資料庫應用程式是一個允許用戶插入、修改、解除並報告資料庫中的數據的電腦程式。資料庫應用程式在傳統上是由程式員用一種或多種一般的或專用的程式設計語言編寫的,但是近年來出現了多種面向用戶的資料庫應用程式開發工具,這些工具可以簡化使用DBMS的過程,並且不需要專門程式設計。Delphi就是一種強有力的資料庫應用程式開發工具。 用來產生資料庫應用程式的語言主要分為三大型式: 1.過程化語言 標準的電腦程式設計語言如Pascal、Basic和C都是過程化語言,這些語言可以通過某種“應用程式接口”(API)來建立資料庫應用程式,這種API由一群群組標準的函數(或呼叫)群群組成,這些函數和呼叫則擴展了語言的功能,使之能存取資料庫中的數據。當程式設計人員用過程化語言建立資料庫應用時,必須把應用的代碼編寫成一系列的過程,每個過程執行應用的某一部分的工作,如一個過程查詢資料庫,而另一過程更新資料庫中的數據,然後不同的過程通過其他的用戶介面過程(例如選擇表系統)聯繫在一起,並且在應用中的適當地方執行。 上述這些過程化語言一般用來建立非資料庫應用程式,它們通常被稱為“第三代語言”(3GL)。還有一些過程化程式設計語言是某種特定的DBMS專用的, 這些語言一般被稱為“第四代語言”(4GL),即資料庫專用語言。常見的資料庫專用的過程化語言如dBASE語言,Paradox資料庫的PAL語言等等。 2.結構化查詢語言(SQL) 結構化查詢語言(Structure Query Language)是基於關係模型的資料庫查詢語言,它是一種非過程化的程式語言,也就是說,沒有必要寫出將如何做某事情,只需寫出做到什麼就可以了。寫出的語句可看作是一個問題,稱為“查詢”(Query),針對這個查詢,得到所需的查詢結果。下面是一個例子: Select Name,Total from Class where Total>600 這個查詢意為從資料庫表Class中將總分(Total)大於600的所有人選出來, 並列出他們的姓名(Name)和總分(Total)。 把SQL描述為子語言更適當一些,因為它沒有任何螢幕處理或用戶輸入/輸出的能力。它的主要目的是為了提供存取資料庫的標準方法,而不管資料庫應用的其餘部分是用什麼語言編寫的,它既是為資料庫的互動式查詢而設計的(因此被稱為動態SQL), 同時也可在過程化語言編寫的資料庫應用程式中使用(因此被稱為嵌入式SQL)。 3.其他語言 用於開發資料庫應用程式的語言中,還可以使用目前數常見的“面向物件程式設計”(OOP)語言,如C++、 Objact Pascal等,OOP代表了一種完全不同的程式設計方法, 在這種程式設計方法中,活動被定義為在“物件”上發生的操作,而不是作為一系列過程來定義的。在資料庫應用程式中使用OOP語言的情況正在不斷增加。 開發資料庫應用程式使用的另一種語言是“宏”語言。宏語言不是一種完全的程式設計語言,它實際上是一個用戶手工輸入的表,這個表被輸入到應用程式中,以便自動執行一定的任務。對於某個特定應用的進階語言,宏語言通常可以在低檔DBMS軟體中或資料庫伺服器的前端中找到。 最後,還有一種“Query-By-Example”(QBE,範例查詢)語言。嚴格地講QBE不是一種語言,它是面向用戶提供了一個或多個空表的介面,這些空表對應於資料庫中的表。用戶可以通過鍵盤選擇需要查詢的列,並在適當的列中填入條件從而定義查詢的檢索條件,然後DBMS就把QBE轉換成相應的動作,以完成用戶要求的查詢任務。 13.2 Delphi的資料庫特性及功能簡介 直到目前為止,電腦軟體的開發分為兩個不同的體系,其中一個體系是使用傳統的程式設計語言(如Pascal、Basic和C等)開發數值控制、數值運算等軟體,圍繞它們的重點是算術、數據結構以及近年產生的面向物件技術。另一個體系則是一般的的資料庫管理軟體領欄位(資料庫應用程式的開發)。這兩個體系的發展都極為迅猛,但是二者並沒出現混合滲透跡象。如果使用資料庫語言進行傳統的算術程式設計,雖然也能完成相應的功能,但是其程式設計過程可能極為複雜。如果使用傳統的程式設計語言進行資料庫程式設計,通過呼叫專用的資料庫應用程式接口函數和過程,利用這些函數和過程提供的功能,可能也能做得比較完善,但這做起來大多是極其困難的。而Delphi結合了兩個體系的優點,它結合了傳統的程式設計語言Object Pascal和資料庫語言的強大功能, 它即可以用於傳統的算術程式設計又可以用於資料庫程式設計,特別是Delphi具有強大的資料庫功能,利用Delphi的資料庫工具,我們根本不需要編寫任何Object Pascal代碼便可以建立一個簡單的資料庫應用。 Delphi是Borland公司於1994年底發佈的用於開發資料庫應用程式的工具, 它是面向物件的,它是目前開發用戶/伺服器資料庫應用程式的強有力的工具。Delphi在Window3.1以上版本的系統環境下執行,目前具有兩個版本:Delphi的標準版本和用戶/伺服器版本。標準版本包含一個Borland Database Engine的局部拷貝,它允許用戶建立能存取dBASE、Paradox和Local InterBase 伺服器的資料庫應用, 它還支援具有 ODBC 接口的資料庫。Delphi的用戶/伺服器版本包括Borland SQL Link, 它能直接存取 ORACLE 、 SyBase 和Microsoft SQL Server,Informix以及InterBase資料庫伺服器。 Delphi可以存取多種資料庫管理系統的資料庫,憑借窗體(Forms)和報表(Reports),BDE(Borland Database Engine)可以存取諸如Paradox、dBASE、本地InterBase 伺服器的資料庫,也可以存取遠端資料庫伺服器上的資料庫(如ORACLE、SyBase、Informix等用戶/伺服器資料庫中的資料庫),或任何經ODBC(Open Database Connecticity) 可存取的資料庫管理系統中的資料庫。 13.2.1 Delphi的資料庫特性 跟其他的應用程式一樣,Delphi提供了許多部件以方便地建立資料庫應用程式。資料庫物件的數據成員既可在設計階段設定,也可在執行階段通過程式代碼進行設定。Delphi的部件板上提供了兩頁資料庫應用程式開發中所要使用的部件: 數據存取頁(Data Access Page)上的部件用於直接存取資料庫中的資料庫表。 數據控制頁(Data Control Page)上的部件用來與用戶互動,顯示、 修改資料庫中的數據。 資料庫應用程式首先是利用Delphi提供的資料庫部件與BDE建立聯繫,然後再通過BDE與資料庫聯繫。下圖闡述了Delphi的資料庫工具和部件、Delphi資料庫應用程式與BDE 、數據源之間的關係。 下表概括了Delphi的資料庫特性: 表13.1 Delphi的資料庫特性 ────────────────────────────────────── 工具和部件 主 要 用 途 —————————————————————————————————————— Data Access Components 存取資料庫、資料庫表、存貯過程等 —————————————————————————————————————— Data Control Components 與用戶互動,提供顯示、修改資料庫中數據的介面 —————————————————————————————————————— Database Desktop(DBD) 建立、索引、查詢資料庫表以及存取、編輯來自各數據 中的數據 —————————————————————————————————————— ReportSmith 建立、瀏覽和列印資料庫表中的數據 —————————————————————————————————————— Borland Database Engine 資料庫應用通過BDE存取dBASE Paradox資料庫中的數據 (BDE) 和本地InterBase資料庫伺服器中的數據
—————————————————————————————————————— BDE Configuration 建立和管理BDE與資料庫建立連接時所使用的資料庫的 Utility 別名 —————————————————————————————————————— 它是一個單用戶、多例程的本地SQL資料庫伺服器,可 Local InterBase Server 在單機環境下用來開發或測試用戶/伺服器資料庫應用 程式,然後再將之擴展成一個存取遠端資料庫伺服器如 ORACLE、SyBase、Informix等 —————————————————————————————————————— InterBase SQL Link 連接Delphi資料庫應用程式一本地InterBase伺服器的 驅動程式 Delphi上述這些特性使得我們建立資料庫應用程式通過BDE能夠很靈活地與 dBASE 、Paradox、Local InterBase資料庫伺服器進行連接並可以方便地存取其中的數據。我們在建立一個簡單的資料庫應用時通過使用Delphi提供的上述工具和部件甚至可以不需編寫任何程式。 BDE被自動地包含在Delphi中,因此,我們在建立資料庫應用程式時,不必關心BDE的有關內容。Delphi的裝設程式自動為Paradox、dBASE和本地InterBaseServer 裝設相應的驅動程式,並建立了有關的組態,DBE Configuration Utility 可以建立應用程式與資料庫的連接資訊,還可以為資料庫設定別名。 下表列出了Delphi開發Client/Server應用程式的有關特性,這些特性擴展了 Delphi存取遠端資料庫的功能,如SQL資料庫伺服器(ORACLE、SyBase、Informix、 Microsoft SQL Server、InterBase)。 表13.2 Delphi Client/server資料庫特性 ───────────────────────────────── 工 具 主 要 用 途 ————————————————————————————————— SQL Drivers中的SQL link和ReportSmith為 SQL Drivers Delphi資料庫應用程式提供了存取遠端SQL 伺服器的驅動程式,如存取ORACLE、SyBase、 Microsoft SQL server、Informix、Intermix ————————————————————————————————— Visual Query Builder 以可視化的方式建立SQL語句對資料庫表和表 中的記錄進行操作 ─────────────────────────────────
SQL links使得Delphi資料庫應用程式利用SQL語言存取駐留在遠端伺服器上的數據,這些伺服器包括ORACLE、Sybase、Microsoft SQL Server、Informix、InterBase。 當裝設SQL Link驅動程式之後,SQL語句便可以直接操作伺服器上的數據。
13.2.2 Delphi可以存取的數據源(DataSource)
Delphi資料庫應用程式是通過BDE獲取它們所需的數據的,BDE與不同型式的數據源打交道,BDE可以使用的數據源有如表13.3所示
表13.3 Delphi可存取的數據源 ───────────────────────────────────── 數據源(DataSource) 特 性 描 述 文件檔案附加名 ————————————————————————————————————— 資料庫表是通過dBASE資料庫管理系統或 dBASE資料庫 DBD建立的,每個表是一個獨立的文件 .DBF ————————————————————————————————————— 資料庫表是通過Paradox資料庫管理系統 .DB Paradox資料庫 或DBD建立的,每個表是一個獨立的文件 ————————————————————————————————————— ASCII文件 表是通過Database Desktop建立的,每個 .TXT 表是一個獨立的文件 ————————————————————————————————————— 本地InterBase伺服器 資料庫是通過InterBase資料庫管理系統 .GDB 建立的,多個表包含在一個資料庫文件中 ————————————————————————————————————— SQL資料庫伺服器: 資料庫是通過相應的資料庫伺服器提供的 依賴不同的 ORACLE,Sybase,Informix 專用或一般的工具建立的,也可以通過DBD來 資料庫管理 Microsoft SQL Server 建立資料庫,並通過SQL Link存取資料庫 系統 InterBase ————————————————————————————————————— ODBC數據源 主要是指那些具有ODBC接口的資料庫系統 依賴於相應 如MS Access,Btrieve等 的資料庫 ───────────────────────────────────── 13.3 Delphi資料庫的體系結構 Delphi使用可視化的部件建立資料庫應用,跟建立其它的非資料庫應用程式一樣,資料庫部件都具備一定的屬性,程式設計人員可以在設計過程中設定部件的多種屬性,也可以在程式執行過程中通過程式來設定部件的各種屬性。 在Delphi部件板上有兩頁資料庫部件用於開發資料庫應用程式: 數據存取部件頁:該頁上的部件主要用於敘述有關的資料庫的資訊,如應用程式要存取(連接)的資料庫,要存取資料庫中的具體的資料庫表,以及要存取表中哪些欄位等,在實際的開發應用中常用的部件有TDataSource、TTable、TQuery等。 數據控制部件頁:該頁上的部件主要用於顯示瀏覽資料庫中的數據資訊,為用戶提供了一個可視化的介面,常用的部件有:TDBGrid、TDBEdit、TDBCheck等,可以讓用戶對資料庫中的資訊進行有效的瀏覽、編輯、插入、解除等操作。 TTable、TQuery、TStoredproc部件負責與實際的資料庫表聯繫, 並從中獲取數據資訊,因而它們又常常被稱為數據集部件,它們在程式設計過程中是可見的,但在程式執行時是不可見的, 它們通過 BDE 為應用程式提供與資料庫的連接, 數據控制部件通過TDataSource部件與數據集部件相連,為用戶提供一個可視化的介面, 並在其中顯示資料庫中的數據資訊。 13.3.1 數據存取部件 數據存取部件頁上提供了一群群組數據存取部件用來存取資料庫中的數據。 圖13.3 數據存取頁上的數據存取部件 當要建立一個資料庫應用時,首先在窗體中選擇一個數據存取部件,然後為數據存取部件設定有關的屬性,敘述要存取的資料庫、數據表以及表中的記錄等,數據存取部件為數據控制部件與數據源建立一條通道。數據存取部件在程式執行時是不可見的。下表列出了數據存取頁上的數據存取部件以及它們的主要用途: 表13.4 數據存取部件 ──────────────────────────── 部件標簽 主 要 用 途 ———————————————————————————— 作為數據集部件TTable、TQuery、StoredProc群群組 TDataSource 件與數據瀏覽件TDBGrid、TDBEdit之間轉送數據 的通道。 ———————————————————————————— 它是存取磁碟上資料庫表的媒介,它通過BDE存 TTable 取資料庫表中的數據,TTable再與TDataSource 進行“對話”,使得數據瀏覽部件能夠有效地從 TTable中存取數據並能顯示和編輯其中的數據。 ———————————————————————————— 它利用SQL語言存取磁碟上資料庫表中的數據, TQuery 並與TDataSource“對話”,實現數據瀏覽部件 對資料庫的存取。 ———————————————————————————— TStoredProc 在應用程式中,它主要用來存取遠端伺服器中的 存貯過程 ———————————————————————————— 當應用程式要登入到一個遠端伺服器上的資料庫 TDatabase 時,可以用該部件來建立應用程式與資料庫永久 性的連接。 ———————————————————————————— TBatchMove 用於復制資料庫表的結構或表中的記錄。 ———————————————————————————— TReport 用於建立資料庫的輸出報表。 ──────────────────────────── 值得指出的是在絕大多數資料庫應用中,一般都是使用數據集部件TTable、TQuery或TStoredProc與磁碟上的資料庫進行連接,用TDataSource部件連接數據控制部件和數據集部件,當然用戶也可以自定義數據集部件,用於資料庫應用當中, TTable 、 TQuery 和TStoredProc部件中都包含一個不可見的TField型式的物件Fields,Fields是一個串清單,它對應於資料庫表或一個查詢結果的列或欄位。Fields物件是伴隨著TTable、 TQuery 和TStoredproc部件的活動狀態動態地建立的,當資料庫表被關閉時,Fields 物件也隨之消失,它在程式設計和程式執行過程中都是不可見的。 當然也可以利用Fields Editor建立永久性的Fields物件供Delphi應用程式使用, 我們將在後面的內容中詳細闡述。 13.3.1.1 TTable部件 利用TTable部件程式設計人員甚至可以不需要編寫任何程式便可對資料庫進行存取,在一個應用程式窗體中放置一個TTable部件的過程如下: 1、在部件選擇板上選擇Data Access頁; 2、按一下Table圖示; 3、在窗體內按一下滑鼠,獲得一個TTable部件; 4、為TTable部件設定有關的屬性: DatabaseName屬性指定要存取的資料庫所在的路徑名,路徑名可以用別名來表示。 TableName屬性指定要存取資料庫中具體的資料庫表。 Active屬性設定為True時,表示打開要存取的資料庫表;設定為False時,暫時 不打開要存取的資料庫表。 缺省情況下,TTtable部件中包含了要存取的資料庫表中所有的欄位和記錄, 用滑鼠連續按兩下TTable圖示時,會出現一個欄位編輯器(Fields Editor),使用Fields Editor可以對TTable部件中包含的資料庫表中的欄位的顯示格式等屬性進行編輯,具體可以控制: ● 建立一個永久性的欄位清單,包括欄位的順序,欄位的型式等,即使磁碟上實際的資料庫表的表結構發生了改變,我們建立的這個永久性的欄位清單也不會發生改變 ● 為每個欄位指定一個便於閱讀和使用的名字 ● 指定欄位顯示的順序 ● 為每個欄位指定一個用於顯示的字元串 ● 為欄位增加合法性檢驗 ● 為了顯示的需要還可以建立新的欄位(如可計算的欄位)具體的使用方法見後面的內容 13.3.1.2 TQuery部件 TQuery部件是我們使用SQL語言開發資料庫應用程式的有力工具,因為使用SQL語言,我們可以非常方便靈活地對一個或多個資料庫表中的記錄進行存取,所以利用TQuery我們可以查詢本地的資料庫如Pà?aradox和dBASE資料庫系統中的數據,我們還可以使用TQuery部件對一個遠地的資料庫SQL伺服器進行存取,建立Client/Server模式的應用程式。 在一個應用程式窗體中放置一個TQuery部件的過程如下: 1、在部件選擇板上選擇Data Access頁; 2、按一下Query圖示; 3、在窗體內按一下滑鼠,獲得一個TQuery部件; 4、為TQuery部件設定有關的屬性: DatabaseName屬性指定將要存取的資料庫的路徑名。 SQL屬性指定對資料庫表進行存取SQL語句,它可以是一條查詢語句也可以是一條 修改語句或插入語句等。在物件瀏覽器上,按一下SQL屬性時,會打開一個字元串編輯器供程式設計者輸入SQL語句。 在這�堶n注意在TQuery部件中,不是用TableName 屬性來指定要存取的資料庫中的資料庫表,而是在SQL屬性中,通過SQL語句來指定將要存取的資料庫表。 13.3.1.3 TDataSouece部件 TDataSource部件是連接數據集部件TTable、TQuery、 TStoredProc 和數據控制部件TDBGrid、TDBEdit等的橋樑,TTable、TQuery、TStoredProc部件通過BDE可以實現與磁碟上的資料庫連接即存取, 但它們本身不能顯示資料庫中的數據資訊, 而數據控制部件如TDBGrid、TDBEdit等能夠提供可視化的介面,顯示資料庫中的數據資訊,但它們不具備存取磁碟資料庫的能力,正是TDataSource將這兩者有機地結合起來, 使得用戶才能互動地對資料庫中的數據資訊進行查詢、修改、插入、解除等操作。 在應用程式窗體中放置TDataSource部件的過程如下: 1、在部件選擇板上選擇Data Access頁; 2、按一下DataSource圖示; 3、在窗體內按一下滑鼠,獲得一個TDataSource部件; 4、為TDataSource部件設定有關的屬性: Dataset屬性指定一個數據集部件,可以是TTable、TQuery或TStoredProc部件的 名字。 |
後一頁 前一頁 回目錄 回首頁 |