データ セットを操作する場合、多くの場合、データをフィルター処理する必要があります。たとえば、Customer という名前のデータ テーブルには、CustNo、CustName、 Country、Address、Phone、State、TaxRate などのフィールドがあります。国のみを表示したい場合は、中国の顧客レコードまたは顧客番号が 1000 を超える顧客レコードの場合は、データ セットをフィルタリングする必要があります。要約すると、次のフィルタリング方法があります。
1. TTable および TQuery の Filter プロパティの使用
1. 設計時に Filter プロパティを設定します。
たとえば、Filter を Country='China' に設定し、Filtered プロパティを True に変更します (フィルタリングは Filtered が True の場合にのみ有効であることに注意してください)。そうすると、対応する国フィールドの内容が「中国」であるレコードのみが表示されます。
フィルター設定時に使用できる演算子は、<、>、<=、>=、=、<>、AND、OR、NOT です。
たとえば、フィルターを CustNo>=1000andCustNo<=5000 に設定すると、顧客番号が 1000 ~ 5000 の顧客レコードのみが表示されます。
2. プログラム実行中の動的フィルタリング
プログラムの実行中に Filter プロパティを変更するには、次の 2 つの状況が含まれます。
(1) 演算子の右側は定数です。例: Table1Filter:='State'+'='+''''HI'''';
注: 文字列定数は 3 組の一重引用符で囲む必要があります。
(2) 演算子の右辺は定数ではなく、変数で指定された値、または入力ボックスで指定された値である可能性があります。このとき、フォーマット機能を使用する必要があります。コード形式は次のとおりです。 Table1Filter:=Format('State'+'='+''%S'''',[StateValue]); ここで、StateValue は値が割り当てられている文字列変数であり、他の形式、例:Edit1Text にすることもできます。
2.ApplyRange を使用してデータセット内のレコードをフィルタリングします。
次のコードを実行すると、顧客番号が 1000 ~ 5000 の顧客レコードのみを表示できます。このルーチンを構成するいくつかのプロセスは次のとおりです。
範囲の適用、範囲の開始の設定、範囲の終了の設定。
表1SetRangeStart;
テーブル 1['CustNo']:=1000;
表1SetRangeEnd;
テーブル 1['CustNo']:=5000;
表1-適用範囲;
注: このプロセスはインデックス付きフィールドでのみ機能します。インデックスが作成されていないフィールドに基づいてフィルタリングしたい場合は、偽のインデックスを作成するというちょっとしたトリックを使用することもできます。実装メソッドは次のとおりです: Table1.IndexFieldNames:=フィールド名; Delphi には、SetRangeStart、SetRangeEnd、ApplyRange を呼び出す簡単なメソッドも用意されています。たとえば、Table1.SetRange([Edit1.Text],[Edit2.Text]);
3. OnFilterRecord イベントを使用してフィルタリングします。OnFilterRecord イベントを使用すると、次のようなキーなしフィールドに基づいてフィルタリング プログラムを作成できます。
PROcedureTForm1.Table1FilterRecord(DataSet:TDataSet;varAccept:Boolean);
始める
受け入れる:=DataSet['State']='CA';
終わり;
4. TQuery コントロールを使用した SQL ステートメント
1.SQL ステートメントには変数とパラメータが含まれていません
お客様から*選択してください
WhereCustNo>=1000andCustNo<=5000
2.SQL ステートメントにはパラメータが含まれます
お客様から*選択してください
WhereCustNo>=:CustNo
パラメータ CustNo には、実行時に値が割り当てられます。
3.SQL ステートメントには変数が含まれています
このとき、TQuery コントロールに SQL ステートメントを追加するコードは次のように記述する必要があります。
クエリ1.閉じる;
Query1.SQL.Clear;
Query1.SQL.Add(Format('Select*fromCustomer'+''+'whereState='+''''%S'''',[StateValue]));
Query1.Open; 上記の 4 つのメソッドの中で、4 番目のメソッドが最も強力で、最も柔軟に使用できます。