伊藤清徳の垂直落下式ムーンサルトプレス

PerlとかPHPとかMySQLとか...がんばっても8割だ。

なでしこからFilemakerへODBC接続

このところFilemakerのなでしこプラグインが出てから、
楽しくなってしまってなでしこばっか触ってます(^-^;



ということで、なでしことFilemakerの連携を考えてODBC接続してみました。

※このページはなでしこプラグインとFilemakerの連携ではなく、
 本家なでしこアプリケーションとFilemakerの連携を想定していますのでご注意ください。

※ODBC接続は、なでしこプラグインでも使えることを確認しました!!
 これチョ~~~~便利!!!

幸い、なでしこにはADO接続機能が備わっているので、比較的簡単に接続ができます。
以下説明はFilemaker9を想定していますが、8、8.5でもOKだと思
います。(多分)

8、8.5はドライバーのバージョンが異なるので、
なでしこの命令に書き込むドライバーの名前が変わることが分かりました。

8.5では「5.5」の部分を「5.4」とバージョンの番号を書き換えるだけで動作しました。
残念ながら8は持っていないので試してません。


また、以下説明はデフォルトの管理者権限を利用しますので、
ユーザーの設定を細かく行っている場合は、都度設定が必要です。

Filemakerの準備

まずFilemakerデータベースをODBC接続できるようにします。

ODBC接続したいデータベースファイルを開き、
メニュー → ファイル → 共有設定 →ODBC/JDBC
をクリックします。

こんな設定ダイアログが出ます。

「現在開いているファイル」の項目で設定したいファイルが反転されているのをチェックしたら、
「ファイルへのODBC/JDBCアクセス」の項目の
「アクセス権セットによってユーザーを指定」のラジオボタンにチェックを入れます。

ラジオボタンにチェックを入れると自動でこんなダイアログが出ます。
もし、出なかったら、「指定」ボタンを押すと表示されます。
このダイアログの「[完全アクセス]」の左のチェックボックスにチェックを入れ、
「OK」をクリック。

共有設定のダイアログの「OK」も押したら、設定完了です。

ちなみに、FilemakerのODBC接続は、Filemakerが起動している状態で、なおかつ、
ODBCの接続設定をしたファイルを起動しておかなければなりません。
注意してください。
(なんて面倒なんだ!!!)


ODBCドライバのインストール

FilemakerのODBCクライアントのインストールについては、
FilemakerのインストールCDに詳細な説明がありますので、そちらをご覧下さい。
一般的なWindows環境で管理者権限ユーザーを使っているならば、
ドライバ用のインストーラーを走らせるだけでOKなはずです。


なでしこでプログラミング

多くのFilemakerへのODBC接続の説明書は、
windowsのODBC管理ツールを使ってDSNの設定を行うのがよいと書いてありますが、
せっかくプログラミングして、単体アプリケーションとして動かすのだから、
わざわざDSNを設定するのは個人的にどうかなぁって思いますので、
WindowsのODBC管理ツールを使わないプログラミング方法です。


connectstrは『DRIVER=DataDirect 32-BIT SequeLink 5.5;
Host=127.0.0.1;
Port=2399;
ServerDataSource=データソース名;
UID=ユーザー名;
PWD=パスワード;』。

connectstrでADO開く。
sqlは、「INSERT INTO "テーブル名" ( "コラム1" , "コラム2" ) VALUES ( '値1' , '値2' )」
sqlで、SQL実行。
DB閉じる。

1~7行目で、ODBCを介したFilemakerへの接続について定義します。

・1行目
DRIVER=DataDirect 32-BIT SequeLink 5.5
はODBCドライバの名前を定義します。
Filemaker9を利用している場合は、上記の通り「DataDirect 32-BIT SequeLink 5.5」ですが、
Filemaker8.5を利用している場合は、「DataDirect 32-BIT SequeLink 5.4」とする必要があります。
インストールしたODBCドライバのバージョンによって最後の数字が変わりますから、
注意してください。

・2行目
Filemakerが実行されているコンピュータのホストを設定します。
通常であれば「127.0.0.1」か「localhost」で大丈夫なはずです。

・3行目
ポート番号を指定します。
「2399」固定です。

・4行目
「ServerDataSource=データソース名;」
「データソース名」のところに、ODBC接続設定をしたファイル名から拡張子を取り除いたものを指定します。
たとえば「test.fp7」というファイルに接続したい場合は「test」と指定します。

注意しなければならないのは、日本語や半角スペースの入ったファイル名です。
これらのファイル名は、そのまま入れたのではうまく動かず、
ファイル名から拡張子を取り除いたものをUTF-8でURLエンコードし、
さらにエンコードした文字列のアルファベットはすべて大文字でなければならない。
というとっても厄介な仕様になっています。

たとえば「日本語 ですよ.fp7」というファイルに接続するのであれば、

「%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接続。」命令を出すと、接続します。
実行時ここでエラーがでた場合は、ここまでの設定に誤りがあるか、
ODBCドライバのインストールに失敗している可能性が高いので、
見直してみましょう。

・9・10行目
ここは変数にSQL文を代入し、その変数を使って「SQL実行」命令を使ってSQL文を実行しています。
このあたりは、SQLについて説明した参考書などをご覧下さい。

なお、一般的なSQLから逸脱した構文として、テーブル名・フィールド名が日本語の場合、
それらを「"(ダブルクォート)」でくくってやらなければならないので注意しましょう。
この点はFilemakerの説明書などにも解説がなく悩みました。

SQLを実行して、結果を得たい場合は、
「DB結果全部取得」命令などをつかうことで、
結果を得ることができます。
結果取得の方法はいくつかありますので、
なでしこの公式命令リファレンスをご覧下さい。

・11行目
「DB閉じる」命令で接続を切断します。



ざっとこんな感じです。

FilemakerのGUI機能はかなり!かなり!!かなり!!!軟弱なので、
その辺を補完するアプリケーションの構築

COMポートやUSBからの特定の信号を受け取ったときに、
テーブルへデータをINSERTする

なでしこで作ったアプリケーションが、
特定のウインドウメッセージやCOPYDATAを受信したときに、
テーブルへデータをINSERTする

メールを受信してその内容をテーブルへINSERTする

などなど、結構使えるツールが開発できるはずです。

Filemakerは確かに平易なデータベースアプリケーションですが、
その反面、暴れたくなるほど (^-^; 機能が貧弱なので、
ODBC接続を利用して機能を補完するといろいろウマーなわけです。

ただし!FilemakerはODBCの機能自体もかなり貧弱で、
テーブル設計などの条件によっては、
SELECT文などの実行のパフォーマンスが
データベースアプリケーションとは思えないほど悪いこともあります(T_T)
仕事で使うアプリケーションを作る場合は、
Filemakerデータベースのテーブル構造などを調整しながら使うことを強くオススメします。

ためしてないけど、なでしこプラグインからも接続できるのかな??
できるなら、これはこれでウマーなことが沢山あるんですが。。。

また時間ができたときに試します。

では!

4 Comments

  1. 今更ですが、これ、有益な情報ありがとうございます!!

    FileMakerを手軽に使える命令を、なでしこの方にプラグインとして提供するのも良さそうな気がしてきました。

  2. admin

    2008/10/30 木曜日 at 14:15:44

    >くじらさん
    こんにちはー。ご覧いただいてありがたく思いますo(^-^)o

    そうですねー。
    Filemakerのテーブル操作(レコード追加・検索・更新・レコード削除あたり)を手軽に使えて、なおかつそれを変数に代入できたりすると、広がりがもっとでるのかなとは思っています。

  3. こちらもプラグインでADO接続できるのを確認しました。さらに、インスタントWebからも接続可能なこと確認できましたので、さらに、チョ~~~~ウマ!!!。
    ただ、ADO接続もODBC共有なので、セッション絡みの固有データ(グローバルフィールド、変数など)などの挿入には使えませんので、注意が必要です。
    試しに、グローバルフィールドへ値をINSERTしても、プラグインの発信元=FMホストにそのグローバルフィールド値は代入できません。値はODBCクライアント固有のセッション変数となる為、それをFMホスト側からは取得できない仕様の為です。
    なので、FMでもFMAPPでもFMIWPでも自己のグロバル値をODBCで書換する時などは出来ませんので注意です。

  4. admin

    2008/12/9 火曜日 at 12:03:59

    >Hiroさん
    あ、グローバルはだめなんですねー。
    MySQLでDBを学んだ私はグローバルフィールドという存在はどうにもなじまないため、
    めったに使わないので視野にはいっていませんでした。
    非常に有用な情報ありがとうございました。

コメントを残す

Your email address will not be published.

*