1

ここで少し問題があります。Delphi XE2 DataSnap テクノロジを使用して、アプリケーション サーバーにルックアップ フィールドを作成しました。クライアント側では、そのフィールドは TStringField になります。さて、問題は、クライアント側でルックアップ機能が失われていることです。その上、クライアント側で stringfield を変更することはできません。これは読み取り専用であるためです (読み取り専用プロパティを手動でオフにしても)。

ルックアップをサポートするためだけにすべてのデータをクライアント側にロードしたくないので、クライアント側でテーブルをルックアップしたくありません。

キー フィールドの値は変更できますが、更新を適用してデータをリロードしない限り、stringfield ルックアップ テキストは変更されません。

ユーザーは、テキストの変更を確認したいと考えています。

私は何をすべきか?

4

2 に答える 2

0

GUI機能を確認する必要があるようです。ルックアップフィールドは実際にはクライアント側の機能です。また、ルックアップソースが必要です。したがって、クライアントで使用するには、ルックアップテーブルをロードする必要があります。DataSnapの人たちはここでとても親切で、クライアントに送信するときにTStringFieldに変換します...私は単にそれを無視します。

したがって、ルックアップテーブルが非常に大きい場合は、ルックアップフィールドを使用するのではなく、UIを検索するか、DataSnapサーバーに対してクエリを実行するオートコンプリートコンボボックスを使用する必要があります。コンボボックスの場合は手動でコーディングする必要があるかもしれませんが、わかりません(JVCLにパスのショートカットに使用できるものがあるかどうかを確認してください)。

または、ルックアップテーブルがほとんど更新されない場合は、ルックアップテーブルを積極的にキャッシュし、変更を検出するための更新メカニズムを使用できます。したがって、ルックアップフィールドは作成された方法で使用できます。

于 2012-02-02T19:10:48.380 に答える
0

ずっと前に私はその問題に直面し、ここで分析するのが少し複雑な解決策を見つけましたが、詳細なブログ投稿を書く時間があるまで、いくつかのガイドラインを提供しようとしています。このアイデアは、サーバー側でoptionalparamsとしてプロバイダーによってパッケージ化された情報(フィールドプロパティ、データセット、プロバイダーなどのルックアップフィールドに関する)で構成されています。クライアント側では、派生したTClientDatasetがこれらの情報を解凍して処理し、必要なルックアップデータセットを取得するクライアントデータセットをオンザフライで作成し、それに応じてルックアップフィールドを設定できます。派生クライアントデータセットクラスに埋め込まれた機能があるため、プロセスは透過的です。覚えておくべきことは、プロバイダーのOnGetDatasetPropertiesイベントでその情報を作成し、ルックアップフィールドのすべてのプロバイダーフラグをfalseにすることだけです。

于 2012-02-10T11:48:39.943 に答える