DelphiはDatasnapで3層アプリケーションの開発を使用して、以下のように、我々は、いくつかの技術を蓄積してまとめています:
1、DataSnapサーバーで(推奨!)を使用するTDatasetProvider、クライアントが使用するのTDSProviderConnection
1)Datasnapでサーバ、TCP / IP、HTTP通信を使用することができます。TDatasetProvider 提供することができ 、「メタデータとビジネスデータを。」
推奨:TFDConnectionはTFDQuery / TFDTableに渡すために、データベースに接続(FireDac技術)を使用して TDataSetProviderを データ・セットを提供し;(データベースのDharana新バージョンを!)
注:また、(DBX技術)を使用することができるTSQLConnect、のTSQLDataSet / TSQLQueryを/ TSQLTable / TSQLStoredProc、 TDataSetProviderデータセットを提供します。
2)クライアントの使用は(dbExpressのは、技術のある DBX)+のTDSProviderConnectionのTSQLConnection == "TClientDataSetの=="のTDataSource
TSQLConnectionのは、DataSnapの駆動、DataSnapCONNECTIONを設定します。
提供のTDSProviderConnection:例のTSQLConnection(DataSnapの駆動); ServerClassNameセット「クラス名」サービスを提供するDataSnapサーバー。
TClientDataSetのセット:のRemoteServerのTDSProviderConnectionを例に、ProviderNameは、対応する「クラス」サービス側で TDatasetProviderインスタンス。
ヒント1:(1 FRM)TClientDataSetのTStringGridに結合する、または(2でき VCL)のTDataSourceを増加させることによってのTDBGridに接続されています。
ヒント2:変更クライアントTClientDataSetの、そしてどのように並べ替え、サーバとクライアントのクエリデータセットを返すために、フィルタリング、
提案参照「Delphi2006効率のdbExpressデータベース開発」の本は、「デルファイ10.1ベルリンのDataSnap開発ハンドブック」第一章では、この技術を導入しています。
3)場合T場合DataSetProvider、のみデータセットを提供することができ、確立されるべき データセットからのマスタマスタ/詳細は、以下の方法を必要とします。
TFDQueryは、2つのデータセット、メインマスター、他方の主Masterdataプロパティデータセットを使用して確立しました。
!4)(まあ、参照)のためにサーバーが 唯一のいずれかになります。TFDConnection + + TFDQuery TDataSetProviderクライアントにデータを提供し、
しかしTDatasetProviderプロパティ オプション選択にpoAllowCommandTextはTrueです TFDQueryは、そのSQL値を管理していないことができ、
クライアントから直接SQLを受信し、クライアントは、クエリデータ収集ターミナルを返します。
よるTClientDataSetのクライアント CommandTextプロパティには、SQLサーバーに送信されるのparamsから取得したSQLコマンド、パラメータ、およびパラメータ値を、設定、および戻り値のデータを受け取ります。
これは、サーバーができ 、複数のクライアントにサービスを提供、TDatasetProviderを。もちろん、より適切な、またはデータ収集ワンタイムセッションセッションが終了し、接続が切断さSQLConnです。
リファレンス「の操作テーブルからDataSnapの三つの主要ClientDataSetのマスターを取得するための設定テーブルから」!!!
使用TFDQuery DataSnapサーバー、またはTSQLConnectionのTDSRestConnection、データ交換を使用して、クライアントでは2、 TStreamにします
参考:http://docwiki.embarcadero.com/CodeExamples/Tokyo/en/DataSnap.FireDAC_DBX_Sample (DataSnapの米国FireDAC)
1)Datasnapでサーバ、TCP / IP、HTTP通信を使用することができます。
TFDConnection接続データベース、TFDQuery(+ TFDSchemaAdapterを提供される)によって提供されたデータセット、==「のTDataSource(プライマリ)
TFDQuery(提供+ TFDSchemaAdapter、提供MasterSource、 "プライマリ・データ・ソース/ ID" としてMasterFields)を提供するデータセットによって、
==「のTDataSource(から)
出版サービスクラス(Class)メソッドセット送信データTStreamに型ように、TFDSchemaAdapter送信データによって、更新を受信し、データベースに書き込まれます。
機能TServerMethods.StreamGet:TStreamに。
開始
結果:; = TMemoryStream.Create
トライ
qCustomers.Closeを; //マスターデータが設定され
、qCustomers.Open
qOrders.Closeを、より設定//データ
qOrders.Open;
FDSchemaAdapter .SaveToStream(結果、TFDStorageFormat.sfBinary);
Result.Position: 0 =;
最後に
//
よりも、
以上;
そして、受信方法:
TServerMethods.StreamPost機能(AStream:TStreamにする):文字列;
VAR
LMemStream:TMemoryStream;
LErrors:整数;
始める
の検索結果を:= '';
//クライアント全体からクライアント盗んストリームからのデータストリームを取得
LMemStream:= CopyStream(AStream); / /データを再生するストリーム
LMemStream.Position:= 0;
トライ
FDSchemaAdapter .LoadFromStream(LMemStream、TFDStorageFormat.sfBinary);
LErrors:= FDSchemaAdapter.ApplyUpdates
最後に
LMemStream.Free;
LErrors場合> 0は、次に
結果:=フォーマット(sErrorsOnApplyUpdates、[GenerateErrorMessage])。
終わり;
終わり;
; 2)TDSRestConnection(レストモード)1)のTSQLConnection(DBXモード):2)クライアントは、2つの接続を使用することができ
プロキシクラスのメソッドを呼び出して、(Datasnapでクライアントクラスの生成)の両方(右ドット)サーバーのプロキシクラスによって生成することができ、サーバは、データ・ストリームを取得。
TFDTableAdapter(+同じTFDSchemaAdapterのサービス側に設定DatSTableName TFDQuery名 )== "TMemTable =="のTDataSource(メイン-お客様)
TFDTableAdapter(+同じTFDSchemaAdapter)のサービス側に設定DatSTableName TFDQuery名)== "TMemTable =="からのTDataSource( -オーダー)
データ、参考例を取得する方法!GRIDを結合(...中略)。
LMemStream:= TServerMethodsClient(のServerConnection)サーバーがデータの流れTStreamに取得し、アセンブリコネクタを介してプロキシクラスを.StreamGet。
FDSchemaAdapter .LoadFromStream(LMemStream、TFDStorageFormat.sfBinary)ストリームからのデータセットをロードします。
3、残りのDataSnapアプリケーションサーバ、HTTP通信(!を考慮して)、TFDJsonDataSetsはフォーマットTFDJsonDeltaとデータを交換します
例第9章(9.3)3使用TFDJsonDataSets関数リファレンス"のDelphi 10.1ベルリンのDataSnap開発マニュアル"
4、(デルファイが生成される)、これらに限定されない、RESTfulな休憩クライアント接続サービスを使用して(推奨)注意:TRESTResponseDataSetAdapterアプリケーション。
「デルファイ10.1ベルリンFireDACデータベース開発マニュアル」P109 3-1-2第一章ではTFDMemTable休みを利用してデータを処理し、アプリケーションを記述しています。
使用 TRESTResponseDataSetAdapter TRESTResponseの TFDMemTableへのデータは、メタデータ情報が含まれています。
公式例: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/REST_Client_Library