伊藤清徳の垂直落下式ムーンサルトプレス伊藤清徳の垂直落下式ムーンサルトプレスPerlとかPHPとかMySQLとか...がんばっても8割だ。楽しくなってしまってなでしこばっか触ってます(^-^;ということで、なでしことFilemakerの連携を考えてODBC接続してみました。本家なでしこアプリケーションとFilemakerの連携を想定していますのでご注意ください。※ODBC接続は、なでしこプラグインでも使えることを確認しました!!これチョ~~~~便利!!!幸い、なでしこにはADO接続機能が備わっているので、比較的簡単に接続ができます。以下説明はFilemaker9を想定していますが、8、8.5でもOKだと思います。(多分)※8、8.5はドライバーのバージョンが異なるので、なでしこの命令に書き込むドライバーの名前が変わることが分かりました。8.5では「5.5」の部分を「5.4」とバージョンの番号を書き換えるだけで動作しました。残念ながら8は持っていないので試してません。以下説明はデフォルトの管理者権限を利用しますので、ユーザーの設定を細かく行っている場合は、都度設定が必要です。■Filemakerの準備まずFilemakerデータベースをODBC接続できるようにします。→ODBC/JDBCをクリックします。こんな設定ダイアログが出ます。「ファイルへのODBC/JDBCアクセス」の項目の「アクセス権セットによってユーザーを指定」のラジオボタンにチェックを入れます。ラジオボタンにチェックを入れると自動でこんなダイアログが出ます。出なかったら、「指定」ボタンを押すと表示されます。共有設定のダイアログの「OK」も押したら、設定完了です。ちなみに、FilemakerのODBC接続は、Filemakerが起動している状態で、なおかつ、ODBCの接続設定をしたファイルを起動しておかなければなりません。(なんて面倒なんだ!!!)■ODBCドライバのインストールFilemakerのODBCクライアントのインストールについては、FilemakerのインストールCDに詳細な説明がありますので、そちらをご覧下さい。一般的なWindows環境で管理者権限ユーザーを使っているならば、ドライバ用のインストーラーを走らせるだけでOKなはずです。■なでしこでプログラミング多くのFilemakerへのODBC接続の説明書は、windowsのODBC管理ツールを使ってDSNの設定を行うのがよいと書いてありますが、せっかくプログラミングして、単体アプリケーションとして動かすのだから、わざわざDSNを設定するのは個人的にどうかなぁって思いますので、WindowsのODBC管理ツールを使わないプログラミング方法です。5.5;Host=127.0.0.1;Port=2399;ServerDataSource=データソース名;UID=ユーザー名;PWD=パスワード;』。connectstrでADO開く。)」sqlで、SQL実行。1~7行目で、ODBCを介したFilemakerへの接続について定義します。5.5はODBCドライバの名前を定義します。5.4」とする必要があります。・2行目Filemakerが実行されているコンピュータのホストを設定します。通常であれば「127.0.0.1」か「localhost」で大丈夫なはずです。・3行目ポート番号を指定します。「2399」固定です。「データソース名」のところに、ODBC接続設定をしたファイル名から拡張子を取り除いたものを指定します。「test.fp7」というファイルに接続したい場合は「test」と指定します。注意しなければならないのは、日本語や半角スペースの入ったファイル名です。これらのファイル名は、そのまま入れたのではうまく動かず、ファイル名から拡張子を取り除いたものをUTF-8でURLエンコードし、さらにエンコードした文字列のアルファベットはすべて大文字でなければならない。いうとっても厄介な仕様になっています。「%E6%97%A5%E6%9C%AC%E8%AA%9E%20%E3%81%A7%E3%81%99%E3%82%88」と指定します。日本語に関して考慮されたシステムではないのかもしれません...orz・5・6行目ファイルに設定したユーザーとパスワードを指定します。このページの通りに設定を行ったのなら、ユーザー名は「admin」パスワードは空欄となります。8行目以降は、データベースへ接続し、データを操作、そしてデータベースへの接続を切断するという手順です。・8行目ここまでで設定した内容で「ADO接続。」命令を出すと、接続します。・9・10行目ここは変数にSQL文を代入し、その変数を使って「SQL実行」命令を使ってSQL文を実行しています。このあたりは、SQLについて説明した参考書などをご覧下さい。一般的なSQLから逸脱した構文として、テーブル名・フィールド名が日本語の場合、それらを「"(ダブルクォート)」でくくってやらなければならないので注意しましょう。この点はFilemakerの説明書などにも解説がなく悩みました。結果を得ることができます。結果取得の方法はいくつかありますので、なでしこの公式命令リファレンスをご覧下さい。「DB閉じる」命令で接続を切断します。特定のウインドウメッセージやCOPYDATAを受信したときに、テーブルへデータをINSERTするメールを受信してその内容をテーブルへINSERTするなどなど、結構使えるツールが開発できるはずです。機能が貧弱なので、ODBC接続を利用して機能を補完するといろいろウマーなわけです。!FilemakerはODBCの機能自体もかなり貧弱で、テーブル設計などの条件によっては、SELECT文などの実行のパフォーマンスがデータベースアプリケーションとは思えないほど悪いこともあります(T_T)仕事で使うアプリケーションを作る場合は、Filemakerデータベースのテーブル構造などを調整しながら使うことを強くオススメします。ためしてないけど、なでしこプラグインからも接続できるのかな??できるなら、これはこれでウマーなことが沢山あるんですが。時間ができたときに試します。12:09:55今更ですが、これ、有益な情報ありがとうございます!!FileMakerを手軽に使える命令を、なでしこの方にプラグインとして提供するのも良さそうな気がしてきました。14:15:44>くじらさんこんにちはー。ご覧いただいてありがたく思いますo(^-^)oそうですねー。レコード削除あたり)を手軽に使えて、なおかつそれを変数に代入できたりすると、広がりがもっとでるのかなとは思っています。14:09:19こちらもプラグインでADO接続できるのを確認しました。インスタントWebからも接続可能なこと確認できましたので、さらに、チョ~~~~ウマ!!!。ADO接続もODBC共有なので、セッション絡みの固有データ(グローバルフィールド、変数など)などの挿入には使えませんので、注意が必要です。試しに、グローバルフィールドへ値をINSERTしても、プラグインの発信元=FMホストにそのグローバルフィールド値は代入できません。値はODBCクライアント固有のセッション変数となる為、それをFMホスト側からは取得できない仕様の為です。FMでもFMAPPでもFMIWPでも自己のグロバル値をODBCで書換する時などは出来ませんので注意です。12:03:59>Hiroさんあ、グローバルはだめなんですねー。MySQLでDBを学んだ私はグローバルフィールドという存在はどうにもなじまないため、めったに使わないので視野にはいっていませんでした。非常に有用な情報ありがとうございました。伊藤清徳の垂直落下式ムーンサルトプレス。