4D v16.3SELECTION RANGE TO ARRAY |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
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コマンドは以下の動作を行います:
SELECTION RANGE TO ARRAY を時間型のフィールドに対して適用した場合、配列が他の型として定義されたことがない場合のみ時間型配列が作成されるという点に注意して下さい。例えば、以下のコンテキストでは、 myArray 配列はその後も倍長整数型配列のままです:
ARRAY LONGINT(myArray;0)
SELECTION TO ARRAY([myTable]myTimeField;myArray)
レコード番号をロードする場合、配列のタイプは倍長整数となります。
注: start と end 引数のみを指定してSELECTION RANGE TO ARRAYコマンドを呼び出すことができます。 この特別なシンタックスを使用して、* を指定した一連のSELECTION TO ARRAYコマンドスタックを、限定してセレクションに対し実行することができます (例題4参照)。
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
[Invoices]テーブルのカレントセレクション中1~50番目のレコードのみを配列に取得します:
// 取得するフィールドと配列のペアを指定
SELECTION TO ARRAY([Invoices]InvoiceRef;arrLInvRef;*)
SELECTION TO ARRAY([Invoices]Date;arrDInvDate;*)
SELECTION TO ARRAY([Clients]ClientRef;arrLClientRef;*)
// データの取得を実行
SELECTION RANGE TO ARRAY(1;50)
プロダクト: 4D
テーマ: 配列
番号:
368
初出: < 4D v6
変更: 4D v13
ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)