2011-08-05 57 views
0

有一个delphi应用程序,我试图连接到Oracle数据库使用提供程序MSDAORA.1,但问题在于连接。即将发生的Oracle错误消息是“发生Oracle错误,但无法从Oracle检索错误消息”发生Oracle错误,但无法从Oracle检索错误消息

我能够使用Oracle10g客户端连接到数据库。

Connection String: Provider=MSDAORA.1; 
User ID=murat; 
Password = murat; 
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST= INGPSP)(PORT=1521))(CONNECT_DATA=(SID=INGPSP))); 
Persist Security Info=False; 

请提供您的专家意见可能是什么原因?

+0

您是否尝试使用Oracle OleDB提供程序?它比微软的更新更新,这是官方弃用。您应该更好地使用与Oracle的直接连接,而不使用ADO/OleDB - 例如,请参阅http://www.torry.net/pages.php?id=549或http://blog.synopse.info/post/2011/ 7月9日/ SynDBOracle%3A-开源天然-Oracle的访问 –

回答

2

服务名称似乎缺少在您的地址中。

设置一个tnsnames.ora文件,并将该条目用作数据源而不是您设置的data_source参数。按照可用步骤on the faq

或者利用使用连接字符串,如 '//主机[:端口]/[SERVICE_NAME]' 为您的数据源:// INGPSP:1521 /服务名称

对于Oracle,微软和甲骨文OLEDB提供商是已知的遇到BLOB问题。如果可以,请使用另一种连接方式。

0

我觉得很奇怪的是你的HOST和SID是一样的。 HOST是网络上机器的名称,SID是该机器上的数据库实例。我在我们的网络上为机器DB19上的PRD3数据库(DB19上有多个数据库)创建了以下ConnectionString。我能够用真实的用户名和密码成功连接到数据库。

Provider=MSDAORA.1; 
Password=123456; 
User ID=abc; 
Data Source="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db19)(PORT=1521))(CONNECT_DATA=(SID=prd3)))"; 
Persist Security Info=True 

通常我使用的数据源是TNSNAMES.ORA中定义的数据库名称。键入(更少潜在错误)少得多,可以在不重新编译程序的情况下更改为另一个数据库(例如在开发数据库和生产数据库之间切换)。