2016-11-28 3 views
2

私は、Delphi 7で書かれた3層アプリケーションをWebBrokerベースのSOAPサーバー(スタンドアロンのexe)とHTTPRIOコンポーネントを介して通信するSOAPクライアントプログラムで使用しています。Delphiのレコードセット/データセットを切断しました

これはDataSnapアプリケーションではありません。代わりに、サーバーはSOAP要求に渡されたSQL文字列に対応するADTG形式の切断されたADOレコードセットとしてクライアントにデータを送信します。 (サーバーは最初に圧縮し、Base64に変換してクライアントに簡単に戻すことができます)。

返されたレコードセットを使用して、行とフィールドを繰り返し処理します。 DataSetコンポーネント)は、VBAを使用してMicrosoft Accessで長年にわたりプログラミングしているために快適なことです。 幸いなことに、TADODatasetコンポーネントのRecordsetプロパティに直接割り当てて、QuickReportにバインドすることもできます。

クライアントプログラムをFireMonkeyにアップグレードして、WindowsとOSXの両方でコンパイルできるようにし、少なくともMac環境ではADOレコードセットを使用できなくなるとします。

「手で」I a)は切断を と送信することができる最高のデータ形式であるものFireMonkeyのへの変換のための準備において

、 b)は荷重データセットコンポーネントに私はそれについてのレポートをベースできるように、そして c)可能であれば、コード内のデータを最初にコンポーネントにロードする必要はありませんか?

この最後の項目は、コンポーネントを使用せずにデータを処理するのに慣れているだけでなく、ユーザーインターフェイスをロックせずにバックグラウンドでデータを取得するために頻繁にデータを要求するためです。私が理解しているように、コンポーネントとスレッドは一緒には行きません。

今後の最善の方法についてのアドバイスはありますか?

+0

コンポーネントとスレッドに問題はありません。スレッドから* visual *コンポーネントにアクセスする際に問題がありますが、データセットコンポーネントは視覚的ではありません。あなたの質問は私にとってはかなり広範で多少曖昧ですが、TClientDataSetを探しているようです。 –

+0

@KenWhiteあなたはうまくいった[ここ](http://chat.stackoverflow.com/rooms/129020/rad-studio-for-android) – Sami

+0

はい。ありがとうKen。 TClientDataSetは確かに最善の方法と思われます。 –

答えて

1

の表現では、という値を送信します。実際のXMLまたはJSONの代わりに、いくつかのバイナリベース64エンコードされたコンテンツ。また、SOAPよりも両面で実装する方がはるかに簡単なRESTアプローチに切り替えることができます。

オブジェクトのJSON配列または値のJSON配列(ワイヤを介してオブジェクトのフィールド名として列名を送信したくない場合)からTDataSetを入力できます。

JSON/RESTの利点は、コンテンツをHTML5のJavaScriptクライアント(モバイルまたはWeb)、またはサードパーティのアプリケーションまたはサービスに公開するために、まったく同じサーバーロジックを再利用できることです。

+0

JSONの使い方は、私が最終的に決めたことです。データは配列の配列(行)として送信されます(列/値)。 TDataSet(つまりレポート用)を使用する必要がある時代には、データセットの行を「手作業で」配置するだけです。一度に一列に並んでいて、大きな問題ではありません。 –

関連する問題