バージョン 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 つの処理が必要になります。
sql.h や sqlext.h などの unixODBC ヘッダーをインクルードする代わりに、SQL Anywhere ODBC ヘッダーファイルの unixodbc.h をインクルードします。これにより、SQLLEN および SQLULEN は正しく定義されます。unixODBC 2.2.14 以降のバージョンのヘッダーファイルでは、この問題が修正されています。
すべてのパラメーターで正しい型を使用していることを確認する必要があります。正しいヘッダーファイルや C/C++ コンパイラーの強力な型チェックを使用すると便利です。また、SQL Anywhere ドライバーがポインターを介して間接的に設定したすべての変数についても、正しい型を使用していることを確認する必要があります。
リリース 2.2.14 より前の unixODBC ドライバーマネージャーは使用せずに、SQL Anywhere ODBC ドライバーに直接リンクしてください。たとえば、libodbc 共有オブジェクトを SQL Anywhere ドライバーにリンクします。
libodbc.so.1 -> libdbodbc12_r.so.1 |
プラットフォームによっては、SQL Anywhere ドライバーマネージャーを代わりに使用できます。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |