我在本地机器上安装了oracle客户端,其中tnsnames.ora文件中的内容如下:
dbtest_212.113.74.23 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 212.113.74.23)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbtest)
)
)
然后在Delphi 7中新建应用程序,在窗体上放置ADOConnection控件,双击该控件设置数据链接属性如下:
提供程序:Oracle Provider for OLE DB
数据源:dbtest_212.113.74.23
用户名称:xxx
密码:xxx
单击“测试连接”按钮,报“ORA-12154:TNS:无法处理服务名”。如果将数据源改为“dbtest”,测试连接成功。请问这是为什么,我觉得这个地方应该填的是本地网络服务名“dbtest_212.113.74.23”,而不应该是服务名(在oracle 9i中也称为全局数据库名,替代了原来的数据库实例名的概念)“dbtest”,因为我是本地Delphi程序远程连接oracle服务器,应该是本地Delphi程序连接oracle客户端,oracle客户端再去连接oracle服务器才行啊。
还有一个更奇怪的问题,为了解决上述问题,我利用控制面板自带的“数据源(ODBC)”建立了一个系统数据源“testDSN”,其中“TNS Service Name”设置为“dbtest_212.113.74.23”,用户名和密码合法,然后测试数据源,连接成功;如果将“TNS Service Name”设置为“dbtest”,用户名和密码不变,测试数据源,连接失败,这符合我的预期,即我上述说的原因。然后我在Delphi中将ADOConnection控件的数据链接属性修改如下:
提供程序:Microsoft OLE DB Provider for ODBC Drivers
使用数据源名称:testDSN
用户名:xxx
密码:xxx
单击“测试连接”按钮,报相同错误“ORA-12154:TNS:无法处理服务名”。但如果用上述在“数据源(ODBC)”中测试连接失败的testDSN设置,在Delphi中却可以使ADOConnection控件测试连接成功。
我真是被搞糊涂了,究竟这是什么原因导致的。说明一点,“dbtest_212.113.74.23”作为本地网络服务器名在PL/SQL Developer和SQL PLUS中使用时,都可以正常连接oracle服务器。
dbtest_212.113.74.23 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 212.113.74.23)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbtest)
)
)
然后在Delphi 7中新建应用程序,在窗体上放置ADOConnection控件,双击该控件设置数据链接属性如下:
提供程序:Oracle Provider for OLE DB
数据源:dbtest_212.113.74.23
用户名称:xxx
密码:xxx
单击“测试连接”按钮,报“ORA-12154:TNS:无法处理服务名”。如果将数据源改为“dbtest”,测试连接成功。请问这是为什么,我觉得这个地方应该填的是本地网络服务名“dbtest_212.113.74.23”,而不应该是服务名(在oracle 9i中也称为全局数据库名,替代了原来的数据库实例名的概念)“dbtest”,因为我是本地Delphi程序远程连接oracle服务器,应该是本地Delphi程序连接oracle客户端,oracle客户端再去连接oracle服务器才行啊。
还有一个更奇怪的问题,为了解决上述问题,我利用控制面板自带的“数据源(ODBC)”建立了一个系统数据源“testDSN”,其中“TNS Service Name”设置为“dbtest_212.113.74.23”,用户名和密码合法,然后测试数据源,连接成功;如果将“TNS Service Name”设置为“dbtest”,用户名和密码不变,测试数据源,连接失败,这符合我的预期,即我上述说的原因。然后我在Delphi中将ADOConnection控件的数据链接属性修改如下:
提供程序:Microsoft OLE DB Provider for ODBC Drivers
使用数据源名称:testDSN
用户名:xxx
密码:xxx
单击“测试连接”按钮,报相同错误“ORA-12154:TNS:无法处理服务名”。但如果用上述在“数据源(ODBC)”中测试连接失败的testDSN设置,在Delphi中却可以使ADOConnection控件测试连接成功。
我真是被搞糊涂了,究竟这是什么原因导致的。说明一点,“dbtest_212.113.74.23”作为本地网络服务器名在PL/SQL Developer和SQL PLUS中使用时,都可以正常连接oracle服务器。
解决方案 »
- 一个关于EXCEL接口程序的问题
- 关于我编的一个资料查询系统的几个小问题:求助~
- 关于在Paradox数据库内用Delphi的SQL动态新增一字段
- 请问怎样才能把程序中的变量(不是字段值)等输出到frReport1的报表中的适当的地方呢?
- 各位同仁呀,帮帮忙吧! 我再不做好, 就要下课了!!帮帮忙忙!在线待。。。
- 什么是“停靠窗体”?
- 在进程A中怎样向外部进程进程B中发送鼠标单击消息?
- 一个数据库效率问题,大家一起帮帮我!!(分是一定会给的)
- 请教各位一个有关TreeView的问题,急!
- 有知道 if len(final_args) >rank是什么意思吗
- 如何隐藏与显示窗口?
- delphi调试时老是出现CPU窗口。怎么解决
我也這樣想。
如果tnsnames中只有一個連接配置信息,可能聰明的oledb程序會自己根據service_name去到取。另外其實不用額外建tns,直接把tns的那一打穿連接內容放到adoconnectstring的datasource中就行
datasource="(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 212.113.74.23)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbtest)
)"
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.133.33.88)(PORT = 1521))
)
(CONNECT_DATA =
(service_name = sfcdb)
)
)
ADOConnection控件配置如下:
提供程序:Microsoft OLE DB Provider for Oracle
数据源:SFC_TEST
用户名称:xxx
密码:xxx
单击测试连接报错:测试连接失败,因为初始化提供程序时发生错误。发生了一个Oracle错误,但无法从Oracle中检索错误信息。我的TNS是通的,Oracle客户端也有装。各位请帮忙看看是什么原因呢?