1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【FileMaker】計算式をゼロや空白で除算するとどんなエラーが返ってくるの?

Posted at

FileMakerと関係ありませんが、我が家は割とデータベースの話に花が咲きます。
まったりとした休日のある日、話の流れは忘れましたがゼロディバイドの話が出、「そういえばFileMakerでゼロとか空白で除算するとエラーって何返ってくるんだっけ?」となり、記事にまとめました。

構文エラーになることはなるよね。
(きっとFileMaker技術者認定の方やFBAの方々には当然の話なんでしょうけど。。。)

ランタイムエラーと構文エラー

初歩的なところで、前提としてまとめておきます。

エラー 大体の説明
ランタイムエラー 式自体は合っているけれど、実際の計算をした時にレコードがなかったりで正常に処理が遂行できない時のエラー
構文エラー そもそも計算できないでしょ?というようなエラー。例えば、カッコがないとか、今回のようなゼロや空白で除算など。

カッコがない時、そもそもスクリプトを書いているときにエラーになるでしょ?というケースもありますが、変数に計算式としてカッコを書いていて、実は閉じカッコが足りなかった、という時に、実行している時に構文エラーが返ります。
この辺のFileMakerガイドを参考にしてください。

ゼロ除算

まずは、ゼロで除算です。
zero divide script

2行目では、いつも通りに計算をし、結果をrec変数に保存します。
3行目で、その時のエラーコードを取得します。
構文エラーを取得するには、EvaluationErrorという論理関数を使用すると取得できるので、4行目で構文エラーを取得します。

結果です。
zero divide dialog
構文エラーが返ってきました。
エラーコード15は、「0 で割ることができません」という内容です。

参照:FileMakerエラーコード (ver.18)

全くもって納得できるエラーコードです。

空白除算

他の言語でいうところの、Null扱いに近いでしょうか?
多言語でも、Nullで除算はエラーが返ってきますので、大体想像はつきます。
スクリーンショット 2019-10-22 16.54.15.png

結果です。
スクリーンショット 2019-10-22 16.54.29.png
同じく、構文エラー15が返ってきました。
エラーメッセージ自体は「0で、、、」ですが、要は除算できないというメッセージです。
カスタマイズしたエラーメッセージを出す場合は、「ゼロもしくは値が設定されていない状態で除算が行われました」という柔らかいメッセージの方が良さそうですよね。

変数にして除算するとどうなる?

上記までは、単純に固定値を指定して除算しましたが、変数に割る値を代入して実行すると、同じ結果が返ってくるのでしょうか?
variable divide

結果は、同じでした。
スクリーンショット 2019-10-22 17.01.15.png
スクリーンショット 2019-10-22 17.01.23.png

計算する時どこまで実装するか

全ての計算式に構文エラーを確認していてはコードが煩雑になり可読性も悪くなりそうです。
除算に限らず、計算式がテキストであるとかゼロが含まれている計算になったらまずい(大抵まずいですが)場合、EvaluateErrorを実装する、という程度でしょうか。
今回は変数で対応しましたが、フィールドのデータで計算式を組み立てる時に、元々の入力制限として下限値を設定しておく、などの対策をしてEvaluateErrorが発生しない(しにくい)構造にするのも手かと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?