SELECTION RANGE TO ARRAY

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 3.5.3


SELECTION RANGE TO ARRAY (start; end; field | table; array{; field2 | table2; array2; ...; fieldN | tableN; arrayN})

引数説明
start数値データ取得を開始するレコード位置番号
end数値データ取得を終了するレコード位置番号
field | tableフィールドまたはテーブルデータを取得するフィールドまたは
レコード番号を取得するテーブル
array配列フィールド値またはレコード番号を受け取る配列

説明

SELECTION RANGE TO ARRAY コマンドは1つまたは複数の配列を作成し、その配列にカレントセレクションのフィールド値またはレコード番号を代入します。

カレントセレクション全体を対象とするSELECTION TO ARRAYと異なり、SELECTION RANGE TO ARRAYコマンドは、セレクション中、引数startendによって指定されたレコード位置番号の範囲が適用範囲となります。

このコマンドは、startendが、1 <= start <= end <= Records in selection ([...])の式の条件を満たしていることを期待します。

1 <= start = end < Records in selection ([...])を渡すと、start = endで選択されたレコードのフィールドをロード、あるいはレコード番号を取得します。

間違ったレコード位置番号を渡すと、このコマンドは以下を実行します:

end > Records in selection ([...])の場合、startで指定されたレコードから最後のレコードまでの値を返します。

start > endの場合、startで指定されたレコードのみの値を返します。

・両方の引数がセレクションのサイズと一致しない場合、空の配列を返します。

SELECTION TO ARRAYコマンド同様、SELECTION RANGE TO ARRAYコマンドも最初に指定したテーブルのセレクションを用います。

SELECTION TO ARRAYコマンド同様、SELECTION RANGE TO ARRAYコマンドは以下の動作を行います:

・1つまたは複数のフィールドから値をロードします。

・シンタックス...;[テーブル];配列;...を使用して、レコード番号をロードします。

・テーブル間にn対1の自動リレートが設定されている場合や、SET AUTOMATIC RELATIONSを事前に呼び出してn対1のマニュアルリレートを自動に変更した場合は、リレートフィールドの値をロードします。いずれの場合も、複数レベルのn対1リレートを経てテーブルから値がロードされます。

各配列は、そのフィールドタイプに応じてタイプ定義されます。ただし次の2つの例外があります:

・ASCII互換モード (非Unicode) で、テキストフィールドを文字列配列にコピーした場合、その配列は文字列配列のままになります。

時間フィールドが倍長整数配列にコピーされる場合。

レコード番号をロードする場合、配列のタイプは倍長整数となります。

4D Server: SELECTION RANGE TO ARRAYコマンドは4D Server用に最適化されています。各配列はサーバ上で作成され、配列全体がクライアントマシンに送信されます。

警告: SELECTION RANGE TO ARRAYコマンドは、startendで指定した範囲やロードするデータサイズによって非常に大きな配列を作成する場合があります。配列はメモリ上に存在します。そのためコマンドの実行後、結果をテストするのは良いことです。これを行うには、作成された配列のサイズをテストするか、ON ERR CALLプロジェクトメソッドを使用してコマンドの呼び出しをカバーします。

コマンドが正常に実行されると、結果配列のサイズは(end-start)+1になります。ただしend引数がセレクションのレコード数より大きい場合、結果の配列は(Records in selection([...])-start)+1個の要素を含みます。

例題

1. 以下の例は、[Invoices]テーブルのカレントセレクションの先頭から50レコードを選択します。そして、[Invoices]Invoice IDフィールドおよびリレートフィールドの[Customers]Customer IDから値をロードします:

   SELECTION RANGE TO ARRAY(1;50;[Invoices]Invoice ID;alInvoID;[Customers]Customer ID;alCustID)

2. 以下の例は、[Invoices]テーブルのカレントセレクションの最終50レコードを選択します。そして、[Invoices]レコードおよび[Customers]リレートレコードのレコード番号をロードします:

   lSelSize := Records in selection ([Invoices])
   SELECTION RANGE TO ARRAY (lSelSize-49;lSelSize;[Invoices];alInvRecN;[Customers];alCustRecN)

3. 以下の例は、配列に一度に全体をダウンロードできないかもしれない、大きなセレクションのレコードを、1000づつシーケンシャルに処理します:

   lMaxPage := 1000
   lSelSize := Records in selection ([Phone Directory])
   For ($lPage ; 1; 1+((lSelSize-1)\lMaxPage) )
         ` 値やレコード番号をロード
      SELECTION RANGE TO ARRAY (1+(lMaxPage*($lPage-1));lMaxPage*$lPage;...;...;...;...;...;...)
         ` 配列に対し処理を行う
   End for

参照

ON ERR CALL, SELECTION TO ARRAY, SET AUTOMATIC RELATIONS.


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次