Midnightjapan

Tag: FileMaker

FileMaker ExecuteSQL デバッグ方法

by jun on 8月.09, 2017, under FileMaker

ファイルメーカーのExecuteSQLは実行に失敗すると「?」しか返ってきません。

そのためデバグしながら、何が問題なのかさっぱりわからず、使うの嫌になってきます。

頭にきてネットを探していると、FileMaker Advanced 限定ですが下記の記事を発見。

カスタム関数をつかってデバッグすれば、エラーをみることができます。

これで実用レベルになるでしょう!すばらしい発見、私にはこんなアイデアでてきません。

とても参考になりました。感謝。

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

http://notonlyfilemaker.com/2015/01/error-messages-in-the-executesql/

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

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...

FileMaker Cloud 東京リージョンリリース

by jun on 7月.11, 2017, under FileMaker

北米ではリリース済みのFileMaker Cloudがついに東京リージョンでリリースされた。
1)Amazonマーケットプレイスにアクセス

https://aws.amazon.com/marketplace/

2)「filemaker cloud」で検索
3)表示された検索結果からユーザー数を選択し、「For Region」のプルダウンから
「Asia Pacific(Tokyo)」を選択したら東京リージョンでインスタンスを作成することができる。
日本のファイルメーカーのオフィシャルページでも公開されました。
https://www.filemaker.com/jp/company/media/press-releases/releases/2016/filemaker-launches-filemaker-cloud-for-secure-reliable-access-to-custom-apps.html

あわせてFileMaker カンファレンス 2017 の案内までメールで送付された。

来る2017年10月23日~25日 3日間にわたり開催される。

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

ファイルメーカーサーバーで遅いと感じる問題の解消方法

by jun on 7月.06, 2014, under FileMaker

ここ最近、いや最近ずっとなのかな・・・ファイルメーカーシステム速度が低下している。これを解消するためには2つの問題を解消する必要がある。

1)ネットワークのトラフィックにインフラがついていけていない可能性の調査

・VPN接続の帯域が一定ではなく速度が場所時間帯によって差があり、場合によってはファイルメーカーのトラフィックすら支えきれない場合がある
・社内のシステムでもネットワークカメラ・Hangout・GoogleApps(Ajax)などの非同期通信ブロードキャストトラフィックが増えてきている。

2)ファイルメーカーの構造的な欠点

・複雑な構造を大量のデータ表示する機能
・多数のリレーションで構築された機能に存在する構造的問題
・膨大なデータを抽出する売上集計機能

インフラは物理的に解消しなければいけない。
体感以外に数字化する必要があるが、時間にばらつきがあるだけである程度分かったところからは交渉でしか解決しない。
いずれも問題を見える化しなければ解決しない。
作り変えるのは簡単だが、時間もコストもかかる。
現状を生かして改変することができれば最善だが、変化がなければ自己満足でしかない。

ファイルメーカーの機能単位のトラフィックを解析する必要がある。
ネットワーク監視用のプロツールを使って、多少時間をかけて調査することとする。

まずはネットワークキャプチャーで機能が表示されるときになにが要求されているのかわかれば、トラフィック量もかなり把握しやすくなる。

そこで以下のネットワークキャプチャーを使うことにしてみました。
調査結果はまた今度。

■ Wireshark

http://sourceforge.jp/projects/wireshark/

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

ファイルメーカー 複数選択値のバブルソート実装

by jun on 6月.25, 2014, under FileMaker

久々に技術ネタ

ファイルメーカーではチェックボックスを実装すると、複数選択できます。
繰り返しフィールドでもないのに、どういう値が入っているのか。

答えは選択された値が改行されて入ってるんですね。そうです。GetValueで取得できます。

じゃあ選択順はどうなるかというと、選択された順に開業されます。

チェックを外すと、切り取られるのでいなくなります。わかるかな?

選んだ値が■ 未選択が□だとすると
フィールド選択値:□01 □02 □03 □04 □05 として
01→02→03→04→05→03→03 と選択していくと

結果
01
02
04
05
03

となってしまう。これをバブルソートで

結果
01
02
03
04
05

となるスクリプトを作成した。
このスクリプトだけではどうにもならないが、このソートをスクリプトの変数に割り当てれば
結果は変数に代入される。

Let([
 // フィールド値をパラメータ引数に設定
  $prm=フィールド値;
 // ソート条件をフラグで分岐:昇順=1,降順=0)
  $sor=1;
 // ソートタイプ指定:テキスト比較=1,数値比較=0)
  $typ=1;
 // サブルーチン関数定義
  $lst=$prm;
  $sub="
   Case(
    $i< =1;$top;
      Let([
       $i=$i-1;
       $itm=GetValue($lst;$i);
       $_top=Case($typ;$top;$top*1);
       $_itm=Case($typ;$itm;$itm*1);
       $flg=Case($sor;$_top<$_itm;$_top>$_itm);
       $rtn=Case($flg;List($rtn;$itm);List($rtn;$top));
       $top=Case($flg;$top;$itm)
      ];
      Evaluate($sub)
     )
    )
   ";
 // バブルソート関数定義
 $n=0;
 $res="";
 $fnc="Case(
  $n=ValueCount($prm);$res;
  Let([
   $n=$n+1;
   $i=ValueCount($lst);
   $top=GetValue($lst;$i);
   $rtn=\"\";
   $res=List($res;Evaluate($sub));
   $lst=$rtn
  ];Evaluate($fnc))
 )"
];
 Evaluate($fnc) // バブルソート計算実行
)

さぁ、たまたまこんなことしたかった方は、サンプルを参考に実装してみましょう。

コメントなし :, , , 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!