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コマンドは、セレクション中、引数startとendによって指定されたレコード位置番号の範囲が適用範囲となります。
このコマンドは、startとendが、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コマンドは、startとendで指定した範囲やロードするデータサイズによって非常に大きな配列を作成する場合があります。配列はメモリ上に存在します。そのためコマンドの実行後、結果をテストするのは良いことです。これを行うには、作成された配列のサイズをテストするか、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.