4D v16.3

SET QUERY AND LOCK

ホーム

 
4D v16.3
SET QUERY AND LOCK

SET QUERY AND LOCK 


 

SET QUERY AND LOCK ( lock ) 
引数   説明
lock  ブール in True = クエリで見つけたレコードをロック False = レコードをロックしない

説明   

SET QUERY AND LOCK コマンドを使用して、カレントのトランザクション中でこのコマンドに引き続き呼び出されるすべてのクエリで見つかったレコードを自動的にロックできます。つまりクエリを行ってから結果を処理するまで、他のプロセスはレコードを変更できなくなることを意味します。

デフォルトで、検索されたレコードはロックされません。ロックを有効にするにはlock引数にTrueを渡します。

このコマンドはトランザクションの中で使用しなければなりません。このコマンドがトランザクションの外側で呼び出されると、エラーが生成されます。このコマンドはレコードロックのより良いコントロールを提供します。検索されたレコードはトランザクションが終了 (有効またはキャンセル) するまでロックされたままとなります。トランザクションが終了すると、レコードのロックは解除されます。

カレントトランザクション中のすべてのテーブルのレコードがロックされます。

SET QUERY AND LOCK(True) 文が実行されると、(QUERYのような) クエリコマンドは、すでにロックされたレコードを見つけると、特定の動作を選択します:

  • クエリが停止され、システム変数OKは0に設定されます,
  • カレントセレクションはクリアされます,
  • LockedSetシステムセットにはクエリを停止する原因となったロックされたレコードが格納されます。

したがって、カレントセレクションが空だったりOK変数が0だった場合、LockedSetをテストして失敗の原因を検証する必要があります。

このメカニズムを無効にするには、SET QUERY AND LOCK(False) を実行します。

SET QUERY AND LOCK は、下記のクエリコマンドの動作を変更します:

これに対してSET QUERY AND LOCKは、ALL RECORDSやRELATE MANY等、テーブルのカレントセレクションを変更する他のコマンドには影響を与えません。

例題  

この例題では、CategoryがCに属する顧客は、QUERYDELETE SELECTIONの間で、他のプロセスから変更や削除はできません。:

 START TRANSACTION
 SET QUERY AND LOCK(True)
 QUERY([Customers];[Customers]Categorie=C)
  `At this moment, the records found are automatically locked for all other processes
 DELETE SELECTION([Customers])
 SET QUERY AND LOCK(False)
 VALIDATE TRANSACTION

コマンドがトランザクションのコンテキスト中で呼び出されなかった場合、エラーが生成されます。



参照 

QUERY

 
プロパティ 

プロダクト: 4D
テーマ: クエリ
番号: 661

このコマンドはLockedSetシステムセットを更新しますErrorシステム変数が更新されることがあります。This command can be run in preemptive processes

 
履歴 

初出: 4D v11 SQL

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)