我正在尝试使用DBD :: ODBC在Perl脚本(v5.12.4)中调用ODBC连接到Informix数据库。我已经阅读了很多文档,似乎正在敲墙,并希望在这里得到一些提示。
我安装了带有空odbcinst.ini和odbc.ini文件的unixODBC 2.2.14(不太好,我知道)。我还从IBM的网站下载了Informix的CSDK。如果我检查DBI的可用驱动程序,那么也会列出Informix。
我想我的问题与使用驱动程序和dsn的正确信息填充.ini文件有关。我不确定Informix驱动程序在哪里,我如何引用它们或dsn的语法。我一直在使用带有mysql的DBI一段时间就好了,但是ODBC似乎更深入,现在有点过头了。
当我尝试运行脚本进行连接时,我得到:
DBI connect........failed: [unixODBC][Driver Manager]Data source name not found, and no default driver specified (SQL-IM002) at Informix.pl line 20
如果我错过帖子中的任何重要细节,请告诉我,我会包含。
谢谢!
更新
我在一个单独的帖子上得到了一些帮助,发现Java和我的操作系统不能很好用,所以我无法正确安装CSDK。所以,我撕掉了Ubuntu并安装了SuSE。我(我希望)现在正确安装了CSDK并更新了.ini文件。在旁注中,我无法运行nm来查看符号,但我在/ opt / IBM / informix / lib / dir中有几个.so文件,我试图在我的odbcinst.ini文件中引用它。当我运行isql连接时,我得到了:
[01000][unixODBC][Driver Manager]Can't open lib '/opt/IBM/informix/lib/nameofdriver.so. : file not found
你对这个有什么建议吗?我检查了文件中的流氓空格/字符,我正在以root身份运行连接请求。任何帮助表示赞赏。谢谢!
答案 0 :(得分:2)
您是否阅读过DBD :: ODBC附带的README.informix?我知道它已经很老了,但它至少可以为您提供一个线索,通常将INFORMIXDIR设置为CSDK解压缩的位置,客户端库位于$ INFORMIXDIR / lib / cli中。
您需要找到哪个共享对象是Informix ODBC驱动程序,因此请在SDK中查找以.so结尾的文件,如果仍然有太多猜测,请尝试在其上运行nm并查找像SQLAllochandle这样的符号(全部都是ODBC驱动程序需要)。找到驱动程序后,您需要创建可以使用“odbcinst -j”定位的ini文件。在odbcinst.ini文件中添加以下内容:
[informix]
Description=Informix ODBC driver
Driver=/path/to/informix_odbc_driver_shared_object
DontDLClose=1
然后你需要在你的odbc.ini中创建一个类似于:
的DSN[mydsn]
Driver = informix
Database=myDataBase;
Host=192.168.10.10;
Server=db_engine_tcp;
Service=1492;
Protocol=onsoctcp;
我从连接字符串网站窃取了这些内容,因此您应该使用informix docs检查它们。
然后你可以使用:
isql -v mydsn myusername mypassword
测试连接。
一旦你开始工作,我很乐意接受对README.informix的任何修改。