Ubuntu
unixODBC 和 Firebird ODBC 驅動程序不兼容
我目前正在開發基於 Rcode、ODBC 和 Firebird 的應用程序。
為此,首先我安裝了 firebird 伺服器和 unixODBC(都是 64 位,因為我的機器作業系統是 64 位)。我也嘗試使用 32 位軟體,因為 Ubuntu 多架構允許它,但這導致了另一個問題(在這個主題中無關緊要)。
創建數據庫,使用 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 驅動程序兼容?
由於 SQLLEN,我無法選擇文本列,或者還有更多?我認為這個odbc 的 github 問題與我的有關
如果有人感興趣,我找到了一個解決方案:
出於任何原因,從官方網站下載的 firebird ODBC 64 位驅動程序附帶 SQLLEN = 4 字節。經過一些幫助,我設法從原始碼編譯驅動程序,結果似乎與 8 字節 SQLLEN 一起工作。
在編譯過程中,我遇到了 BUILD_DRIVER_VERSION 錯誤,修改第 139 行(SetupAttributes.h),在每個數字之間添加空格來修復它。