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

SAP Sybase SQL Anywhere 16.0 » 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 -> libdbodbc16_r.so.1

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

 参照