Delphi數據庫處理 第一節 BDE、ADO、InterBase和dbExpress
Delphi中處理數據庫主要有兩種方法,也就是BDE、ADO,從Delphi 6.0開始還加入了一種dbExpress方法。另外,Delphi還提供了專門處理Borland 公司自己的數據庫產品InterBase 數據庫的專門的方法。
BDE(Borland Databas Engine),是Delphi中最古老的技術,從delphi 2.0加入BDE 技術以后,一直是Delphi處理數據庫的事實上的標准。BDE 是一個基於驅動程序的體系結構,每一種數據格式或數據源都有一種驅動程序來驅動相近的數據源。BDE 可以很好的支持現在最流行的ODBC API方法,ODBC是一種C/C++ 應用程序編程接口(API ),無論是對任何一種客戶/ 服務器關系型數據庫管理系統(RDBMS ),還是最流行索引順序訪問方法(ISAM)數據庫(Jet、Foxpro),都能很好的訪問。
同時,由於BDE 的驅動程序主要直接來自於第三方開發商,所以,對於像Oracle這些非微軟的數據庫,執行效率上比較高。正是這些特點,使BDE 技術還是得到了很多數據庫開發程序員的歡迎。
ADO 技術是微軟提出來的處理關系型數據庫和非關系型數據庫的新技術,它基於微軟被稱為OLE DB的數據訪問模式,它是專門為了給大范圍商業數據源提供訪問而設計的,包括傳統的關系型數據表、電子郵件系統、圖形格式、Internet資源等。ADO 所需內存更少,更適合大流量和大事務量的網絡計算機系統。
ADO 頂層有三個對象:Connection、Command、Recordset。
Connection用以指定數據源,建立和數據源的連接。
Command 對象用以對數劇源執行指定的命令,可以接受SQL 語句,表和存儲過程的名稱,執行SQL 查詢,更新數據,插入紀錄等。
Recordset 對象表示的是來自表或命令執行結果的記錄全集,操縱來自提供者的幾乎所有數據。
由於ADO 技術的迅速普及,從Delphi 5.0 開始,加入了ADO 技術的模塊,並逐步成為Delphi數據庫設計的主流。但是,和VB的ADODC 相比,它還是有所不同的,在數據綁定上,它更多的吸收了BDE 的特點,以做到和原來的程序兼容,同時,它又可以接受標准ADO 技術的各種屬性和方法,在接受這些屬性和方法時,它是和數據綁定控件脫離的,當然從某種意義上來說,這種方案提高了執行效率,給設計人員以更多的選擇。
dbExpress 是Delphi 6.0加入的最新的數據庫模塊,它不使用緩存,可以快速瀏覽大量的數據,但是,不使用緩存就不能更改,所以它的標准方式是只讀的。它一個重要的特點是交叉平台,可以和Linux 數據庫連接,速度相當快。
下面的討論,將以ADO 技術為主線,最后再說明BDE 和dbExpress的應用方式。
第二節ADO 面板的主要組件
ADO 面板一共有7 個組件:
ADOConnection: 主要用於建立數據庫的連接;
ADOdataSet:ADO 提取和操作數據庫的主要數據集,可以直接連接到數據庫,也可以通過 ADOConnection連接到數據庫。
ADOtable:主要用以操作和提取單個基表的數據,可以直接連接到數據庫,也可以通過 ADOConnection連接到數據庫。
ADOquery:通過SQL 語言提取數據,其連接數據庫的方式和前兩種一樣。
ADOStoredProc:這個組件專門用於運行數據庫中的存儲過程。
ADOCommand:該組件用於運行一些SQL 命令,這個組件可以和支持數據集的組件一起使用,也可以直接從一個基表中提取一個數據集。
RDSConnection:一個進程或一台計算機傳遞到另一個進程或計算機的數據集合。
為了連接數據綁定控件,上述組件往往要和處於Data Access 中的Datasource配合使用。
可以看出,和VB的ADODC 不同的,Delphi中解決同一個問題提供了多種方案,看起來似乎增加了麻煩,但是卻可以給程序員更大的自由空間,便於設計出高效率的數據庫程序來。
下面通過幾個例子來說明ADO 控件的用法。
第三節 ADOtable組件
ADOtable、ADOdataSet、ADOquery和ADOStoredProc都繼承同一個父類TCustomADODataSet,所以,在屬性事件和方法上有很多相似的地方,但它主要是針對數據庫中的表進行操作。
ADO -〉ADOtable
屬性:
Name='控件名'
ConnectionString='連接字符串'
可以通過點擊右邊的按鈕,通過向導建立數據源。有時候需要知道相對路徑,可以用下面的方法找到程序當前的路徑:
tpath:=ExtractFilepath(Application.Exename);
文件名:=Tpath+'..\data\Test.mdb'
表明數據庫在當前程序上一層的Data文件夾下。
TableName='表名'
Active=true
這就激活了數據源,為了和綁定控件聯系,要增加一個DadaSource控件。事實上,所有的綁定控件都是和DadaSource聯系。
Data Access-〉DadaSource
屬性:
Dataset=ADOtable.Name
加入綁定控件:
Data Controls-〉
DBgrid(表格)
屬性
DadaSource='DadaSource.Name'
DBNavigator(導航條)
屬性
DadaSource='DadaSource.Name'
運行一下可以看出關系
下面介紹一下ADOtable的一些重要的方法,這些方法大部分和Table是兼容的。
為了便於敘述,ADOtable控件的Name定為 ADOtable1
1)移動指針
第一個: ADotable1.First;
最后一個: ADotable1.Last;
下一個: ADotable1.Next;
前一個: ADotable1.Prior;
2)從字段中取出數據
通過如下方法可以訪問字段的值
ADOtable1.FieldValues['字段名']
ADOtable1.Field[索引值]
在讀寫字段的時候,又是根據需要可以加上強制類型轉換
例如:
Edit1.text:=ADOtable1.Field[0].AsString;
用下面的方法可以去除字段的性質:
ADOtable1.fielddefs[索引值].name; 字段名
ADOtable1.fielddefs[索引值].Size; 字段大小
ADOtable1.fielddefs[索引值].Datatype; 字段屬性
3)修改數據:
修改數據的時候,需要先建立EDIT方法,然后用Post方法才能真正的寫入。
ADOtable1.edit;
ADOtable1.FieldValues['姓名']:='王秀琴';
ADOtable1.post;
4)增加一條空紀錄: ADOtable1.append;
新增紀錄也可以用如下方法,在新增紀錄的同時輸入數據
ADOtable1.appendRecord(xxx,xxx,xxx,....);
5)刪除當前紀錄:ADOtable1.delete;
如果在ADOtable1的OnBeforeDelete方法中寫下:
if messagedlg('確實要刪除嗎?',mtinformation,[mbyes,mbno],
0)=mrno then abort();
可以實現刪除前的提示。
6)過濾
可以用如下的方法實現數據的過濾
在ADOtable1的OnFilterRecord方法中寫下:
Accept:=(條件);
然后
ADOtable1.filtered:=true; 為實現過濾。
ADOtable1.filtered:=false; 為解除過濾。
7)指針在文件的頭尾
指針在最后一條記錄之后 ADOtable1.Eof
指針在第一條記錄之前 ADOtable1.Bof
如此可以實現對數據庫的遍歷
form1.ADOtable1.first;
while not form1.ADOtable1.eof do
Begin
.......
form1.ADOtable1.next;
End;
8)此外, ADOtable組件還繼承了ADO 中的RecordSet對象幾乎全部屬性和方法,簡述如下:
with adoTable1.Recordset do
begin
//屬性
PageSize 一頁所包含的記錄數
PageCount 數據的頁數
AbsolutePage; 當前記錄所在頁
AbsolutePosition; 當前記錄的序號位置
BOF; 指針在第一個記錄之前
EOF; 指針在最后一個記錄之后
//方法
AddNew fieldList,Values; 創建新記錄,其中fieldList為用數
組表示的字段名集,Values為用數組表
示的數據集。
Cancel; 取消上一步所作的修改
Update Fields,Values; 保存對當前記錄所作的修改
Delete; 刪除當前記錄
Move(n); 移動n 條記錄
MoveFirst; 移動到第一條紀錄
MoveLast; 移動到最后一條紀錄
MoveNext 移動到下一條紀錄
MovePrevious 移動到上一條紀錄
Requery; 通過從新執行對象所基於的查詢,以
更新RecordSet 對象中的數據。
end;
使用Recordset 對象來處理數據集的數據,會發現數據幫定控件的指針一般不會跟着移動,這實際上給設計者提供了另一個在后台快速處理數據的方法。
附錄:關於TActionList控件的使用
在Standard面板,提供了一個TActionList 控件,它集中了大部分按鈕的使用方法,可以簡化按鈕的設計。
方法:
調入TActionList,雙擊,可以看到一個面板,右鍵 -〉New Standard Action 選擇 Datasat下的適當的控制,可以選擇多個。
以后加入的開關,只要在屬性Action 中選擇適當的項目就可以了,不需要專門編程,實例見“ActionList應用”。
第四節 ADOQuery組件
和ADOtable組件一樣,ADOquery繼承了同一個父類TCustomADODataSet,所以,上面說到的ADOtable屬性事件和方法基本上是通用的,但它主要是針對數據庫中的SQL 命令進行操作。
下面主要說一下ADOquery特殊的地方。
1)SQL 屬性
SQL 是TStrings類型的屬性,包含了ADOquery組件要執行的SQL 命令,是ADOquery最為重要的屬性之一。
在應用程序中,需要調用Open方法或者ExecSQL 方法來執行在SQL 中的命令。在設計階段,可以利用屬性編輯起來編寫。
例如:
Width ADOquery do
Begin
//重新寫入時,要關閉原來的查詢
Close;
width SQL do
Begin
//因為Add是在原來的基礎上加入,所以先清除原來的SQL命令
Clear;
Add('selsct 編號,姓名,獎金')
Add('From 獎金表')
End;
//執行SQL 命令
Open;
End;
查詢命令也可以這樣來寫:
s1:='編號';
s2:='姓名';
s3:='金額';
with ADOquery1 do
begin
sql.Clear;
SQL.Add('select ');
SQL.Add(s1+','+s2+','+s3);
SQL.Add(' From 獎金 ');
execsql;
active:=true;
end;
效果是一樣的。
第五節 ADOConnection 和 ADODataSet
雖然ADOTable和ADOQuery組件可以非常簡單的連接數據庫,但是當需要更加精細的控制數據庫的時候,往往需要應用ADO 更多的方法,我們知道,支撐ADO 的主要由Connection,Command,Recordsrt三個對象組成,對應的就有ADOConnection和ADOCommand控件,而Recordsrt對象屬性和方法,封裝在ADODataSet中,同時ADODataSet本身,也具備和ADOtable組件相同的對數據綁定控件控值的屬性和方法。
這就大大提高了對數據庫的控制能力。
在ADO 頂層有三個對象中Connection處在最頂層,用以指定數據源,建立和數據源的連接。所以,ADOConnection必須和其它的數據控件連接才有效,最常用的就是和ADODataSet配合。
下面首先介紹連接方法,然后再討論其它的問題
1)ADOConnection的加入和連接
加入ADOConnection
屬性:ConnectionString='連接字符串'
加入ADODataSat
屬性:Connection='ADOConnection1' ..... (ADOConnection,Name)
CommandType=cmdtable ...使用表連接
CommandText 根據上面的選擇,或選擇表,或出現SQL 編輯框。
Active=True 激活。
加入DataSource
屬性:Dataset=ADODataSat 完成連接,再連接數據綁定控件。
2)ADOConnection的重要屬性和方法
屬性:
a).Attributes
設置連接的數據庫自動處理事務的能力
xCommitRetaining:提交一個事務后自動開始一個新事務
xAbortRetaining :回退一個事務的同時開始一個新事務
b).Connected
標識和數據庫的連接受否處於激活(True)
方法:
c).Open(UserID,PassWord)
打開一個連接(可以提供用戶名和密碼)
d).Cancel
關閉數據庫的連接
e).Close
釋放所有的系統關聯資源
f).Execute 執行一個SQL 命令。
完整的表述是
Execute(SQL命令,該命令設計的記錄數目,Option)
其中,Option的值如下
eoAsyncExecute 異步執行指定的命令
eoAsyncFetch 給定Cache屬性的值后,再異步的取得數據
eoAsyncFetchNonBlocking 非阻塞式線程執行
eoExecuteNoRecords 沒有返回紀錄
g).GetProcedureNames(List:Tstring);
獲取數據庫服務器上的存儲過程名稱,過程名保留在List參數中。
f).GetTableNames(List:Tstring;SystemTables:Boolean=False)
獲取數據庫的數據表,表名存放在List參數中,SystemTables指示是否獲取數據庫系統表的名稱,系統表是關於數據庫類型定義和用戶信息的數據表,是數據庫本身自動產生的。在特殊的設計中,這個表格可能會有用。
3)ADODataSet的屬性和方法
我們在ADOTable中討論的屬性和方法,幾乎都可以在ADODataSet中得到應用,但還有幾個特殊的屬性:
CommandType
主要用於控制CommandText屬性的狀態,其中:
cmdtable ...CommandText使用“表名”連接
(內部是做了SQL 對各列的查詢);
cmdTableDirect ...CommandText使用“表名”連接
(內部不做SQL ,而是真正的表名連接);
cmdtext ....使用SQL命令文本;
cmdfile ....CommandType屬性值作為持久的文件名;
cmdStoredProc...CommandType屬性值作為存儲過程名稱
來計算;
cmdUnKnown ....不知道(默認為SQL)
CommandText
根據CommandType的設置,向提供者發出“表名”或SQL 命令。
第六節 TADOCommand對象
在ADO 的層次結構中,Command對象和RecordSet是處在同一層上,它主要用來對數劇源執行指定的命令,比如SQL 語句,表和存儲過程的名稱、更新數據,插入紀錄等。雖然其它的控件也能執行這些方法,但需要遇到需要用Command 本身的屬性和方法來控制數據源的時候,利用這個對象將是十分方便的事情。
主要屬性:
CommandType
CommandText
Cancel
和上面介紹的相同
Assign(Source:Tpersistent)
把另一個ADOCommand 組件的所有屬性復制到當前的ADOCommand組件中,調用的時候按名存取組件對象。
下面的例子可以看到ADOConnection、TADOCommand、ADODataSet、DataSource和其它數據綁定控件是如何作用的。
放入控件
ADOConnection
TADOCommand
ADODataSet
DataSource
Memo
DBgrid
Button
屬性(注意一下TADOCommand1和ADODataSet1的關系是平等的):
ADOConnection1---ConnctionString=連接字符串
TADOCommand1-----Connection=ADOConnection1
commandType=cmdText
ADODataSet1 -----Connection=ADOConnection1
commandType=cmdText
DataSource1 -----DataSet=ADODataSet1
Memo1 -----------List=空
DBgrid1----------DataSource=DataSource1
Button1的Click事件過程
procedure TForm1.Button1Click(Sender: TObject);
var str1,str2:string;
begin
//取出輸入的SQL 語言
str1:=trim(Memo1.text);
//由於執行SQL語言時,除了select ,其它諸如Insert,Delete,Update都需要事先關閉數
//據集,所以下面把前六個字符取出來作為判斷的依據。
str2:=copy(str1,0,6);
ADOCommand1.CommandText:=str1; //ADOCommand1執行命令
//檢查用戶是否送入的是select語句
if str2='select' then
begin
ADODataset1.Recordset:=ADOCommand1.Execute;
ADODataset1.Open;
end
else
begin
//先關閉數據集
ADODataset1.Close;
//這是另一種執行SQL 命令的方法,執行delete等操作
ADOCommand1.Execute;
//按全部字段送入SQL
ADODataset1.CommandText:='select * from 獎金';
ADODataset1.Open; //重新打開
end;
end;
第七節 TADOStoredProc對象
當應用程序必須使用數據庫中的存儲過程的時候,也可以使用ADOStoredProc 控件。
一個存儲過程是一組語句,提前建立好保存在數據庫服務器上,可以反復被執行,在服務器上完成和數據庫有關的任務,並將結果傳給用戶。
許多存儲過程在運行時還需要一系列的參數,可以通過Parameters屬性來設置,這個數據集和其它的ADO 數據集相似,可完成類似的任務。
主要屬性:
Active 設為true時激活數據集;
Connection 如果應用程序添加了ADOConnection,可以在這里連接;
ConnectionString 如果沒有Connection屬性,可以在這里做連接字符串;
DataSource 設置另一個數據源,一般不要設置,事實上如果這樣做Delphi會報錯;
Filter 設置篩選紀錄的條件;
Filtered 決定是否激活Filter中設置的篩選條件;
Parameters 設置存儲過程中使用參數的屬性;
ProcedureName 設置數據集使用存儲過程的名字,可以用下拉菜單選擇。
主要方法
DeleteRecords 刪除一條或多條紀錄
Edit 設置數據集為編輯狀態
EnableCountrols 使數據綁定控件顯示數據
DisableCountrols 使數據綁定控件不顯示數據
First 指針指向第一條紀錄
Last 指針指向最后一條紀錄
Prior 指針指向上一條紀錄
Next 指針指向下一條紀錄
MoveBy(n) 指針指向前或后的第n 條紀錄
GetFieldData 把一個字段的當前值提取到緩存中去
IsEmpty 判斷一個數據集是否為空
Open 打開一個數據集
Refresh 重新從數據庫中提取數據更新數據集
ADOStoredProc的主要的事件與ADOQuery基本相同,可以參考使用。
第八節 主從結構的數據庫應用程序
主從結構的數據庫應用程序,是屬於數據庫的高級應用技術,下面我們通過一個實例來說明建立這種數據庫應用程序的方法。
1)建立主從結構
加入 ADOTabl1:
屬性
Connectionstring=連接字符串
Tablename=表名
Active=true 激活
加入 Datasource1
屬性
DataSet=ADOTable1
連接上主表,做上有關的綁定控件
下面做從表
加入 ADOTabl2:
屬性
Connectionstring=連接字符串
Tablename=表名
Active=true 激活
下面是做主從表的關鍵(在ADOTabl2中)
MasterSource=DataSource1
MasterFields=連接字段
(點..出現對話框,選中兩個表的連接字段,Add 加入,Ok)
這就完成了主從表的連接
加入 Datasource2
屬性
DataSet=ADOTable2
連接綁定控件
觀察主從表的工作情況,這個方法幾乎對所有的Delphi數據庫控件都是適用的。
第九節 BDE 的應用
BDE 是Borland開發的最成熟的數據控制對象集,它對於像Oracle這些第三方數據庫,由於是直接由開發商提供了驅動程序,所以執行效率比較高,到現在仍然受到不少程序員的歡迎。
它里面主要是table和Query兩個數據源控件。從性能和使用方法都和ADOtable和ADOQuery 相似的(Recordset屬性和方法除外,這是ADO 特有的)值得注意的是,它們連接數據源的方式采用了別名,也就是應用的時候事先一定要設計好ODBC數據源,並給定數據源一個別名。
屬性
DatabaseName=別名
在table中,TableName=表名
在Query中,SQL=SQL命令
然后
Active=true
就連接上了。
ODBC數據源的別名,實際上是寫入計算機的注冊表的,所以如果希望通過程序來設置別名,可以通過程序直接改寫注冊表來解決,具體請看實例。
一、Ttable組件
該組件用來表示數據庫的一個基表,它的主要屬性如下:
DatabasName:數據源的名字
TableName: 表的名字
Active: true表示活動
Filter: 數據篩選
Filtered: 控制Filter的使用,False則篩選不起作用。
FilterOptions:其中包括兩個選項
foCaseInsensitive 決定是否嚴格按照Filter條件中大小寫匹配查詢,true為大小寫匹配。
foNoPartialCompare
“*”是否作為數字統配符存在,true 則視為單個字符,false則視為統配符。
IndexFieldNames 設置那些字段進行記錄的排序,逗號間隔,這些字段必須是關鍵字端。
IndexName 設置基表的第二個索引字段,如果這個屬性是空的,則基表按默認索引排序。
MasterSource 在主從表關系中,設置從表關聯的主表對應數據源。
MasterFields
別名和表名調用的實例:
-----------------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables;
type
TForm1 = class(TForm)
Database1: TDatabase;
Session1: TSession;
Table1: TTable;
Button1: TButton;
ComboBox1: TComboBox;
ListBox1: TListBox;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var I: Integer;
DBNames: TStrings;
begin
DBNames := TStringList.Create;
//Session1.GetDatabaseNames(DBNames);
Session1.GetdatabaseNames(DBNames);
for I := 0 to DBNames.Count - 1 do
ComboBox1.Items.Add(DBNames[I]);
Database1.GetTableNames(ListBox1.Items, False);
end;
{ADOConnection1.GetTableNames(ListBox2.Items, False);
Database1.GetTableNames(ListBox1.Items, False);}
procedure TForm1.Button2Click(Sender: TObject);
begin
Database1.Close;
Database1.AliasName:= ComboBox1.Text;
Database1.Open;
ListBox1.Clear;
Database1.GetTableNames(ListBox1.Items, False);
end;
end.
-----------------------------------------------------------------------
第十節 開發InterBase應用程序
InterBase數據庫是Borland公司開發的數據庫產品,在Borland產品得到廣泛的應用。該數據庫是Delphi和Kylix(被稱作Linux下的Delphi)開發的跨平台應用程序可用的數據庫之一(其它還有Qracle、MySQL、DB2)。InterBase 有與Delphi結合緊密的特點,而且,在Delphi安裝盤中。還提供了InterBase 數據服務和客戶端軟件,可以方便的構築InterBase數據庫的開發環境。
InterBase 的組件都放在InterBase面板中,從使用方法上來說,和上面介紹的BDE 或者ADO 相似,可以自己查閱有關資料。
這里就不再討論了。
第十一節 dbExpress數據庫控制
dbExpress 是Delphi 6.0 新加的功能,dbExpress是一個跨平台的、不依賴於數據庫的一個獨立的層。它提供了一些方法用於動態SQL的處理。它定義了一個接口用於訪問不同的SQL 服務器,並為各種數據庫提供了驅動程序。
這些驅動程序在Windows和Linux下都能使用(Windows下為動態連接庫.DLL,而在Linux下為共享對象.so文件)。這種API 驅動,減少了數據庫引擎需要的額外開銷。
標准的dbExpress數據庫應用是不使用數據緩存的,由於保持核心運行時數據庫訪問層的簡單和輕便。所以,dbExpress提供了高性能的數據庫連接,運行速度很高。但是,不用數據緩存將無法修改數據,而且,指針的移動也是單向的。為了能夠修改數據,dbExpress也提供了一種使用數據緩存的控件,當然這無疑也會影響到效率。
目前在dbExpress能夠應用的數據庫有Qracle、MySQL、DB2和InterBase,這里以InterBase 數據庫為例。
一、單向的數據連接
實例數據庫為Delphi提供的Employee.gdb。
1)加入 TSQLConnection
屬性:
LoginPrompt=False 不用用戶名和密碼顯示
DirverName=InterBase 驅動程序名
ConnectionName=IBLoca 默認數據庫(Database.gdb)
Params 點對話框出現信息表,修改數據庫的名字Employee.gdb
Connected=true 如果連接正確,將可以順利的為true;
2)加入 TSQLDataset
屬性:
SQLConnection=SQLConnection名字
CommandType=ctTable 用表名連接
CommandText=表名
Active=true 如果正確,將可以為true;
3)加入 TDataSource
屬性:
DataSet=SQLDataSet名字
4)加入數據綁定控件,由於不用緩存,所以不能用DBGrid,這里只用簡單的DBEdit。
注意屬性:
DataSource=DataSource名字
DataField=字段名
5)注意,SQLDataset移動指針只有兩個方法
SQLdataset1.Next;
SQLdataset1.First;
這就可以運行了。
二、可以修改的數據連接
做一個主從結構的數據顯示,要求從表是可以修改的,而且要用DBGrid,所以,這里要用一個新的控件來聯系:
TSQLClientDataSet
和TSQLDataset不同TSQLClientDataSet是使用數據緩沖區的,所以,用它連接數據源可以修改,也可以用DBGrid顯示。
和上面方法相同,加入TSQLConnection作數劇源。
屬性:
LoginPrompt=False 不用用戶名和密碼顯示
DirverName=InterBase 驅動程序名
ConnectionName=IBLoca 默認數據庫(Database.gdb)
Params 點對話框出現信息表,改數據庫名:Employee.gdb
Connected=true 如果連接正確,將可以順利的為true;
1)做主表
加入 TSQLDataset
屬性:
SQLConnection=SQLConnection1
CommandType=ctTable 用表名連接
CommandText=PROJECT (這是在Employee.gdb內的一個表)
Active=true 如果正確,將可以為true;
加入 TDataSource
屬性:
DataSet=SQLDataSet1
加入數據綁定控件兩個DBEdit,顯示字段分別為PROJ_ID和PROJ_NAME。
用同樣的方法作兩個指針移動的Button。
2)做從表
加入TSQLClientDataSet
屬性:
SQLConnection=SQLConnection1
CommandType=ctTable 用表名連接
CommandText=PROJ_DEPT_BUDGET (這是在Employee.gdb內的另一個表)
Active=true (激活)
做主從連接
MasterSource=DataSource1
MasterFierds=PROJ_ID (連接字段)
加入 TDataSource
屬性:
Name=DataSource2
DataSet=SQLClientDataSet1
加入DBGrid,與DataSource2連接。
這就完成了一個主從表制作,試驗一下,可以發現從表是可以修改的。
仔細研究一下這個過程,歸納出設計的一般方法。一般來說,dbExpress主要在網絡中使用,特別是后面將要提到的WebSnap 快速網絡開發方法,將會給dbExpress 以很大的施展空間。