4D v12.4SELECTION RANGE TO ARRAY |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v12.4
SELECTION RANGE TO ARRAY
|
SELECTION RANGE TO ARRAY ( start ; end ; field | table ; array {; field | table2 ; array2 ; ... ; field | 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で選択されたレコードのフィールドをロード、あるいはレコード番号を取得します。
間違ったレコード位置番号を渡すと、このコマンドは以下を実行します:
SELECTION TO ARRAYコマンド同様、SELECTION RANGE TO ARRAYコマンドも最初に指定したテーブルのセレクションを用います。
SELECTION TO ARRAYコマンド同様、SELECTION RANGE TO ARRAYコマンドは以下の動作を行います:
各配列は、そのフィールドタイプに応じてタイプ定義されます。ただし次の2つの例外があります:
レコード番号をロードする場合、配列のタイプは倍長整数となります。
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個の要素を含みます。
以下の例は、[Invoices]テーブルのカレントセレクションの先頭から50レコードを選択します。そして、[Invoices]Invoice IDフィールドおよびリレートフィールドの[Customers]Customer IDから値をロードします:
SELECTION RANGE TO ARRAY(1;50;[Invoices]Invoice ID;alInvoID;[Customers]Customer ID;alCustID)
以下の例は、[Invoices]テーブルのカレントセレクションの最終50レコードを選択します。そして、[Invoices]レコードおよび[Customers]リレートレコードのレコード番号をロードします:
lSelSize:=Records in selection([Invoices])
SELECTION RANGE TO ARRAY(lSelSize-49;lSelSize;[Invoices];alInvRecN;[Customers];alCustRecN)
以下の例は、配列に一度に全体をダウンロードできないかもしれない、大きなセレクションのレコードを、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
プロダクト: 4D
テーマ: 配列
番号:
368
初出: < 4D v6
ON ERR CALL
SELECTION TO ARRAY
SET AUTOMATIC RELATIONS