はじめに
Claris FileMaker と SQL Serverをリンクサーバーで繋いでみました。
リンクサーバーで接続する事は成功しましたが、Insert、Updateができず断念しました。しかし、Selectは可能であるため、SQL Serverにデータを流し込みたい場合には非常に有用な手段ではないかと考えています。
※ この連携を行い半年が経ちましたが非常に安定して動作しています。
構成
OS:Windows 11 Pro
SQL Server 2019
Claris FileMaker 2023
ODBCドライバのインストール
FileMaker xDBC クライアントドライバより、ODBCドライバをダウンロードし、インストールを行います。
データソースの新規作成
インストールが完了すると、データソース上にFileMaker ODBCの項目が現れます。
データソースの作成は64bit版となります。
※ 32bit版では出てきません。
FileMaker DNSの構成
名前と説明の入力
名前はリンクサーバー名に利用されます。
説明は不要です。
ホストに接続して使用可能なデータベースの名前を取得する。 にチェックをつけなくても問題ないです。
先程のホストに接続して使用可能なデータベースの名前を取得する。 のチェックを入れると、自動的にデータベース名が表示されます。
テキストフィールドをlong varcharとして記述 に必ずチェックを入れてください。
ここで 「テキストフィールドをlong varchar として記述」 にチェックを入れます。
その後、テスト接続を行い問題なければ画面を閉じます。
リンクサーバーの設定
SQL Serverでリンクサーバーを作成します。
ページの選択の全般より、以下の項目を設定します。
- リンクサーバー:FM_HOGEHOGE
- プロバイダー名:Microsoft OLE DB Provider for ODBC Drivers
- データ ソース:hogehoge
データ ソースの hogehoge は 「FileMaker DNSの構成」 で作成した名称です。
FileMaker側に接続するユーザーIDとパスワードを入力
セキュリティの項目で このセキュリティ コンテキストを使用する に変更し、FileMakerに接続するユーザーIDとパスワードを入力します。
設定が完了し、接続するとリンクサーバーの接続確認で以下のメッセージが表示されます。
FileMakerからデータを取得する
接続方法
FileMakserと接続するにはOPENQUERY (Transact-SQL)を利用します。
今回の例だと、以下のSQL文で取得することができます。
SELECT * FROM OPENQUERY (FM_HOGEHOGE, 'SELECT * FROM "ほげほげ"');
FileMakerのSQL文に合わせる
FileMakerのSQL文は列名等をダブルクォーテーションで囲む必要があります。この辺りの仕様は公開されているのでドキュメントを確認してください。
SELECT ステートメント
参考
FileMakerから取得したクエリデータはTEXT型として扱われるため、NVARCHAR型などSQL Server側で明示的に扱いやすいデータ型に変換して利用したほうが扱いやすいです。
参考委程度ですが、データ取得時のサンプルSQLを記載します。
SELECT
REPLACE(REPLACE(TRIM(UserName),' ',''),' ','') AS UserName
,REPLACE(REPLACE(TRIM(UserAddr),' ',''),' ','') AS UserAddr
,REPLACE(REPLACE(TRIM(UserTel),' ',''),' ','') AS UserTel
FROM
(
SELECT
CONVERT(NVARCHAR,ISNULL(氏名,'')) AS UserName
,CONVERT(NVARCHAR,ISNULL(住所,'')) AS UserAddr
,CONVERT(NVARCHAR,ISNULL(電話,'')) AS UserTel
FROM OPENQUERY (FM_HOGEHOGE, 'SELECT * FROM "ほげほげ"')
) AS A
FileMaker DNSの構成時に テキストフィールドをlong varcharとして記述 にチェックを入れましたが、実際にはNVARCHAR型ではなくTEXT型として解釈されるようです。