この記事を書いている時点での FileMaker バージョンは、19.6.1ですが、以下の記事を書いたときは、日付からしておそらくバージョン13か14の2015年でした。
今回は、この記事のバージョンアップになります。
FileMakerでのレコード削除方法
ヘルプにもあるとおり、全レコードを表示してから対象レコードを削除するオーソドックスなやり方です。
2016年に発売されたバージョン15では、レコードの削除の方法として、新しく「テーブルデータを削除」が追加されました。
最初は何がどう違うのかわからなかったのですが、次のように整理できます。
同じところ
互換性も同じ
FileMaker 製品のサポートは、どちらも同じ互換性になっています。
製品 | サポート |
---|---|
FileMaker Pro | はい |
FileMaker Go | はい |
FileMaker WebDirect | はい |
FileMaker Server | 一部 |
FileMaker Cloud | 一部 |
FileMaker Data API | 一部 |
カスタム Web 公開 | 一部 |
引用: Claris Pro および FileMaker Pro ヘルプ
違うところ
レコードを削除した場合は元に戻すことはできません
「テーブルデータを削除」は、削除したデータは元に戻せません。
これは、バージョン19.6.1で導入されたトランザクション復帰を行なっても、削除したデータは元に戻せません。
(ロールバックされません)
「対象レコード削除」は、トランザクション復帰で戻せます。
トランザクションでの「テーブルデータを削除」でデータが復帰されない例を以下で見てみます。
トランザクションでの「対象レコード削除」でデータが復帰する例を以下で見てみます。
「テーブルデータを削除」の方が処理速度が速い
ということらしいです。
ただし、ヘルプによると「高速に処理できる場合がある」とありますので、絶対的に速いわけではないようです。
処理の違い
ヘルプを参考に、処理の違いを見ていきます。
汎用
◯:される、要
×:されない、不要
対象レコードを削除 | テーブルデータを削除 | |
---|---|---|
関連レコードを含んだ削除 | ◯ 1 | × |
[完全アクセス権]アクセス権セットが必要 | × | ◯ |
グローバルオブジェクトフィールドの内容削除 | × | ◯ |
ODBCデータソースの削除 | ◯ | × 2 |
思った以上に違いがあると思います。
その他、されるされない、要不要についてはClaris ジャパンのyoutubeやClaris Partnerさまのブログでもピックアップされていますので、検索してみてください。
関連レコードを含んだ削除については、思いもよらない関連データを削除してしまう可能性がありますので、「対象レコードを削除」を実装するときは、リレーションシップグラフの確認をしておいた方が無難です。
その他の削除
FileMaker OData のテーブルの削除も全データ削除を実行する方法になります。
こちらも「テーブルデータを削除」と同様、1コマンドでテーブルのデータが跡形もなく(グローバルオブジェクトフィールドの内容も)消し去ってしまいますので、慎重な実装が必要です。
使い分け
「対象レコードを削除」「テーブルデータを削除」を見ていくと、どう使い分けをすればいいのかというところが気になると思います。
開発会社やプロジェクトによってルールはあると思いますが、私は次のように使い分けています。
対象レコードを削除
・一般的に絞り込んでデータを削除したいとき
・完全アクセス権ではなくカスタマイズしたアクセス権セットでの実行を考慮したいとき
・不用意に対象でないデータの削除を防ぎたいとき
テーブルデータを削除
・テンポラリ的な扱いをしているテーブルの初期化(ex.インポートデータをワンクッション置いて処理したデータを目的のテーブルにデータコピーしたい時など)
・完全アクセス権で運用時のメンテナンススクリプトを書いていて明らかにテーブルデータの一括削除をしたいとき
・大量のデータを削除したいとき
などです。
みなさんは、どのように使い分けてますか?
違いを理解して思わぬ落とし穴にハマらないようにしたいですね。(自戒)