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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere データ・アクセス API » SQL Anywhere ODBC API » ODBC アプリケーションの構築

 

unixODBC ドライバ・マネージャの使用

バージョン 2.2.13 より前の 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.13 のヘッダ・ファイルではこの問題が修正されています。

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

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

    libodbc.so.1 -> libdbodbc11_r.so.1

    プラットフォームによっては、SQL Anywhere ドライバ・マネージャを代わりに使用できます。UNIX での SQL Anywhere ODBC ドライバ・マネージャの使用を参照してください。

詳細については、UNIX での ODBC アプリケーションのリンクを参照してください。