Tag: ExecuteSQL
FileMaker ExecuteSQL デバッグ方法
by jun on 8月.09, 2017, under FileMaker
ファイルメーカーのExecuteSQLは実行に失敗すると「?」しか返ってきません。
そのためデバグしながら、何が問題なのかさっぱりわからず、使うの嫌になってきます。
頭にきてネットを探していると、FileMaker Advanced 限定ですが下記の記事を発見。
カスタム関数をつかってデバッグすれば、エラーをみることができます。
これで実用レベルになるでしょう!すばらしい発見、私にはこんなアイデアでてきません。
とても参考になりました。感謝。
ExecuteSQL関数の隠されたエラーメッセージを表示する
http://notonlyfilemaker.com/2015/01/error-messages-in-the-executesql/
FileMaker ExecuteSQL できることできないこと
by jun on 7月.22, 2017, under FileMaker
ファイルメーカーの開発をしていると、本当に情報が少ないので小さなことでひっかかることが多い。今回はそんな迷える子羊を少しでも減らすために記録として掲載する。
ExecuteSQL その名のとおり、SQLを実行してくれる。FM12から実装されている機能。
SQLを実行してくれるは間違えで、SQLでFMを操作できるが正しいかと思う。さらにExecuteSQLはSELECTのみ実行が可能。
なんでこんなものが必要かというと、ファイルメーカーの弱点は良くも悪くもリレーションシップを定義しないと何もできない。
レイアウトの配置ですら、どうリレーションシップで関連しているのかも意識して作成が必要です。
ExecuteSQLはそういったことを意識することなく、画面を切り替える必要もなくデータを取得することができます。
ユーザーレビューでは数百万件の結果を取得するようなSQLクエリには不向きですが、スクリプトでちょっとした値を取得するとかにはとても便利です。
ファイルメーカーでは出来そうで出来ない複雑なグループ化やソートもSQLでは結構複雑なものを簡単に取得することができます。
日本人の場合、日本語のファイル名、テーブル名、フィールド名などが使われているため、ダブルクォート「”」でかこってあげる必要があるが、テキストブロックとしてSQLを記述するため、これをエスケープ「\」(¥じゃなくて、バックスラッシュ)もしてあげないといけないことに注意すれば、あとは素直にSQLとして処理してくれる。
もう一つはテーブルオカレンスにも注意。FROMの対象となるテーブルはテーブル名ではなく、テーブルオカレンスとなることに注意されたし。
ただし、SELECTやWHEREなどはダイレクトにフィールド名だけ指定すればいい。
テーブル名はデータベースの管理画面でテーブルに表示さているもの。
テーブルオカレンスはリレーションシップにマップされた名称です。
以下のデータベースをSQLで呼び出してみたい。
テーブル名:ファイル管理(テーブルオカレンス:ファイル管理マスター)
フィールド:id
フィールド:所属
フィールと:分類
ファイルデータ(テーブルオカレンス:ファイルdata)
フィールド:id
フィールド:ファイル名
フィールド:ファイル属性
ファイル管理マスター::id←リレーション→ファイルdata::id
1)テーブルオカレンス:ファイル管理マスターからすべてのフィールドとレコードを取得する
2)テーブルオカレンス:ファイル管理マスターから指定のレコード(id=5)を取得する
3)テーブルオカレンス:ファイルdataをLEFT JOINでファイル管理マスターの所属を取得する
ここからが迷子になるところ。
いろんな結合ができることから、抽出データをソートや結合したいところですが、これらが対応していません。
SELECT * FROM (SELECT * FROM B) のようなFROMに対してのサブクエリーは対応していません!と、思います。何度やってもダメでした。
WHEREやORDER、SELECTにサブクエリは使えましたが・・・残念です。
またやっていていやになってくるのが、正しいと結果がかえり、正しくないと「?」しか返ってきません。
なにがどうわるいのか説明くらいしてくれてもいいような・・・
皆様がどうか迷子になりませんように。