4D-JUG
Would you like to react to this message? Create an account in a few clicks or log in to continue.

【小技】カレントセレクションを変更せずにクエリを実行する

Go down

【小技】カレントセレクションを変更せずにクエリを実行する Empty 【小技】カレントセレクションを変更せずにクエリを実行する

投稿 by miyako 2016-12-06, 3:00 pm

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

カレントセレクションの保持とは関係ありませんが,「新規プロセスを起動して別コンテキストでクエリを実行する」手間を省くことができるコマンド,という点が共通しています。

miyako

投稿数 : 483
登録日 : 2016/07/05

トップに戻る Go down

トップに戻る


 
Permissions in this forum:
返信投稿: 不可