Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー プログラミング » ODBC サポート » ODBC アプリケーションの構築

 

unixODBC ドライバーマネージャー

バージョン 2.2.14 より前の unixODBC では、64 ビット ODBC 仕様の一部が Microsoft の規定とは異なって実装されています。この違いにより、unixODBC ドライバーマネージャーを SQL Anywhere 64 ビット ODBC ドライバーで使用すると問題が生じます。

このような問題を回避するためには、両者の違いについて認識する必要があります。相違点の 1 つとして挙げられるのが、SQLLEN と SQLULEN の定義です。SQLLEN と SQLULEN は、Microsoft 64 ビット ODBC 仕様では 64 ビット型であり、SQL Anywhere 64 ビット ODBC ドライバーでも 64 ビット数として処理されることを想定しています。unixODBC の一部の実装では、これらの 2 つを 32 ビット数として定義しているため、SQL Anywhere 64 ビット ODBC ドライバーとインターフェイスする際に問題が生じます。

64 ビットのプラットフォームで問題を回避するには、次の 3 つの処理が必要になります。

  1. sql.hsqlext.h などの unixODBC ヘッダーをインクルードする代わりに、SQL Anywhere ODBC ヘッダーファイルの unixodbc.h をインクルードします。これにより、SQLLEN および SQLULEN は正しく定義されます。unixODBC 2.2.14 以降のバージョンのヘッダーファイルでは、この問題が修正されています。

  2. すべてのパラメーターで正しい型を使用していることを確認する必要があります。正しいヘッダーファイルや C/C++ コンパイラーの強力な型チェックを使用すると便利です。また、SQL Anywhere ドライバーがポインターを介して間接的に設定したすべての変数についても、正しい型を使用していることを確認する必要があります。

  3. リリース 2.2.14 より前の unixODBC ドライバーマネージャーは使用せずに、SQL Anywhere ODBC ドライバーに直接リンクしてください。たとえば、libodbc 共有オブジェクトを SQL Anywhere ドライバーにリンクします。

    libodbc.so.1 -> libdbodbc12_r.so.1

    プラットフォームによっては、SQL Anywhere ドライバーマネージャーを代わりに使用できます。

 参照