delphi操做數據庫快速編程

第一節 BDE、ADO、InterBase和dbExpress程序員

       Delphi中處理數據庫主要有兩種方法,也就是BDE、ADO,從Delphi6.0開始還加入了一種dbExpress方法。 另外,Delphi還提供了專門處理Borland 公司本身的數據庫產品InterBase 數據庫的專門的方法。BDE(Borland Databas Engine), 是Delphi中最古老的技術,從delphi 2.0加入BDE 技術之後,一直是Delphi處理數據庫的事實上的標
準。sql

       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);app

文件名:=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 StandardAction 選擇 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數據源的別名,其實是寫入計算機的註冊表的,因此若是但願經過程序來設置別名,能夠經過程序直接改寫註冊表來解決,具體請看實例。

1、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 數據庫爲例。

1、單向的數據鏈接

實例數據庫爲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;

這就能夠運行了。

2、能夠修改的數據鏈接

作一個主從結構的數據顯示,要求從表是能夠修改的,並且要用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主要在網絡中使用

相關文章
相關標籤/搜索