2014-01-24 75 views
0

我收到了一條ORA-03106錯誤訪問Oracle數據庫,當我嘗試訪問使用MS ADO數據庫。此問題只發生在Windows 7 64位機器上。顯然過去有一些XP的問題,但它們是通過一些註冊表編輯修復的。這些註冊表編輯在應用於Windows 7機器時沒有做任何事情。錯誤ORA-03106使用VB6在Windows 7 64位

我沒有關於數據庫的大量信息,因爲這是由不同的部門來處理,我是一個實習生,剛扔在我非常小的背景信息這個問題。這裏是代碼,我得到MyConnection.Open行上的錯誤。

Function db_fetch(sIButtonID, ByRef lstatus, sdescr) As tIBRec 

Dim myRecordSet As ADODB.Recordset 

'Dim sConnectString As String 
Dim sSQL_Statement As String 
Dim this_ibutton As tIBRec 

Set myRecordSet = New ADODB.Recordset 

    If Not CheckForNetDrive("O:") Then 
    lstatus = Shell("net use O: \\host\oracle /PERSISTENT:YES") 
    If Not CheckForNetDrive("O:") Then lstatus = MapNetworkDrive("O:", "\\host\oracle") 
    If lstatus = 0 Then 
     If InStr(GetEnvironmentVar("PATH"), "orawin95\bin") = 0 Then 
      lstatus = SetEnvironmentVariable("PATH", GetEnvironmentVar("PATH") & ";O:\orawin95\bin") 
     End If 
    End If 
    Else 
    If InStr(GetEnvironmentVar("PATH"), "orawin95\bin") = 0 Then 
     lstatus = SetEnvironmentVariable("PATH", GetEnvironmentVar("PATH") & ";O:\orawin95\bin") 
    End If 
    End If 


    'sConnectString = "Provider=msdaora;Data Source=(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521)))(CONNECT_DATA=(SID=12)(SERVER=DEDICATED)));User Id=username;Password=password;" 

    'sConnectString = "Provider=msdaora;Data Source=(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521)))(CONNECT_DATA=(SID=03)(SERVER=DEDICATED)));User Id=username;Password=password;" 
    'sConnectString = "Provider=msdaora;Data Source =(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521)))(CONNECT_DATA=(SID=03)(SERVER=DEDICATED)))User Id=username;Password=password;" 

    'On Error GoTo err: 

    If myConnection.State = 0 Then 
     myConnection.Mode = adModeReadWrite 
     myConnection.Open sConnectString 
    End If 
+0

歡迎來到StackOverflow。發送代碼包括用戶名,密碼和主機不太聰明。這些事情是保密的,所以我建議下次不要。 –

+0

感謝您的支持。 – user3232337

+0

你怎麼能得到VB6使用ADO.NET?那麼,我的一個項目就是研究將我們的程序從VB6遷移到.NET(全部200,000行代碼)的必要條件。 – user3232337

回答

1

我假設ADO(不.NET),即 「爲OLE DB Oracle提供」 無法使用你的機器上。

解決方案:

  • 安裝Oracle客戶端64位像往常一樣 - 我assue這個已經做了。對於OLE DB根據在32位下,xcopy版本的客戶端版本
  • 下載提供商Oracle提供,可以在這裏找到:32-bit Oracle Data Access Components (ODAC) Downloads
  • 解壓軟件,並與Install.bat oledb c:\Oracle\OLEDB_11.2_x32\ OraClient11g_home1 true安裝商。假設「OraClient11g_home1」是您的Oracle家庭名稱。 確保給定的目錄不同於您的Oracle客戶端目錄
  • 轉到您的環境設置,並添加目錄c:\Oracle\OLEDB_11.2_x32\c:\Oracle\OLEDB_11.2_x32\bin\到PATH環境。確保將這些目錄放置在您的Oracle客戶主目錄的之前
  • 添加環境變量TNS_ADMIN = {Oracle client home diretory}\network\admin

嘗試,如果它的工作原理。

一個注意:您可以在一臺機器上安裝一個「Oracle提供的OLE DB」的唯一版本,即使你已經安裝了多個Oracle客戶端。

按照這個步驟我設法讓所有的工作爲Windows 7,64位,甲骨文11.2和我的老VBA Excel宏這是在同一時間對Win7的X64老XP上運行。

對不起,我錯過了你嘗試使用Microsoft OLE DB提供程序(MSDAORA),該解決方案是針對Oracle提供。我不知道它們有多不同,只需要修改連接字符串即可。

+0

我不確定他們是否仍在使用msdaora,該行已被註釋掉。 – user3232337

+0

好吧,我搜索了一下,發現msdaora仍在使用。爲什麼其他人刪除他的答案? – user3232337

+0

微軟提供商已被棄用,因爲很長一段時間,你不應該使用它默認 –