メインコンテンツまでスキップ
バージョン: 20 R7 BETA

DELETE SELECTION

DELETE SELECTION {( aTable )}

引数説明
aTableTableカレントセレクションを削除するテーブル, または 省略時、デフォルトテーブル

説明

DELETE SELECTIONは、aTableのカレントセレクションのレコードを削除します。カレントセレクションが空の場合、DELETE SELECTIONは何も行いません。レコードが削除された後、カレントセレクションは空になります。トランザクション処理中に削除されたレコードは、トランザクション処理が実行または取り消されるまで、他のユーザや他のプロセスに対してロックされます。

警告: レコードの削除は、恒久的な操作です。削除が実行されると元に戻すことはできません。

テーブルインスペクターの「レコードを完全に削除」オプションの選択を解除すると、DELETE SELECTION使用時のレコード削除処理を高速にすることができます (4Dデザインリファレンスマニュアルのレコードを完全に削除参照)。

例題 1

以下の例は[People]テーブルのすべてのレコードを表示します。ユーザはこの中から削除したいものを選択します。この例には2つのメソッドがあります。第1のメソッドはレコードを表示します。第2は削除ボタンのオブジェクトメソッドです。以下は、第1のメソッドです:

 ALL RECORDS([People]) // 全レコードをセレクションに
 FORM SET OUTPUT([People];"Listing") // レコードを一覧するフォームを設定
 DISPLAY SELECTION([People]) // 全レコードを表示

次に示すのは削除ボタンのオブジェクトメソッドです。このボタンは出力フォームのフッタエリアにあります。このオブジェクトメソッドでは、セレクションを削除するために、ユーザが選択したレコード (UserSet) を使用します。ユーザがレコードを1件も選択しなかった場合、DELETE SELECTIONは何も行わないという点に注目してください。

  // 本当にレコードを削除するか確認する
 CONFIRM("You selected "+String(Records in set("UserSet"))+" people to delete."
 +Char(13)+"Click OK to Delete them.")
 If(OK=1)
    USE SET("UserSet") // ユーザが選択したレコードを使用
    DELETE SELECTION([People]) // レコードセレクションを削除
 End if
 ALL RECORDS([People]) // すべてのレコードを選択

例題 2

DELETE SELECTIONの実行中にロックされたレコードが見つかると、そのレコードは削除されません。ロックされたレコードはすべて"LockedSet"というセットに納められます。DELETE SELECTIONの実行後、"LockedSet"を調べて、ロックされているレコードが存在していたかどうかを知ることができます。次はループを使用してすべてのレコードを削除します:

 Repeat // ロックされたレコードがある限り繰り返す
    DELETE SELECTION([ThisTable])
    $lockedRecords:=Records in set("LockedSet")
    If($lockedRecords#0) // ロックされたレコードがあれば
       USE SET("LockedSet") // ロックされたレコードのみをセレクションにする
    End if
 Until($lockedRecords=0) // ロックされたレコードがなくなるまで

参照

DISPLAY SELECTION
MODIFY SELECTION
TRUNCATE TABLE
セット
レコードのロック