2015-07-01 218 views
0

我與使用遠程數據對象(RDO)2.這裏連接到Oracle11g的服務器的舊的Visual Basic 6應用程序的工作是我的代碼:服務器名稱自敗

Dim rdoCon As New rdoConnection 

rdoCon.Connect = "DRIVER={Microsoft ODBC for Oracle};SERVER=os11atst.world;" 
Debug.Print rdoCon.Connect '1 
'Prompt the user to enter credentials and connect to the server: 
rdoCon.EstablishConnection rdDriverComplete, False 
Debug.Print rdoCon.Connect '2 

的第一Debug.Print給我這個(預期):

DRIVER={Microsoft ODBC for Oracle};SERVER=os11atst.world; 

然而,第二個給了我這樣的:

DRIVER={Microsoft ODBC for Oracle};UID=username;PWD=password; 

即使連接正常工作,SERVER參數也會丟失。這對我來說是個問題,因爲我需要知道連接到的是什麼服務器。我不能簡單地使用第一個字符串中的信息,因爲用戶(並且應該)能夠在提示輸入用戶名和密碼的情況下更改服務器。

此問題來自於無處,可能與從Windows XP升級到7有關。以前該程序沒有表現出這種行爲,或者老年同事告訴我。雖然不是100%確定這是正確的。

如何防止服務器名稱的缺失?除了查看連接字符串之外,我能否以任何其他方式獲取服務器的名稱?

我對包括升級到比RDO更新的解決方案不感興趣。由於外部原因,我堅持使用它。

+0

RDO是一個從過去的爆炸。把它放在一個變量中? '「..SERVER =」&strLastEnteredOrDefaultServerName' –

+0

@Alex K:我知道它已經很老了,但是這個程序對很少用戶來說是值得改造的......理論上我可以把它放在一個字符串中,但這需要用代碼搞亂一些代碼(取代自動提示),我想盡可能少地觸碰這個老的野獸,以防止任何未解決的問題。 – Anders

回答

0

我開發了一個不太漂亮的解決方法來解決這個問題。我有一個名爲SETTINGS的表,其中包含NAMEVALUE列。對於每個數據庫,我只需將設置servername與適當的值一起添加。所有我需要做的,找出我是什麼服務器連接到隨後查詢DB:

SELECT value FROM settings WHERE name = 'servername' 

這當然是一個非常醜陋的黑客攻擊,因此任何更好的解決方案將受到歡迎。

1

rdoCon.EstablishConnection將覆蓋您之前設置的任何內容。

聽起來好像這個新機器上安裝的DSN中存在問題。將它與先前機器上安裝的DSN進行比較。它有一個你在這臺新機器上缺少的配置。

+0

謝謝你的回覆 - 我很感激!連接時我根本沒有使用DSN。 (我曾嘗試在連接字符串中設置'DSN =''',但它仍然給了我相同的行爲。)不幸的是,較舊的機器無法用於檢查。 – Anders

+0

如果Windows 7是64位版本,那麼你幾乎肯定與驅動程序有衝突,因爲你的應用程序只有32位,RDO是舊技術。我知道你沒有使用DSN,但在這種情況下,我會建議嘗試一個完全配置的,因爲這可能會幫助你保持正確的連接。否則,你可能不得不咬緊牙關,轉換成適用於64位Windows的ADO。 – joehanna

+0

您還可以嘗試本文中的一些提示,讓VB6在64位Windows上順利運行:http:// techapple。net/2013/10 /安裝和運行-microsoft-visual-basic-6-0-windows-7windows-8-x64-64-bit-with-all-features/ – joehanna