Ubuntu

unixODBC 和 Firebird ODBC 驅動程序不兼容

  • February 3, 2020

我目前正在開發基於 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),在每個數字之間添加空格來修復它。

引用自:https://dba.stackexchange.com/questions/258158