Midnightjapan

Tag: 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)テーブルオカレンス:ファイル管理マスターからすべてのフィールドとレコードを取得する

ExecuteSQL ( "SELECT * FROM \"ファイル管理マスター\"" ; "" ; "" )

2)テーブルオカレンス:ファイル管理マスターから指定のレコード(id=5)を取得する

ExecuteSQL ( "SELECT * FROM \"ファイル管理マスター\" WHERE id=?" ; "" ; "" ; "5" )

3)テーブルオカレンス:ファイルdataをLEFT JOINでファイル管理マスターの所属を取得する

ExecuteSQL ( "SELECT m.所属,d.id,d.ファイル名 FROM \"ファイルdata\" as d LEFT JOIN \"ファイル管理マスター\" as m ON d.id=m.id WHERE id=?" ; "" ; "" ; "5" )

ここからが迷子になるところ。

いろんな結合ができることから、抽出データをソートや結合したいところですが、これらが対応していません。

SELECT * FROM (SELECT * FROM B) のようなFROMに対してのサブクエリーは対応していません!と、思います。何度やってもダメでした。

WHEREやORDER、SELECTにサブクエリは使えましたが・・・残念です。

またやっていていやになってくるのが、正しいと結果がかえり、正しくないと「?」しか返ってきません。

なにがどうわるいのか説明くらいしてくれてもいいような・・・

皆様がどうか迷子になりませんように。

コメントなし :, , , more...



何かお探しですか?

以下にキーワードを入力してサイト内検索が可能です:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!