2015-07-01 177 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