4D v13.4ARRAY TO SELECTION |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v13.4
ARRAY TO SELECTION
|
ARRAY TO SELECTION {( array ; aField {; array2 ; aField2 ; ... ; arrayN ; aFieldN}{; *} )} | ||||||||
引数 | 型 | 説明 | ||||||
array | 配列 |
![]() |
コピー元の配列 | |||||
aField | フィールド |
![]() |
配列データを受け取るフィールド | |||||
* | 演算子 |
![]() |
実行をスタックする | |||||
ARRAY TO SELECTIONコマンドは、1つ以上の配列をレコードのセレクションにコピーします。すべてのフィールドは同一テーブルのものでなければなりません。
コマンド呼び出し時にセレクションが存在する場合、配列の並び順とレコードの並び順に基づき、配列要素はレコードに書き込まれます。要素数がレコード数よりも多い場合、新しいレコードを作成します。レコードは、既存でも新規でも、自動的に保存されます。
すべての配列は同じ要素数でなければなりません。配列のサイズが異なる場合、シンタックスエラーが生成されます。
このコマンドはSELECTION TO ARRAYコマンドとは逆の動作を行います。しかしARRAY TO SELECTIONコマンドは、たとえ自動リレートが設定されていても、リレートテーブルを含む他のテーブルのフィールドを使用することはできません。
* 引数を渡すと、4Dはその行の実行を遅延し、メモリに格納します。* で終わる行を使用して複数の行をスタックできます。スタックされた行は * なしのARRAY TO SELECTION一回の呼び出しですべて実行されます。この目的のため、このコマンドを引数なしで呼び出すことができます。
これにより、QUERYコマンドのように、複雑な文を複数の行に分割して記述することができ、可読性が向上します。また途中の行の挿入も容易です。
警告: ARRAY TO SELECTIONコマンドは、既存のレコードの情報を上書きします。十分に注意して使用してください。ARRAY TO SELECTIONコマンド実行中、レコードが他のプロセスによりロックされていると、そのレコードは更新されません。ロックされたレコードは"LockedSet"というプロセスセットに入れられます。ARRAY TO SELECTIONコマンド実行後に"LockedSet"セットをテストして、ロックされていたレコードの存在を知ることができます。
4D Server: このコマンドは4D Server用に最適化されています。配列はクライアントマシンからサーバへ渡され、レコードの修正や追加はサーバ上で実行されます。この処理は同期的に 行われるため、クライアントマシンは処理が正常に終了するまで待機しなくてはなりません。マルチユーザ・マルチプロセス環境では、ロックされたレコードは 上書きされません。
以下の例は、asLastNamesとasCompaniesの2つの配列のデータを[People]テーブルにコピーします。配列asLastNamesのデータは[People]Last Nameフィールドに、配列asCompaniesのデータは[People]Companyフィールドに、それぞれ書き込まれます:
ARRAY TO SELECTION(asLastNames;[People]Last Name;asCompanies;[People]Company)
この例題ではレコードセレクションを複製します:
ARRAY TEXT(a1;0)
ARRAY TEXT(a2;0)
ARRAY TEXT(a3;0)
ARRAY TEXT(a4;0)
ALL RECORDS([Table_1])
For($i;1;Get last field number(1))
$p:=Get pointer("a"+String($i))
SELECTION TO ARRAY(Field(1;$i)->;$p->;*)
// * を使用してコマンドの実行をスタックする
End for
SELECTION TO ARRAY // この呼び出しで実行が行われる
REDUCE SELECTION([Table_1];0)
For($i;1;Get last field number(1))
$p:=Get pointer("a"+String($i))
ARRAY TO SELECTION($p->;Field(1;$i)->;*)
// * を使用してコマンドの実行をスタックする
End for
ARRAY TO SELECTION // この呼び出しで実行が行われる
プロダクト: 4D
テーマ: 配列
番号:
261
変更: 4D v11 SQL
変更: 4D v13