私は現在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の問題 は私のものに関連していると思います
誰かが興味を持っていれば、私は解決策に行きました:
何らかの理由で、firebird ODBC公式サイトからダウンロードされた64ビットドライバーにはSQLLEN = 4バイトが付属しています。 help の後、ドライバーをコンパイルできました ソースコード 、そして結果は8バイトのSQLLENで動作するようです。
コンパイルプロセスで、139行目(SetupAttributes.h)を変更してBUILD_DRIVER_VERSIONエラーが発生し、 各数値の間にスペースを追加 修正しました。