1. 程式人生 > >Delphi 使用 Datasnap 的幾種三層應用技術總結

Delphi 使用 Datasnap 的幾種三層應用技術總結

排序 數據 -a rate class author conn fdt express

Delphi 使用 Datasnap 進行三層應用開發,積累了幾種技術,總結如下:

1、(推薦!在 Datasnap 服務端 使用 TDatasetProvider,客戶端 使用 TDSProviderConnection

1)采用 Datasnap Server ,可以使用TCP/IP、Http 通信。TDatasetProvider 能夠提供 “元數據與業務數據”。

推薦:采用(FireDac技術) TFDConnection 連接數據庫,通過 TFDQuery/TFDTable 向 TDatasetProvider 提供數據集;(!執持數據庫新版本)

註意:也可以采用(DBX技術)TSQLConnect、TSQLDataSet/TSQLQuery/TSQLTable/TSQLStoredProc,向 TDatasetProvider 提供數據集;

2)客戶端使用(DBExpress技術 DBX) TSQLConnection + TDSProviderConnection ==》TClientDataSet ==》TDataSource

TSQLConnection 設置為 DataSnapCONNECTION,驅動 DataSnap;

TDSProviderConnection 設置:TSQLConnection 的實例(驅動 DataSnap);ServerClassName 設置 DataSnap服務端 提供服務的 “類名稱”;

TClientDataSet 設置:RemoteServer 為 TDSProviderConnection 的實例,ProviderName 是服務端 的相應“類”下的 TDatasetProvider 實例。

提示1:(1 FRM)TClientDataSet 可以 綁定 TStringGrid ,或者 (2 VCL)通過增加 TDataSource 連接 TDBGrid 。

提示2:客戶端 TClientDataSet 的變更,如何返回服務器端,以及客戶端數據集的查詢、排序、過濾等,

建議參考《Delphi2006-DbExpress高效數據庫開發》這本書;《Delphi 10.1 Berlin DataSnap 開發手冊》第一章也有介紹本項技術。

3)好像一個TDatasetProvider,只能提供一個Dataset,如果要建立 主Master/從Detail 數據集,需要采用下列方式:

2、在 Datasnap 服務端 使用 TFDQuery,客戶端 使用 TDSProviderConnection

參考:http://docwiki.embarcadero.com/CodeExamples/Tokyo/en/DataSnap.FireDAC_DBX_Sample (DataSnap 聯合 FireDAC

1)采用 Datasnap Server ,可以使用TCP/IP、Http 通信。

TFDConnection 連接數據庫,通過 TFDQuery (設置 + TFDSchemaAdapter) 提供數據集 , ==》TDataSource (主)

通過 TFDQuery (設置 + TFDSchemaAdapter,設置 MasterSource 、MasterFields 為 “主數據源/ID”) 提供數據集 ,

==》TDataSource (從)

公開服務類(Class)的 發送數據集方法 ,以 TStream 類型的方式 ,借助 TFDSchemaAdapter 發送數據,接收更新、並寫入數據庫。

function TServerMethods.StreamGet: TStream;

begin
Result := TMemoryStream.Create;
try
qCustomers.Close; //主數據集
qCustomers.Open;
qOrders.Close; //從數據集
qOrders.Open;
FDSchemaAdapter.SaveToStream(Result, TFDStorageFormat.sfBinary);
Result.Position := 0;
finally

//
end;
end;

以及 接收方法:

function TServerMethods.StreamPost(AStream: TStream): string;
var
LMemStream: TMemoryStream;
LErrors: Integer;
begin
Result := ‘‘;
// 獲取 數據流 從客戶端 Retreive entire stream from client
LMemStream := CopyStream(AStream); //復制 數據流
LMemStream.Position := 0;
try
FDSchemaAdapter.LoadFromStream(LMemStream, TFDStorageFormat.sfBinary);
LErrors := FDSchemaAdapter.ApplyUpdates
finally
LMemStream.Free;
if LErrors > 0 then
Result := Format(sErrorsOnApplyUpdates , [GenerateErrorMessage]);
end;
end;

2)客戶端

Delphi 使用 Datasnap 的幾種三層應用技術總結