TcxFilterControlおよびTcxDBFilterControl-ユーザーの手での高度なクエリ

ほとんどすべてのデータベースの作業では、すべてのデータを表示する意味がない場合があり、不可能な場合もあります。 そして、誰もが熱心にデータの初期選択のためにあらゆる種類のフォームを囲み始めます。多くの場合、たとえば今日のデータのみ、「作業中」ステータスのみなどのプリセットがあります。 2ダースのフィールドを持つ請求書などの複雑なドキュメントのリストを表示する場合、条件を設定するウィンドウにはいくつかのタブがあり、すべての問題を解決できるわけではありません。 しかし、よくあることですが、 盗まれたものはすべて私たちの前発明されます;)

画像

図1動作中のTcxFilterControl





記載されている問題は、DevExpressのTcxFilterControlおよびTcxDBFilterControlによって見事に解決されています。 これらの2つのコンポーネントは、適切なSQLを取得する機能を備えた視覚条件ビルダーです。 実際、DevExpressにはDelphiで行うものと同様の.Net製品ラインがありますが、使用する必要はなかったため、残りはVCLブランチについてのみです...

画像

図2デザイナーのTcxFilterControl / TcxDBFilterControl



「検索ウィザード」の独立した実装とは異なり、このソリューションは、少なくとも最初はよりスケーラブルになります。フィルタリングするクエリに新しいフィールドを追加する場合、フォームを完成する必要があり、FilterControlはすぐにフィールドを取得します。 FilterControlで置換のリストを表示する場合にのみ、追加の設定が必要になります。 これらのコントロールの主な違いは、TcxDBFilterControlがTDataSetに接続し、TcxFilterControlがTcxGridDBTableViewに接続することです。 T.O. プロジェクトにcxGridがない場合でもTcxDBFilterControlを使用できます。これは、古いプロジェクトをアップグレードするときに役立ちます。



TcxFilterControlおよびTcxDBFilterControlでは、条件はツリービューで構築されるため、コンポーネントが生成するテキストを非常に簡単に理解できます。 現在のレベルで条件を追加するには、[条件の追加]項目を選択します。

画像

図3 FilterControlへの条件の追加



サブレベルを追加するには、「グループの追加」を選択します。

画像

図4 FilterControlへのグループの追加



「すぐに使用できる」フィールド名の置換が機能すること、条件の置換(通常、日付の等しい/等しくない、より大きい/より小さい、前提条件の膨大な選択があります)、リスト、カレンダー、...

画像

図5フィールドのドロップダウンリスト



画像

図6 Date型のフィールドの条件のドロップダウンリスト



画像

図7参照テーブルの従業員名のドロップダウンリスト



また、グループ内および条件のグループ間で値にさまざまなブール演算を指定することもできます。

画像

図8グループ内の値のブール演算



TcxFilterControl / TcxDBFilterControlの結果、任意のデータソース(DataSet)のFilterプロパティでの使用に適した文字列が生成されます。これがローカルフィルターの取得方法です。 いくつかの注意事項(現在のリクエスト内のフィールド名の一意性)により、この条件をリクエストのWHERE部分に追加できます。 たとえば、図1では、FilterControl.FilterTextにアクセスするときにTcxFilterControlクラスのFilterControlが返されます。



((ORDER_STATE = 1)OR(ORDER_STATE = 2)OR(ORDER_STATE = 3))

AND(EMP = 2304)



これは、ローカルフィルターとデータベースのクエリの両方に適しています。



その結果-強力なツールを使用するプログラマーがしばしば非難されていることを実行した-コンポーネントをフォームに配置しました;)ユーザーにクエリを非常に柔軟に作成する機会を与えました。 2つのマイナス点があります-禁欲的な外観と、準備のできていないユーザーにとっての複雑さです。 プロは、最小限のコストで条件を生成するスケーラブルで柔軟な手段です。



All Articles