Unified InterbaseをC++Builder XEで試してみた。
かねてから、Pro版で使用可能なFirebird/Interbase用のコンポーネントを探していて、
という記事がポストされていたので、Unified InterbaseをC++Builder XEで試してみた。
インストールは、C++Builder XEではC++Builder 2009用のプロジェクトファイル"UIBBCB12Win32.groupproj"を開いてC++Builder XE用に変換。あるいは、UIBD15Win32.groupprojを開いて、プロジェクトオプションの[C/C++ 出力ファイルの生成]を"すべての C++ Builder ファイル(パッケージ ライブラリを含む)を生成"にすればOK。
ただし、ビルド時にuiblib.pasから生成されるuiblib.hppで以下のエラーが発生してコンパイルエラーになる。
[BCC32 エラー] uiblib.hpp(284): E2019 'TUIBSQLVar:: :: :: ()' は無名の共用体内では宣言できない [BCC32 エラー] uiblib.hpp(298): E2019 'TUIBSQLVar:: :: ()' は無名の共用体内では宣言できない
このエラーを回避するには、パッケージのビルド時に生成される$(BDSCOMMONDIR)\hpp\uiblib.hppを編集して、TUIBSQLVar内部の無名構造体にダミーな適当な構造体名をつけてやればOK。
struct DECLSPEC_DRECORD TUIBSQLVar { public: short SqlType; short SqlScale; short SqlSubType; short SqlLen; char *SqlData; short *SqlInd; #pragma pack(push,1) union { struct __0 // ←ダミーの構造体名を追加 { TUIBParamsFlags Flags; unsigned:8; System::Word ID; short MaxSqlLen; short ParamNameLength; System::StaticArray<char, 125> ParamName; }; struct __1 // ←こっちもダミーを追加 { short SqlNameLength; System::StaticArray<char, 32> SqlName; short RelNameLength; System::StaticArray<char, 32> RelName; short OwnNameLength; System::StaticArray<char, 32> OwnName; short AliasNameLength; System::StaticArray<char, 32> AliasName; }; }; #pragma pack(pop) };
C++Builder用のサンプルコードである、examples\UIB\BCB6\Query\Query.bprをビルドして、Firebird 2.1のサンプルにある"EMPLOYEE.FDB"を読ませてみたところ無事動作。何となく使えそうだけど、TUIBDataSetが読み込み専用っぽいのが残念。この辺がうまくいけばDBコンポーネントと連携させられるんだけどね…。*1