代码之家  ›  专栏  ›  技术社区  ›  Jan Doggen

如何使用firedac设置到oracle的odbc连接?

  •  5
  • Jan Doggen  · 技术社区  · 6 年前

    我可以通过本机驱动程序成功地连接到Oracle,但无法使用ODBC连接。Oracle 11g客户端软件安装在我的Windows 7 64位计算机上,以及从 Instant Client Downloads for Microsoft Windows 32-bit .

    首先让我描述一下成功的连接:

    TNSNames.ORA 包含Oracle 10安装的数据:

    # TNSNAMES.ORA Network Configuration File: C:\oracle\ora92\network\admin\tnsnames.ora
    # Generated by Oracle configuration tools.
    
    VS2003-2005-10.TimeTellBV.nl =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = VS2003-2005-10)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = Orclvs10)
        )
      )
    

    我设置了 TFDConnection 具有

    DriverName := S_FD_OraId;
    Params.Database := 'VS2003-2005-10';
    

    或者,我可以绕过 TNSNAMES.ORA 直接指定:

    DriverName := S_FD_OraId;
    Params.Database := '(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = VS2012-2012.timetellbv.nl)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl12.timetellbv.nl) ))';
    

    (如您所见,这是另一个不在 特恩斯纳姆斯·奥拉 )

    现在通过odbc的失败尝试

    安装了两个32位Oracle ODBC驱动程序:

    • Microsoft ODBC for Oracle版本6.01.7601.19135-我想这是Win7操作系统附带的
    • instantclient_11_2版本11.02.00.04中的oracle-我从上面提到的源手动安装了它(按照 Oracle Instant Client ODBC Release Notes )中。

    我已经通过这些驱动程序设置了两个系统DSN,但都不起作用。

    版本6 ODBC驱动程序,为其提供“server”的tsnames.ora条目名:

    enter image description here

    以及版本11 Oracle驱动程序idem:

    enter image description here

    对于第二个,我添加了另一个条目到 特恩斯纳姆斯·奥拉 ,因为那个对话框显然建议我必须浏览那个文件:

    VS2012-2012.TimetellBV.nl =
      (DESCRIPTION=
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = VS2012-2012)(PORT = 1521))
        )
        (CONNECT_DATA = 
          (SERVICE_NAME = orcl12.timetellbv.nl)
        )
      )  
    

    我设置了 TFD-连接 具有

    DriverName := S_FD_ODBCId;
    Params.Add('DataSource=' + lODBCName);   // The ODBC DSN Name
    Params.Database := lDataSection.Values[INISTRING_DATABASENAME];
    

    此代码和de 32位odbc管理中的“测试”按钮都失败,错误为:

    Unable to connect
    SQLState IM003
    The specified driver could not be loaded due to system error 127: cannot find procedure<br />
    (Oracle in instantclient_11_2; D:\app\jan\product\11.2.0\client_1\SQORA32.dll)
    

    enter image description here

    该文件夹是安装Oracle客户端软件的位置,它包含 SQORA32.DLL (和其他人)在我的系统路径中。

    我已经尝试了各种各样的变化,包括/不包括域名,数据库名称等,没有成功。

    如何正确设置ODBC连接以连接到Oracle,以便通过FireDAC在Delphi东京32位应用程序中使用?


    同样没有帮助的是:

    • 重新安装Visual Studio 2013 32位可再发行版本
    • 将sqora32.dll复制到windows syswow64文件夹
    • 将ORACLE_HOME环境变量设置为D:\ app\jan\product\11.2.0\client_1\
    • 将TNS U ADMIN环境变量设置为D:\ app\jan\product\11.2.0\client U 1\
    • 将Quala32.DLL改名为SqORA32.DLL
    • 将日期为2011年3月11日的c:\windows\syswow64\mfc42.dll替换为日期为2011年4月27日的Oracle主文件夹中的新的
    2 回复  |  直到 6 年前
        1
  •  2
  •   Jan Doggen    6 年前

    我不知道怎么了。我找到了一个客户端安装程序可执行文件(即,它与“即时客户端”不同,后者没有安装程序,其重新安装也没有帮助),从所有Oracle内容中清除了我的虚拟机,使用“管理员”选项(包中的所有可用软件)运行安装程序,最后成功。ODBC也已安装。

    唯一需要为 TFDCOnnection 是:

    DriverName := S_FD_ODBCId;
    Params.Add('DataSource=' + lODBCName);
    

    具有 lODBCName 是ODBC系统DSN名称。

    (我本打算把这个作为对1万用户的评论,然后删除这个问题,但这是不可能的,因为我今天早些时候已经悬赏了。好吧,也许它为其他人服务)。

        2
  •  1
  •   schlebe    6 年前

    我已经遇到过类似的问题。

    我可以使用sqlplus或jdbc连接到oracle数据库,但是当我试图定义odbc连接或.net linq连接时,这不起作用。

    然后我修改了tnsnames.ora文件并 用sid替换服务器名 突然间ODBC连接成为可能。