unixODBC所需的头文件都被安装到了/usr/inlucde下,编译好的库文件安装到了/usr/lib下,与unixODBC相关的可执行文件安装到了/usr/bin下,配置文件放到了/etc下。安装完成
b.失败
终端显示:
odbcinst: error while loading shared libraries: libodbcinst.so.2: cannot open shared object file: No such file or directory
错误处理:
(1)如果库文件安装到了/lib或/usr/lib目录下,那么需在该目录下执行一下ldconfig命令
(2)其他情况请参阅:http://blog.csdn.net/dongweizu33/article/details/54616258
二、配置
1、修改配置文件
$ sudo vim /etc/odbc.ini
$ sudo vim /etc/odbcinst.ini
需要注意的是,配置unixodbc时要确认odbcinst.ini配置文件中Driver中的路径是否正确。此处的DRIVER应该对应DM7安装目录下bin目录下的libdodbc.so文件。
注:odbc.ini和odbcinst.ini中每行开头禁止留有空格,否则会有如下报错信息:
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect。
直接从OneNote中拷贝代码到Ubuntu也会导致上述问题
2、检查unixODBC配置是否正确
[root@xx etc]# isql -v DM7 SYSDBA SYSDBA
±--------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
±--------------------------------------+
SQL>
如出现如上界面,说明UnixODBC配置成功。
三、问题解决方案
1、.so文件找不到
解决方案一:
第一步:查找该 .so 文件的依赖性
第二步:定位未找到的(=> not found)依赖文件
第三步:将依赖文件拷贝到/usr/lib中
第四步:再次查验该 .so 文件的依赖性,发现依赖文件完整
第三步的操作导致如下问题:
上述方案无法解决根本问题!!!
解决方案二:
该问题本质上是DM7没有安装在系统目录中导致的,将DM7安装在/opt目录中可直接解决问题!
在Linux环境中,QT工程通过UnixODBC连接DM数据库,需要手动启动DM服务器
dmserver dm.ini
四、UnixODBC要配合freetds在QT中连接数据库
1、FreeTDS的编译安装。
下载:http://pan.baidu.com/s/1o60XNQi
>解压
>cd freetds-0.9.1
>./configure --prefix=/usr/local/freetds
>make
>sudo make install
2、安装好后还需要配置3个文件:
1)配置 /usr/local/freetds/etc/freetds.conf
sudo vi /usr/local/freetds/etc/freetds.conf
#A typical Microsoft server
[testdsn] # SQL Server数据源名称,可以任意取有意义的名称
host=192.168.10.22 # 数据库主机
port=1344 #数据库监听端口
2)配置 /usr/local/unixODBC/etc/odbcinst.ini
[FreeTDS]
Description = FreeTDS unixODBC Driver
Driver = /usr/lib/libtdsodbc.so.0
UsageCount = 1
[SQL Server]
Description = FreeTDS unixODBC Driver
Driver = /usr/local/ unixODBC/lib/libtdsodbc.so.0
UsageCount = 1
3 )配置 /usr/local/unixODBC/etc/odbc.ini
testdsn] # 数据源名称
Driver=FreeTDS# 指向odbcinst.ini的驱动配置
Description=MSSQL Server
Servername=testdsn # 数据源名称
Database=sqlscada #数据库名称
五、关键QT源码
QSqlDatabase connection = QSqlDatabase::addDatabase(“QODBC”, connectionName);
connection.setDatabaseName(QString(“DM7_%1”).arg(tcpPort));//数据库名对应[DM_5236]、[DM_5237]等
connection.open(uid, pwd);