ExecuteSQL関数の隠されたエラーメッセージを表示する

FileMakerのExecuteSQL関数では、エラーが発生しても「?(クエスチョンマーク)」が表示されるだけというのがとても不便な点ですが、偶然エラーメッセージを表示することができたという、Digital Fusionのブログ記事を紹介します。
日本語環境で確認したところ、同じようにエラーメッセージを表示させることができました。(ただしメッセージは英語でした。)


Digital Fusion logo

ExecuteSQL関数の隠されたエラーメッセージを表示する
( Unlocking Hidden Error Messages in the ExecuteSQL Function )

Daniel Wood
2015/1/7

説明のためのシンプルなExecuteSQLクエリ

以下の図は、ExecuteSQLを使用したとてもシンプルなクエリです。 このクエリはzdev_SettingsというテーブルオカレンスからフィールドTasman_URL を表示させるためのものです。  このテーブルにはレコードが1件しかないので、クエリにWHERE句は必要としません。

ご覧の通り、データビューアでクエリを評価すると、結果のフィールド値が返されます。これが通常の動作です。

次に、クエリを壊してみましょう。フィールド名をTasman2_URLに変更してみます。

このフィールドは存在しないので、クエリには構文エラーがあることになります。クエリにエラーがあると、FileMakerはクエスチョンマークだけを出力として返します。なんて便利な機能でしょう!(皮肉です) クエスチョンマークが表示されたら何かがおかしいという意味ですが、ほとんどの場合、どこが問題なのかを探るのは非常に困難です。クエリがとても長くて、JOINやWHERE句、ORDER BY句、エイリアスなどを含む場合は特にそうです。

面白いものを発見…

最近社内向けに開発しているソリューションでは、ExecuteSQLを多用しています。データビューアでクエリをテストしているときに、たまたまあるクエリをLetステートメントに入れました。その時に考えたのは、以下のように、もし「?」が返されたら、クエスチョンマークの代わりに結果を空にするということでした。

IF ( Query = "?" ; "" ; Query )

この式をデータビューアに入れて「評価する」をクリックすると、面白い結果が表示されました。

これはいったいどこから出てきたのでしょう!! 計算の評価結果として空が返されると思っていたのですが、その代わりにていねいなエラーメッセージでクエリのどこが問題かを教えてくれました。

データビューアの計算に戻ると、メッセージはまだ表示されていました。しかし「評価する」をクリックすると、メッセージが消えて当初期待していた空の結果が表示されました。

いつメッセージが表示されるか

さらに(というほどでもないですが)テストしてみた結果、データビューアで「監視」ボタンを押した後にのみエラーメッセージの表示を再現することができました。計算に戻るとメッセージは残っていますが、「評価する」をクリックするとメッセージは消えてしまいます。

エラーメッセージは実際には計算結果であるとはいえません。スクリプトや他の計算式でLet句を使ってもメッセージが結果として返されることはありません。メッセージが表示されるのはデータビューアの中のみですが、ある意味相応しい場所ではあります。

実際には単に空を返すようにすればメッセージを表示させることができます。

実際の現場で便利に使えるように、「SQL」という名前のカスタム関数を作りました。この関数は単純にクエリ文を入力として、クエリがクエスチョンマークを表示する場合に空を出力します(そうでなければクエリの結果が出力されます)。

どのようなエラーメッセージを返せるか

ここでも私自身は十分なテストを行っていません(これを読んでいるコミュニティの皆さんに期待します)が、今までにいくつかの種類の返されるメッセージを見つけました。100%自信があるわけではないですが、ネットで探したところ、これらは標準的なSQLのエラーメッセージのようです。以下は今までに発生した3つの例です。

1つ目はテーブルオカレンス名の誤りによるものです。2つ目はクエリの構文エラーで、この例では「FROM」キーワードの綴りが誤っています。
最後の例は、データ型の不一致によるものです。この例では、フィールド「type」はテキストフ​​ィールドですが、それを数値と比較しています。

さらなるテストと発見

ネットで探してみましたが、これまでにコミュニティでこの話題が取り上げられているのを見つけることはできませんでした。もしどなたかがこの不思議な挙動に遭遇したことがあったら、ぜひ詳しく教えてください。またこれらのメッセージをもっと簡単に抽出する方法や、データビューア以外で取得できるのかどうかについても知りたいです。皆さんの結果をぜひ聞かせてください。

サンプルファイル…はありません

申し訳ありませんが、今回の内容は簡単に再現できるということに加え、データビューアを使うにはFileMaker Pro Advancedが必要なため、デモファイルは作成しませんでした。

3 responses... add one

記事の紹介、ありがとうございます。
役に立ちました。ExecuteSQL 利用時にデバッグの強力なツールですね。

とても参考になりました。
ExecuteSQL使うの嫌になるほど「?」って何が?って思っていたところこちらの記事をみつけました。
まさかこんな方法でデバッグできるとは思いもよりませんでした。
感謝。

コメントありがとうございます。お役に立ててうれしいです。

Leave a Reply to Shoichi Miyamura Cancel Reply