表示されるレコードの制限
クライアント データセットを使用したデータの取り扱い への移動
存在するデータの一部しかユーザーが使用できないよう一時的に制限するために、アプリケーションで範囲とフィルタを使用することができます。範囲やフィルタを適用すると、クライアント データセットは、インメモリ キャッシュ内のすべてのデータを表示しなくなります。その代わりに、範囲やフィルタの条件を満たしたデータだけを表示します。範囲の使い方の詳細は、「範囲でのレコードの制限」を参照してください。
ほとんどのデータセットでは、フィルタ文字列を解析して SQL コマンドが作成され、それがデータベース サーバーで実装されます。そのため、サーバーの SQL ダイアレクトによって、フィルタ文字列で使用できる操作が制限されます。クライアント データセットでは独自にフィルタをサポートしており、他のデータセットよりも多くの操作を使用できます。たとえば、クライアント データセットを使用している場合には、部分文字列を返す文字列演算子や、日付/時刻値を解析する演算子など、多くのものをフィルタ式で使用することができます。また、クライアント データセットでは、BLOB フィールドや、ADT フィールドおよび配列フィールドなどの複合フィールド型に、フィルタを適用することもできます。
クライアント データセットがフィルタ内で使用できるさまざまな演算子や関数と、フィルタをサポートする他のデータセットとの比較を、以下の表に示します。
クライアント データセットでサポートされているフィルタ:
演算子または関数 | 例 | 他のデータセットでのサポート | コメント |
---|---|---|---|
比較演算子 | |||
= |
State = 'CA' |
○ |
|
<> |
State <> 'CA' |
○ |
|
>= |
DateEntered >= '1/1/1998' |
○ |
|
<= |
Total <= 100,000 |
○ |
|
> |
Percentile > 50 |
○ |
|
< |
Field1 < Field2 |
○ |
|
BLANK |
State <> 'CA' or State = BLANK |
○ |
空レコードは、フィルタに明示的に含めない限り表示されません。 |
IS NULL |
Field1 IS NULL |
× |
|
IS NOT NULL |
Field1 IS NOT NULL |
× |
|
論理演算子 | |||
and |
State = 'CA' and Country = 'US' |
○ |
|
or |
State = 'CA' or State = 'MA' |
○ |
|
not |
not (State = 'CA') |
○ |
|
算術演算子 |
|||
+ |
Total + 5 > 100 |
ドライバに依存 |
数値、文字列、または日付(時刻)+ 数値に適用されます。 |
- |
Field1 - 7 <> 10 |
ドライバに依存 |
数値、日付、または日付(時刻)- 数値に適用されます。 |
|
Discount * 100 > 20 |
ドライバに依存 |
数値にのみ適用されます。 |
/ |
Discount > Total / 5 |
ドライバに依存 |
数値にのみ適用されます。 |
文字列関数 | |||
Upper |
Upper(Field1) = 'ALWAYS' |
× |
|
Lower |
Lower(Field1 + Field2) = 'josp' |
× |
|
Substring |
Substring(DateFld,8) = '1998'Substring(DateFld,1,3) = 'JAN' |
× |
値は、第 2 引数の位置から終わりまで、または第 3 引数の文字数分までになります。最初の文字の位置は 1 です。 |
Trim |
Trim(Field1 + Field2)Trim(Field1, '-') |
× |
先頭と末尾にある第 3 引数で指定された文字を削除します。第 3 引数がなければ、空白を削除します。 |
TrimLeft |
TrimLeft(StringField)TrimLeft(Field1, '$') <> |
× |
Trim の項を参照。 |
TrimRight |
TrimRight(StringField)TrimRight(Field1, '.') <> |
× |
Trim の項を参照。 |
日付/時刻関数 | |||
Year |
Year(DateField) = 2000 |
× |
|
Month |
Month(DateField) <> 12 |
× |
|
Day |
Day(DateField) = 1 |
× |
|
Hour |
Hour(DateField) < 16 |
× |
|
Minute |
Minute(DateField) = 0 |
× |
|
Second |
Second(DateField) = 30 |
× |
|
GetDate |
GetDate - DateField > 7 |
× |
現在の日付と時刻を表します。 |
Date |
DateField = Date(GetDate) |
× |
日付/時刻値の日付部分を返します。 |
Time |
TimeField > Time(GetDate) |
× |
日付/時刻値の時刻部分を返します。 |
その他 |
|||
Like |
Memo LIKE '%filters%' |
× |
ESC 句がないことを除き、SQL-92 と同じように動作します。BLOB フィールドに適用される場合、大文字と小文字を区別するかどうかは FilterOptions で決まります。 |
In |
Day(DateField) in (1,7) |
× |
SQL-92 と同じように動作します。第 2 引数は、どれも同じ型の値のリストです。 |
* |
State = 'M*' |
○ |
部分比較用のワイルドカードです。 |
範囲やフィルタを適用した場合でも、クライアント データセットはメモリ内にすべてのレコードを格納したままです。範囲やフィルタは、クライアント データセットのデータのナビゲーションや表示を行うコントロールがどのレコードを使用できるかを決めるだけです。
メモ: プロバイダからデータを取得するときに、プロバイダにパラメータを渡すことで、クライアント データセットに格納されるデータを制限することもできます。詳細は、「パラメータによるレコードの制限」を参照してください。