.一般簡單的三層結構設計方式:
Remote Data Module服務器
數據庫
Query組件
DataSetProvider組件
客戶端應用程序
DCOM組件
ClIEntDataSet組件
現在一般介紹三層結構大多數使用上面的數據模型進行講解,通過DataSource組件連接ClIEntDataSet組件,然後通過數據感知控件連接DataSource組件,來進行對數據庫數據的訪問。這樣就使得數據庫服務器、應用服務器和應用程序之間的聯系過於緊密,如果其中一個做了改動,其他的都要跟著改動,對於系統的升級與維護帶來很多不便。
2.新的三層結構設計模式:
Remote Data Module服務器
數據庫
Query組件
DataSetProvider組件
客戶端應用程序
DCOM組件
ClIEntDataSet組件
上面是我們現在采用的三層結構模式,它不通過DataSetProvider組件來傳遞數據,而是通過Remote Data Module服務器所提供的Interface來進行數據的傳遞。這樣就使得應用程序完全與數據庫服務器沒有任何關系,對整個系統的升級與維護都帶來極大的好處。
對於集合數據,由於Interface的返回值可以是OLEVarient類型,因此我們可以創建ClIEntDataSet來進行集合數據的傳遞。
3.部分源程序
//函數1:創建ClIEntDataSet
procedure CreateCds(const Ds: TDataSet; var Cds: TClIEntDataSet);
var
I: Integer;
begin
Cds := TClIEntDataSet.Create(nil);
for I := 0 to Ds.FIEldCount - 1 do
begin
with Cds.FieldDefs.AddFIEldDef do
begin
Name := Ds.FIEldDefs[I].Name;
DataType := Ds.FIEldDefs[I].DataType;
if DataType = ftAutoInc then
DataType := ftInteger;
Size := Ds.FIEldDefs[I].Size;
end;
end;
Cds.CreateDataSet;
end;
//函數2:給ClIEntDataSet負值
procedure TransData(const Ds: TDataSet; var Cds: TClIEntDataSet);
var
I: Integer;
begin
if Ds.RecordCount > 0 then
begin
Ds.First;
while not Ds.Eof do
begin
Cds.Insert;
for I := 0 to Ds.FIEldCount - 1 do
Cds.FielDs[I].Value := Ds.FIElDs[I].Value;
Cds.Post;
Ds.Next;
end;
end;
end;