Informix

Informix OLEDB 提供程序的連接問題

  • November 25, 2021

我一直在嘗試建立一個OLEDB Connection到一個Informix Dynamic Server. (版本 IBM Informix 動態伺服器版本 12.10.FC12WE)

背景資訊: 我公司將使用的程序需要OLEDB並且不支持ODBC. 目前負責管理實施的同事有很多其他工作堆積,因此實施將被延遲。與此同時,我的任務是弄清楚如何正確配置 Windows 10 客戶端 PC(它將執行程序)以進行連接。我對數據庫的經驗很少,所以我在各種文件和論壇中搜尋了大約 2 週的答案。到目前為止,我的成功參差不齊。

已經做了什麼:

  • -coledbp.sql腳本已針對sysmaster數據庫上的表執行
  • Informix Client SDKMicrosoft Data Access Components已安裝在客戶端 PC 上。
  • 使用已設置setnet32的系統資料庫項。host:port
  • 司機ifxoledbc已註冊。
  • ODBC- 數據源(64-Bit32-Bit)已創建並測試(它們工作正常)。

各種測試

對於我所有的測試,我一直在使用連接字元串:

“提供者=ifxoledbc;數據源=mydatabase@myserver;使用者ID=myuser;密碼=mypassword;

首先,我嘗試使用.udl-File 測試連接。我選擇IBM Informix OLE DB Provider並輸入數據源和使用者數據。當我測試連接時,出現如下錯誤:

“提供程序的初始化失敗。多步 OLE DB 操作生成錯誤。檢查每個 OLE DB 狀態值(如果可用)。沒有完成任何工作。”

據我所知,這個錯誤有很多可能的原因,我不知道是否能以某種方式得到更具體的錯誤資訊。

使用Server 的Microsoft OLE DB Provider for ODBC DriversODBC-datasource ,測試連接有效。

在 Microsoft Excel ( 32-Bit) 中,我還嘗試了第一次提到的連接字元串和連接字元串,它是在.udl設置中輸入資訊時建構的。兩種情況都有相同的錯誤。

對於我的下一個測試,我使用了一個.vbs- 腳本,該腳本在IBM Informix Developers Handbook

On Error Resume Next

set conn=createobject("ADODB.Connection")

conn.connectionstring = "Provider=ifxoledbc;DataSource=mydatabase@myserver;UserID=myuser;Password=mypassword;"

conn.open 

If Err Then     
  WScript.Echo "Error!! Open"+conn.Errors(0).Description 
Else    
  WScript.Echo "Connected"
  conn.close 
end if

這再次導致“多步”錯誤。

我嘗試的最後一件事是使用Rowset Viewerof MDAC.udl我使用了與- File完全相同的輸入。但令我驚訝的是,它成功連接了!(它返回錯誤“未知介面”,但仍然有效)它正確讀取了我使用setnet32-Tool 設置的條目。(我通過暫時刪除其中一個條目來檢查這一點,這導致了一個額外的錯誤並且沒有連接)

現在我有幾個問題:

  • 客戶端 PC 上是否還有其他需要配置的內容?
  • 查看器如何成功,而其他所有測試都失敗了?
  • 有什麼辦法可以得到更準確的錯誤碼?
  • 我在處理問題上是否存在重大缺陷?

我感謝任何人可以給我的每一個建議。

因此,在放棄尋找答案之後,我開始嘗試所有可以想像的屬性組合,其中包含設置和未設置的不同系統資料庫,並且我設法讓它工作。

連接字元串失去UNICODE=TRUE

我不能肯定地說,如果我之前已經嘗試過,並且錯誤最初來自錯誤設置的系統資料庫項,或者這個簡單的解決方案是否通過了我的測試。

無論如何,這是我所做的,除了我原來的文章中提到的(不知道這是否有什麼不同):

  • 使用相應的 regsvr32.exe註冊了 ifxoledbc.dll (32Bit64Bit) (最初我64-Bit對兩者都使用了 regsvr32.exe)
  • Computer\HKEY_CLASSES_ROOT\Ifxoledbc\CLSID(64 位)和Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Ifxoledbc\CLSID(32 位)中添加了名稱:OLEDB_SERVICES類型:REG_DWORD和值:0xffffffff

結論:

我仍然很驚訝,RowsetViewer不知何故繞過了對UNICODE財產的需求。也許它會自動將其設置為true

我在查看器中提到的interface:unknown錯誤似乎已在較新版本的(僅在使用工具Informix Client SDK的 64 位作業系統中發生)中得到修復。32Bit

在我成功的測試過程中,我還注意到,Excel 似乎不需要%INFORMIXDIR%環境變數。僅供參考,當我測試ODBC數據源時,我必須編輯“%INFORMIXDIR”以指向我的32Bit64Bit文件夾(不這樣做會導致unable to load shared library錯誤)。64Bit數據源也與我的32BitExcel 不兼容。OLEDB Provider但是,它連接得很好%INFORMIXDIR% 仍然指向該64Bit文件夾。

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