Delphi Advent Calender 2019の22日目の記事です。
TL;DR
DelphiとFileMakerというともにニッチな開発環境で、さらにFireDACでODBC接続させるというニッチな使い方をしたい。
で、実現しようとしたところとにかく情報がなく、手探りと試行錯誤を繰り返したので、とりあえず正常にできた方法を備忘録を兼ねて書きます。
しかし完成してみると、意外に最強のタッグかもという結果が!
環境
OS構成
- FileMakerサーバ: Windows Server 2018
- クライアント: Windows 10 Pro
典型的なサバクラ環境で、LAN接続です。
開発環境
- Delphi 10.3 Enterprise
- FireDAC
- FileMaker Server 18.0.2
- FileMaker ODBC(付属のもの)
インストール
FileMakerをインストールすると、インストールディレクトリにODBCがあるのでインストール。32bit、64bit用がある。
害はないので両方インストールしておくとあとでビット数を変更する場合も楽。
ODBCの設定
ODBCデータソースにてODBCを設定。もちろん使用するビット数のものを設定。
ちなみに、他のDBのODBCはコマンドラインから自動インストールができますが、FileMakerはできません。(コマンドラインからやろうとすると設定ウィンドウが出てしまう)。
多数のクライアントを設定するときに面倒すぎるのでクラリスさんどうにかしてください。
Delphi+FireDACで接続!
いよいよ本題。
- DelphiでFDConnectionをフォームに設置
- FDConnectionをダブルクリックして設定
- ドライバIDを「ODBC」にする
未知のDBですとついついウィザードを使いたくなりますが、FileMakerに対してはトラップです。使うと設定が進まなくなったり、設定できたよう見えてActiveにしようとしても例外発生します。(環境によると思いますが)
設定必須は以下の3点。
パラメータ | 値 |
---|---|
User_Name | FileMakerに書き込み権限のあるアカウント名 |
Password | 上記ユーザのパスワード |
DataSource | FileMakerのファイル名(FMサーバにアップロードしたDB名。日本語可) |
書き込み権限のあるアカウント名を太字にしましたが、ここを読み取りのみのユーザにするとなぜか接続できないことがありました。
僕の環境の問題かもしれませんが、もしかしたらこちらの知らぬところでステータスなどを書き込んでいるのかもしれません。
ConnectedをONにしてTrueになればOK!
SQL
FileMakerはSQLの機能がかなり限定的で、構文の注意事項もいくつかあります。
- カラム名はダブルクオーテーションで囲む
- 日本語カラム名もほぼOKだった(サロゲートペアを含むなど、問題のある漢字の挙動は不明)
- 「テキスト」カラムは、DelphiではTMemo型になる(SQLプレビューでは (Memo) になってしまうのでとてもやりづらい)
TDBGridにテキストカラムを出力したときに(Memo)ばかりになる問題は、フィールドのプロパティでDisplayValueをdvClassからdvFullやdvClipなどに変更すれば見えるようになります。
最強の連携となる立ち位置
Delphi + FileMakerは、例えばMySQL + Delphiのような組み合わせでの開発と、大きく変わります。
ODBCで使えるSQL構文を見てもあきらかですが、FileMakerは基本的にFileMakerだけで完結できる作りになっているので、外部から何かをするというのはかなり限定的な状態です。
他のDBではデータ管理のみをDBが提供し、あとの全てはクライアント側に任せられます。データ入力、修正、管理など、あらゆるものをクライアント側で作り込まなければなりません。
しかし、FileMakerは非常に高度なUIをDB自身が搭載しているので、Delphiでは面倒な”管理画面”を作る必要すらないという点がまず大きな違いです。
管理画面となると、最低でも数画面の設計に、多数のトランザクションが走り、仕様書とくびったけになるのが普通です。それがFileMakerなら、エディットボックスをポトペタして、ダブルクリックでカラム名を指定するだけで完了!
アカウント制御も、トランザクションも、多数のクライアントへの同期も、文字の拡大縮小も、条件付き書式も、マルチデバイス対応も、デフォルトで搭載です。1行も書く必要がない!
ただ、FileMakerは正規表現でテキストを編集をしながら入力するような複雑処理は苦手です。また、複数のウィンドウやものすごく小さなウィンドウなどは作れません。(僕が知らないだけかもしれません)
この部分にDelphiを挟み込むと、さらに柔軟な環境を構築できます。
両者のちょうどよい立ち位置としては、
- FileMakerが管理画面とDB管理
- Delphiがバッチ処理やより複雑なUIの実現
このような役割分担で最強になるのではないでしょうか。
まとめ
FileMakerは名前だけを知っている状態で、いままで「Accessの延長でしょ」という認識でしたが、社内に取り入れ始めてその能力に驚きの連続です。
基本機能はほとんどFileMakerのみで済んでしまうので、Delphiでは凝ったUIのみを作るようにすれば、工数が激減します。
少人数開発で苦しんでいる方々(笑)は、ぜひこのタッグを試してみてほしいところです。