C++Builder 10.1 Berlin ProfessionalではFireDacやDbExpressによるODBC接続が出来ません。(無駄に高額なFireDAC Client/Server Add-On Packを購入する必要がある。)
そこで、dbGo(ADO接続)によってODBC接続してFileMakerに繋げてみました。
環境
Windows 10 pro
C++Builder 10.1 Berlin
FileMakerServer 11
1.ODBCクライアントドライバのインストール
下記URLからダウンロードしてインストール作業を行って下さい。(因みにFileMakerPro同封のドライバだと文字列をうまく処理出来ない可能性があるので、そちらは使わないでください)
FileMaker 11.3.76 xDBC クライアントドライバ
http://filemaker-jp.custhelp.com/app/answers/detail/a_id/9269/~/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2-%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%EF%BC%9Afilemaker-11.3.76-xdbc-%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90
2.DSNに追加
C:\Windows\SysWOW64\odbcad32.exe
を起動して、
ODBCデータソースアドミニストレータ(32bit)上で、「追加」をクリックし、新しく接続を構成します。この時、必ず「テキストフィールドをlong varcharとして記述」にチェックを入れましょう。
3.TADOConnectionをフォームかデータモジュール上に貼り付け
貼り付けた後はADOConnection1をダブルクリックして、データリンクプロパティを設定していきます。
データソース名を使用するに、先程追加したデータソース名を指定します
4.コードを記述
/// Connectionとデータベースを接続
ADOConnection1->Connected = true;
/// クエリオブジェクト作成。
TADOQuery * ADOQuery1 = new TADOQuery(this);
/// コネクションとクエリオブジェクトと関連付け
ADOQuery1->Connection = ADOConnection1;
/// クエリを書く
ADOQuery1->SQL->Text = L"select * from \"テーブル名\"";
/// クエリ実行(なお、値を返さないクエリの場合はExecute()を使う
ADOQuery1->Open();
/// 最初のレコードに移動
ADOQuery1->First();
/// 1個ずつレコードを拾う
for (int i = 0; i < ADOQuery1->RecordCount; i++) {
/// ここでデータを取得可能
/// (CodeSite ExpressはC++Builder Delphiで使用可能なロギングシステムです。)
CodeSite->Send(ADOQuery1->FieldByName(L"カラム名")->AsString);
/// 次のレコードに移動
ADOQuery1->Next();
}
/// クエリオブジェクトの接続解除
ADOQuery1->Close();
ADOQuery1->Active = false;
/// コネクションの接続解除
ADOConnection1->Connected = false;
delete ADOQuery1;
5.コンパイル
正しく動作すると、CodeSiteに取得した値が表示されます。
6.FileMakerと日本語(追記)
DSNの設定上「データベース」の名前(ファイルの名前)が日本語まじりになると「Unable to open file」で接続出来ません。
しかし、接続する方法はあります。
FileMakerへの接続は、データベース名ではなくリレーション名で指定するので、半角英数で作ったファイル内に接続したいファイルのリレーションを作成して、そこに接続するようにすれば接続出来ます。
例:
ADQuery1->SQL->Text = "select * ¥"フィールド名¥" from ¥"テーブル名¥"";
ADQuery1->Open();
追記
手順3でDSNではなく接続文字列を使って接続する場合、下記の仕様で接続可能
DRIVER={FileMaker ODBC};HST=IP;PRT=2399;UID=設定したID;PWD=パスワード;SDSN=データベースファイル名;