web-dev-qa-db-ja.com

unixODBCとFirebirdの間の非互換性ODBCドライバ

私は現在Rcode、ODBCおよびFirebirdに基づくアプリケーションを開発しています。

そのために、最初にfirebirdサーバーとunixODBCをインストールしました(私のマシンのOSは64ビットなので64ビットです)。 Ubuntu multiarchで許可されているので、32ビットソフトウェアも試してみましたが、別の問題が発生しました(この件では問題ありません)。

Firebird isql関数(/ opt/firebird/bin/isql)を使用してデータベースを作成し、整数、フロート、テキスト列を含む偽のテーブルを作成しました。

UnixODBC isql関数を使用してそれに接続できます(odbc.ini/odbcinst.iniでDSNとドライバーを適切にプログラミングした後)が、問題があります。

テキスト列を含むテーブルを選択できません。エラーstd :: bad_allocが発生します

いくつかの調査の後、私はunixODBCからslencheck関数を発見しました、それを私のドライバーで使用して戻ります

slencheck: sizeof(SQLLEN) == 4
slencheck: driver manager and driver differ!!!

unixODBC SQLLENを変更して、64ビットFirebirdと互換性を持たせるにはどうすればよいですかODBC driver

SQLLENが原因でテキスト列を選択できない、またはこれ以外にもありますか?これは odbcのgithubの問題 は私のものに関連していると思います

1
dwenzel

誰かが興味を持っていれば、私は解決策に行きました:

何らかの理由で、firebird ODBC公式サイトからダウンロードされた64ビットドライバーにはSQLLEN = 4バイトが付属しています。 help の後、ドライバーをコンパイルできました ソースコード 、そして結果は8バイトのSQLLENで動作するようです。

コンパイルプロセスで、139行目(SetupAttributes.h)を変更してBUILD_DRIVER_VERSIONエラーが発生し、 各数値の間にスペースを追加 修正しました。

3
dwenzel