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語句。
在這裡要注意在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部件的名字。
13.3.2 數據控制部件
數據控制部件頁上的部件,主要用於設計用戶界面,對數據庫中的數據進行浏覽、編輯、插入、刪除等操作。因而數據控制部件常常又被稱為數據浏覽部件,數據控制部件其實是在Standard頁上的標准部件的基礎上,相應地增加了數據浏覽功能,使得它們能夠顯示和編輯數據庫中數據信息。
數據控制部件既能夠把數據庫中的數據顯示到窗體中,又可以將其自身的經過修改的數據寫回到數據庫中。下表列出了數據控制頁上的數據控制部件及它們的主要用途。
表13.5 數據控制部件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
部件名稱 主 要 用 途
───────────────────────────────
使用該部件可以向前向後移動記錄指針,可以使
TDBNavigator 用該部件對單條記錄進行編輯,還可以用它來插
入、刪除記錄以及刷新顯示和取消前一次的操作
───────────────────────────────
它是顯示數據庫中的數據的文本框,它只能顯示
TDBText 數據庫表當前記錄的字段值,用戶不能對其中的
數據進行修改。
───────────────────────────────
它是顯示和編輯數據庫表中的數據的編輯框,它
TDBEdit 既可以顯示又可以編輯數據庫表中當前記錄的字
段值。
───────────────────────────────
TDBCheckBox 它是浏覽數據庫中的數據的檢查框,它可以用來
顯示和編輯數據庫中的布爾型字段的字段值。
───────────────────────────────
TDBListBox 它是浏覽數據庫中的數據的列表框,它可以用一
個列表框來顯示數據庫表中一個字段的值。
───────────────────────────────
TDBComboBox 它是浏覽數據庫中的數據的組合框,它可以用一
個組合框來顯示數據庫表中一個字段的值。
───────────────────────────────
TDBRadioGroup 它是浏覽數據庫表中的數據的單選鈕,用一組單
選鈕可以確定顯示數據庫表中哪一個字段。
───────────────────────────────
TDBGrid 它是浏覽數據庫中的數據的網格,以網格的方式
顯示數據庫中的數據,在網格中還可以對數據庫
中的數據進行編輯。利用Fields Editor可以對
數據庫表中字段的顯示格式、顯示順序、是否顯
示等進行控制。
───────────────────────────────
TDBMemo 它主要用於浏覽數據庫中備注型的字段,它可以
用來顯示數據庫表中當前記錄中的BLOB型字段。
───────────────────────────────
TDBImage 它是浏覽數據庫中的數據的圖像框,它可以用於
顯示、拷貝、粘貼據庫表中圖像類型的字段。
───────────────────────────────
TDBLookUpList 它是浏覽數據庫表中的數據的列表框,在基於一
個數據庫表的應用中,用它可以顯示另一個數據
庫表中一個指定的字段值。
───────────────────────────────
TDBLookUpCombo 它是浏覽數據庫表中的數據的組合框,在基於一
個數據庫表的應用中,用它可以顯示另一個數據
庫表中一個指定的字段值。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
數據控制部件為開發Delphi數據庫應用程序提供可視化的用戶界面,不管應用程序是訪問本地數據庫中的數據文件,還是訪問遠程數據庫服務器中的數據文件,用戶界面都是一致的,即數據庫的物理位置對數據控制部件是透明的。
13.3.3 數據庫窗體專家和數據庫操作台(DBD)
Delphi為用戶開發簡單的數據庫應用程序提供了一個開發工具叫做“數據庫窗體專家”(Database Form Expert),在Delphi系統菜單Tool菜單下可以找到。
數據庫窗體專家能夠自動生成簡單的數據庫應用程序中所必須完成的許多任務,它還可以生成基於單個數據庫表的應用程序窗體或基於主要──明細型多個數據庫表的應用程序窗體,數據庫窗體專家能夠自動完成的任務如下:
● 放置數據庫部件到窗體中(TDataSource部件)
● 為數據集部件(TTable、TQuery)和磁盤上的數據庫建立連接
● 建立數據源(TDataSource)與數據控制部件的連接,數據源(TDataSource)與 數據訪問部件(TTable、TQuery)的連接
● 為TQuery部件編寫SQL語句
● 為窗體中的部件定義Tab順序
數據庫操作台(DBD)是數據庫維護和數據定義工具,程序設計人員利用它可以查詢、連接、建立、重構、索引、修改和拷貝數據庫表,包括Pà€aradox和dBASE文件和基於 SQL語言的數據庫表。而且在使用DBD操作Paradox或dBASE的表時,用戶不必擁有 Paradox 或dBASE數據庫管理系統。DBD還可以把一種格式的數據和數據字典拷貝成另一種格式,例如,你可以將一個dBASE的表拷貝到遠程的SQL服務器上的一個數據庫中去。有關DBD詳細描述,請參看“數據庫操作台(DBD)的使用”。
13.4 Delphi數據庫應用程序的開發方法和步驟
13.4.1 概述
用Derphi用開數據庫應用程序,雖然與開發其他應用程序有相似之處,但是也有一些重要的區別,我們必須要加以注意。
利用Delphi的客戶/服務器功能,程序設計者可以在本地數據庫上或遠程數據庫服務器上開發客戶/服務器模式的應用程序。Delphi 的一個強有力的功能之一是可以將基於本地桌面數據庫系統的應用程序很容易地修改成客戶/服務器模式的應用。一個Delphi 數據庫應用程序訪問的是本地數據庫還是遠程SQL數據庫服務器上的數據庫,這對於最終用戶是完全透明的。即數據庫的物理位置對最終用戶是透明的,當數據庫的物理位置發生變化時,用戶界面不必隨之變化。
因為數據庫應用程序的是依賴於它所訪問的數據庫的,所以在開發數據庫應用程序之前必須要建立一個完善的數據庫即數據定義,數據定義應當是開發數據庫應用程序的一部分,但它超出了書本的范圍,有關數據定義的內容,請參看關系數據庫設計方面的資料。在我們用Derphi開發一個數據庫應用程序時,可能有下列四種情況。
1、數據庫不存在或者必須要重新定義。使用DBD為本地數據庫定義Paradox或dBASE 數據庫表。使用Delphi提供的服務器開發工具如Windows ISQL或DBD定義本地或遠程SQL數據庫務器上的數據庫。
2、數據庫在桌面數據庫系統中或局域網上(如Paradox或dBASE),而且BDE、數據庫和應用程序在同一台機器上,這是典型的獨立應用。
3、數據庫在桌面數據庫系統中,但是用戶要把它改變到SQL數據庫服務器中去,這種情況我們在附錄C中詳細討論。
4、數據庫在SQL數據庫服務器中,而且應用程序將到SQL數據庫服務器中去訪問數據庫,這是一個標准的客戶/服務器應用。
有關開發客戶/服務器應用程序的詳細內容,參看“客戶/服務器應用”一章。
13.4.2 數據庫應用程序的開發步驟
數據庫應用程序的最終目標就是為用戶提供一個滿足其長期需要的軟件產品,因此,成功地開發一個數據庫應用程序的關鍵之一是要詳細地定義用戶的需求,然後再圍繞用戶的需求進行開發,數據庫應用程序的一般開發的三個基本步驟如下。
● 系統設計
● 系統實現
● 系統運行和維護
在這個三個基本步驟中,都包含著數據庫的開發和應用程序界面的開發兩大類任務,對於一個客戶/服務器模式的應用,數據庫和應用界面的區別就更明顯一些,因為它們運行在不同的平台之上,而且使用的操作系統都常常不一樣,如(一個Unix環境的服務器和Windows環境的客戶機)。
1、系統設計
系統設計階段應當根據用戶的需求,明確地描述數據庫(數據庫服務器端)和應用界面(客戶機端)實現的功能,即決定哪些功能由服務器端實現,哪些功能由客戶機端實現,對於客戶/服務器應用程序,許多功能既可以在服務器端實現又可以在客戶端實現的,例如一個復雜的數學變換功能既可以由客戶端的應用程序實現,也可以由服務器端的存貯過程實現。服務器和客戶端應用程序功能的劃分往往取決於應用程序運行的硬件環境,例如:如果客戶端是低檔的PC機,服務器端是高檔的工作站,那麼大量的計算由服務器完成是比較理想的。
2、系統實現
系統實現階段的主要任務是使用Delphi提供的工具和部件以及Pascal語言實現系統設計階段的設想,並進行調試。
在系統實現階段,最好使用數據庫的一個備份數據庫,這個備份的數據庫與原數據庫具有相同的結構,但其中的數據庫只是原數據庫中的一部分,至所以不在原數據庫上開發應用程序,是因為考慮到沒有調試好的應用程序可能會破壞數據庫中的數據或者妨礙數據庫的正常操作。
如果應用程序是基於遠程SQL數據庫服務器的,在系統實現階段可以采用兩種方法:
● 在本地InterBase服務器上,使用數據庫的備份數據庫進行開發和調試
● 在遠程服務器上,使用數據庫的備份數據庫進行開發和調試
第一種方法優越性在於,它是獨立於服務器的,而不至於影響服務器的其它的操作,而且不消耗服務器的資源不增加網絡的負擔。它的不利的方面是開發出來的應用程序只能在標准的SQL服務器上使用和調試。第二種方法能夠使程序設計人員直接感受到服務器的特性,但它在調試階段要消耗網絡和服務器的資源,這種方法具有一定的危險性,程序中的錯誤可能會導致服務器的癱瘓。
3、系統運行和維護
一個應用系統性能的優劣,效率的高低始終應當由用戶來做出判決,應用程序在運行過程中,用戶會提出一些新的需求和建議,根據用戶需求的變化,應當對應用程序做一定的修改,使其進一步地得到完善和提高。
13.4.3 交付數據庫應用程序
交付數據庫應用程序意味著將它交付給最終用戶,並且提供應用程序運行所需的軟件,非數據庫應用程序往往只需要一個EXE文件,而數據庫應用程序要包括下列幾類文件:
● 數據庫應用程序生成的EXE文件和DLL文件(如果有的話)
● 必要的輔助文件(如Readme文件或HLP聯機幫助文件)
● 支持訪問數據庫的BDE,有時也稱為IDAPI
● 用於打印輸出報表的ReportSmith報表工具
● 如果應用中使用了VBX控件,還要包括VBX和BIVBXII.DLL
13.3.4 安裝BDE
在交付數據庫應用程序時,必須同時在運行應用程序的機器上安裝BDE,Delphi 本身包含可再安裝的BDE,在准備數據庫應用程序安裝盤時,同時從Delphi中復制一份BDE 到最終用戶的機器中,BDE中包含訪問多種數據庫系統的驅動程序,為了節省磁盤空間,在安裝BDE時,可以只安裝應用程序必須的驅動程序,例如,如果我們的應用程序只需要訪問dBASE數據庫文件,那麼在安裝BDE時,只需安裝dBASE的驅動程序就行了。要訪問Paradox數據庫,BDE至少需要500KB的磁盤空間。BDE主要包括下列文件,請參看DEPLOY.TXT文件。
表13.5 BDE中主要包括的文件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
文 件 名 說 明
──────────────────────────────────
IDAPI01.DLL BDE應用程序接口動態連接庫
IDBAT01.DLL BDE Batch應用動態連接庫
IDQRY01.DLL BDE查詢動態連接庫
IDASCI01.DLL BDE ASCII碼驅動程序
IDPDX01.DLL BDE Paradox數據庫驅動程序
IDDBAS01.DLL BDE dBASE數據庫驅動程序
IDR10009.DLL BDE 資源庫
ILD01.DLL 語言驅動程序
IDODBC01.DLL BDE的ODBC驅動程序
ODBC.NEW Microsoft ODBC驅動程序管理器(Version2.0)
ODBCINST.NEW Microsoft ODBC驅動程序安裝程序(Version2.0)
TUTILITY.DLL BDE應用工具庫
BDECFG.EXE BDE配置工具
BDECFG.HLP BDE配置工具幫助文件
IDAPI.CFG BDE(IDAPI)配置文件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
安裝BDE可以采用與安裝Delphi相同的方法,在Windows環境中運行Delphi的安裝程序setup.EXE,此時,Delphi顯示Delphi Installation對話框
為我們只須安裝BDE,所以只要選擇Borland Database Engine檢查框,如果應用程序要處理SQL數據庫服務器上的數據,還必須要選擇SQL Links 檢查框, 以便安裝 SQL Links。單擊Continue按紐,完成BDE的安裝。
如果沒有Delphi安裝盤,我們也可以手工安裝BDE , 從現有機器上的 BDE 目錄(或IDAPI目錄)中拷貝所有的文件到用戶機器上的BDE目錄中,並在用戶的Win.INI 文件的結尾處增加下列語句:
[IDAPI]
DLLPATH=C:/DELPHI/IDAPI
CONFIGFILE01=C:\DELPHI\IDAPI.CFG
然後在Windows的Program Manager中為IDAPICFG.EXE起動圖標。
語言驅動程序的安裝
BDE可以為應用程序提供不同的語言支持,語言驅動程序可以在配置Paradox,dBASE數據庫時裝入,對於服務器上的數據庫可以在IDAPI.CFG 文件中說明相應的語言驅動程序,語言驅動程序在C:\DELPHI\IDAPI\LANGDRV子目錄下(驅動器名與Delphi安裝的磁盤有關),是帶有擴展名為.LD的文件。如果正確安裝了語言驅動程序,在Windows的WIN.INI 文件中包含下列內容(缺省情況下):
[Borland Language Drivers]
LDpath=C:/dELPHI\IDAPI\LANGDRV
13.4.5 安裝SQL Link
安裝SQL鏈接與安裝BDE執行相同的步驟,在圖13.7中只選擇SQL Link檢查框,然後執行安裝,選擇應用程序要訪問的SQL數據庫服務器,當選擇安裝SQL Link時, 安裝程序會自動地安裝BDE。根據用戶選擇的SQL數據庫服務器,安裝程序會自動地提示相關的特定信息,例如Informix數據庫系統的鏈路(SQL Link)需要一個放置消息文件的地方。用戶選擇的每個SQL Link都使用一個或多個附加的動態鏈接庫(DLL文件),這些文件將要拷貝到BDE目錄中,下面是建立SQL Link時常見的SQL數據庫系統所需的DLL文件。
1.ORACLE數據庫
在建立ORACLE的SQL Link時除了需要下列文件外,應用程序還需要ORACLE數據庫管理系統的客戶端的連接產品與網絡協議接口。
表13.6 建立ORACLE數據庫的SQL Link所需的文件
━━━━━━━━━━━━━━━━━━━━━━━━━━━
文件名 描 述
───────────────────────────
SQLD_ORA.DLL Borland SQL Link for ORACLE驅動程序
SQLD_ORA.HLP 聯機幫助文件
SQL_ORA.CNF ORACLE驅動的BDE配置文件
ORA6Win.DLL ORACLE 6.x版客戶端的DLL文件
ORA7Win.DLL ORACLE 7.x版客戶端的DLL文件
SQL13Win.DLL ORACLE 客戶端的DLL文件
SQLWin.DLL ORACLE 客戶端的DLL文件
COREWin.DLL ORACLE 客戶端的DLL文件
ORAWE850.Ld ORACLE 的語言驅動程序
━━━━━━━━━━━━━━━━━━━━━━━━━━━
2. Sybase和MicroSoft SQL Server數據庫
在建立Sybase或MicroSorft SQL Server的SQL Link時除了需要下列文件外,應用程序還需要Sybase數據庫管理系統的客戶端的連接產品與網絡協議接口。
表13.7 建立Sybase數據庫的SQL Link所需的文件
━━━━━━━━━━━━━━━━━━━━━━━━━━━
文件名 描 述
───────────────────────────
SQLD_SS.DLL BDE SQL Link for Sybase的驅動程序
SQLD_SS.HLP 聯機幫助文件
SQL_SS.CNF Sybase驅動程序的BDE配置文件
W3DBLIB.DLL Sybase/MC SQL Server客戶端的DLL文件
DBNMP3.DLL Sybase/MC SQL Server客戶端的DLL文件
SYDC437.LD Sybase語言驅動程序
SYDC850.LD Sybase語言驅動程序
━━━━━━━━━━━━━━━━━━━━━━━━━━━
3. Informix數據庫
在建立Informix的SQL Link時除了需要下列文件外,應用程序還需要Informix數據庫管理系統的客戶端的連接產品與網絡協議接口。
表13.8 建立Informix 數據庫的SQL Link所需的文件
━━━━━━━━━━━━━━━━━━━━━━━━━━━
文件名 描 述
───────────────────────────
SQLD_ss.DLL BDE SQL Link for Informix的驅動程序
SQLD_INF.HLP 聯機幫助文件
SQL_INF.CNF Informix驅動程序的BDE配置文件
LDLLSQLW.DLL Informix客戶端的DLL文件
ISAM.IEM Informix錯誤信息文件
OS.IEM Informix錯誤信息文件
RDS.IEM Informix錯誤信息文件
SECURITY.IEM Informix錯誤信息文件
SQL.IEM Informix錯誤信息文件
━━━━━━━━━━━━━━━━━━━━━━━━━━━
4.InterBase 數據庫
在建立InterBase的SQL Link時除了需要下列文件外,應用程序還需要InterBase數據庫管理系統的客戶端的連接產品與網絡協議接口。
表13.9 建立InterBase數據庫的SQL Link所需的文件
━━━━━━━━━━━━━━━━━━━━━━━━━━━
文件名 描 述
───────────────────────────
SQLD_IB.DLL BDE SQL Link for InterBase的驅動程序
SQLD_IB.HLP 聯機幫助文件
SQL_IB.CNF InterBase驅動程序的BDE配置文件
CONNECT.EXE InterBase連接測試診斷工具
CONNECT.HLP InterBase連接測試診斷工具的幫助文件
GDS.DLL InterBase API DLL
REMOTE.DLL InterBase與網絡的接口的DLL文件
INTERBASE.MSG InterBase錯誤信息文件
━━━━━━━━━━━━━━━━━━━━━━━━━━━