【小技】カレントセレクションを変更せずにクエリを実行する
【小技】カレントセレクションを変更せずにクエリを実行する
4Dにおいてカレントセレクションは重要なコンセプトです。
http://doc.4d.com/4dv15r/Displaying-and-selecting-records.300-2880415.ja.html
データ処理は,おもにカレントセレクションの作成と更新によって行なわれます。
クエリは,カレントセレクションを作り替える行為とも言えますが,時折,カレントセレクションを変更せずに検索だけを実行したい,という場面に直面することがあるかもしれません。
そのような場合,下記いずれかの方法で対応することができます。
1. SET QUERY DESTINATION
http://doc.4d.com/4dv15r/help/command/ja/page396.html
クエリの「場所」を命名セレクション・配列・セット・変数にリダイレクトすることにより,カレントセレクションを保持したまま,検索を実行することができます。
2. SQL (SELECT)
http://doc.4d.com/4dv15r/help/command/ja/page948.html
配列や変数に検索の結果が返されるので,カレントセレクションを保持したまま,検索を実行することができます。
3. CUT NAMED SELECTION
CUT NAMED SELECTION/USE NAMED SELECTIONは,カレントセレクションを一時的に「どけて」「もどす」コマンドです。効率的にカレントセレクションを復元することができます。CREATE SET/USE SETよりもずっと効率的です。
4. Find in field
http://doc.4d.com/4dv15r/help/command/ja/page653.html
v2004までは,Find index keyと呼ばれていたコマンドです。値がすでに登録されているかどうかルックアップすることができます。コマンド名から「index key」が除かれたのは,インデックスの有無に関係なく,クエリが実行できるよう改良されたためです。
これらのコマンドを活用すれば,新規プロセスを起動して別コンテキストでクエリを実行するよう,といった煩雑な処理を避けることができます。
関連して「トランザクションを確定・キャンセルせずにクエリを実行する」というトピックがあります。
トランザクション中は,どんなにレコードを更新しても確定するまでデータベースに反映されません。それで,トランザクション中にレコードを更新するためには,一旦,トランザクションを終了するか,新規プロセスを起動して別コンテキストでレコードを更新する必要がありました。
15R5以降,トランザクションを一時的に「抜けて」レコードを更新するためのコマンドが追加されています。
SUSPEND TRANSACTION
http://doc.4d.com/4dv15r/help/command/ja/page1385.html
http://doc.4d.com/--15-R5/-/-.300-2937409.ja.html
カレントセレクションの保持とは関係ありませんが,「新規プロセスを起動して別コンテキストでクエリを実行する」手間を省くことができるコマンド,という点が共通しています。
http://doc.4d.com/4dv15r/Displaying-and-selecting-records.300-2880415.ja.html
データ処理は,おもにカレントセレクションの作成と更新によって行なわれます。
クエリは,カレントセレクションを作り替える行為とも言えますが,時折,カレントセレクションを変更せずに検索だけを実行したい,という場面に直面することがあるかもしれません。
そのような場合,下記いずれかの方法で対応することができます。
1. SET QUERY DESTINATION
http://doc.4d.com/4dv15r/help/command/ja/page396.html
クエリの「場所」を命名セレクション・配列・セット・変数にリダイレクトすることにより,カレントセレクションを保持したまま,検索を実行することができます。
2. SQL (SELECT)
http://doc.4d.com/4dv15r/help/command/ja/page948.html
配列や変数に検索の結果が返されるので,カレントセレクションを保持したまま,検索を実行することができます。
3. CUT NAMED SELECTION
CUT NAMED SELECTION/USE NAMED SELECTIONは,カレントセレクションを一時的に「どけて」「もどす」コマンドです。効率的にカレントセレクションを復元することができます。CREATE SET/USE SETよりもずっと効率的です。
4. Find in field
http://doc.4d.com/4dv15r/help/command/ja/page653.html
v2004までは,Find index keyと呼ばれていたコマンドです。値がすでに登録されているかどうかルックアップすることができます。コマンド名から「index key」が除かれたのは,インデックスの有無に関係なく,クエリが実行できるよう改良されたためです。
これらのコマンドを活用すれば,新規プロセスを起動して別コンテキストでクエリを実行するよう,といった煩雑な処理を避けることができます。
関連して「トランザクションを確定・キャンセルせずにクエリを実行する」というトピックがあります。
トランザクション中は,どんなにレコードを更新しても確定するまでデータベースに反映されません。それで,トランザクション中にレコードを更新するためには,一旦,トランザクションを終了するか,新規プロセスを起動して別コンテキストでレコードを更新する必要がありました。
15R5以降,トランザクションを一時的に「抜けて」レコードを更新するためのコマンドが追加されています。
SUSPEND TRANSACTION
http://doc.4d.com/4dv15r/help/command/ja/page1385.html
http://doc.4d.com/--15-R5/-/-.300-2937409.ja.html
カレントセレクションの保持とは関係ありませんが,「新規プロセスを起動して別コンテキストでクエリを実行する」手間を省くことができるコマンド,という点が共通しています。
miyako- 投稿数 : 468
登録日 : 2016/07/05
Permissions in this forum:
返信投稿: 不可
|
|