• 7881阅读
  • 4回复

[提问]如何在Ubuntu下用QODBC连接SqlServer [复制链接]

上一主题 下一主题
离线mgrmhc
 

只看楼主 倒序阅读 楼主  发表于: 2012-05-16
大家好,我最近遇到一个问题,想请教一下大家。
环境:Ubuntu 11.04 ,Qt4.7.4
先在Ubuntu下编译了odbc,得到libqsqlodbc.so,放到sqldrivers文件夹后,用QSqlDataBase类去连接,可以检测到QODBC驱动。

代码如下:
    db =QSqlDatabase::addDatabase("QODBC","ODBC");
 db.setHostName("192.168.168.45"); //如果dsn中已经含有SERVER,可以省略此句
    QString dsn = QString::fromLocal8Bit
                  ("DRIVER={SQL SERVER};SERVER=192.168.168.45;DATABASE=test;uid=test;pwd=123");
    //如果已经设定DSN,可以写为QString::fromLocal8Bit("SQLSERVER_DSN")
    db.setDatabaseName(dsn);
    //即使dsn中已经设置了UID和PASSWD,仍然需要执行setUserName和setPassword的步骤
    db.setUserName("test");
    db.setPassword("123");
    if(!db.open()) {
        qDebug()<< "Cannot open database-Sql Server"  \
                <<"Unable to establish a database connection." \
               << db.lastError().text();
        return false;
    }
 编译能过,调试时会报如下错误
 /home/share/database-build-desktop/database: symbol lookup error: /usr/lib/qt4/plugins/sqldrivers/libqsqlodbc.so: undefined symbol: SQLAllocHandle
 问题出现了:
 看错误是QODBC编译有问题,我是直接用QtCreator编译Qt自带的odbc源码得到的libqsqlodbc.so,是不是这里不能这样编译?(如果需要像编译Mysql驱动一样,要在命令行下,而且加如"INCLUDEPATH+=..."之类的参数,那么参数应该如何写呢?)
 另外,在Ubuntu下连接SqlServer的DSN串是这样写的吗?
 谢谢!
离线mgrmhc

只看该作者 1楼 发表于: 2012-05-25
问题最后也没解决,这里把部分解决过程记下来~
在Ubuntu下编译QODBC驱动,需要安装unixodbc,还有EasySoft的SqlServer驱动,我装的分别是unixODBC-2.3.1和odbc-sqlserver-1.4.27-linux-x86-glibc。qt源码是qt-everywhere-opensource-src-4.8.1
在编译时,把ODBC的头文件、库加入,如下:
qmake "INCLUDEPATH+=usr/local/easysoft/unixODBC/include/" " LIBS+=usr/local/easysoft/unixODBC/lib/*.so" odbc.pro
然后再make就行了,这样编译出来的libqsqlodbc.so是可以用的,不会报symbol lookup error的错误。但是它需要unixODBC的支持。


各位若有高见,还请不吝赐教~
离线XChinux

只看该作者 2楼 发表于: 2012-06-17
可以试试unixODBC+FreeTDS来访问MSSQL.
当然,直接用FreeTDS而不用ODBC,也可以在Qt中访问MSSQL的。
我很早以前在Windows下用过tds来连接MSSQL,  在Linux下应该也可以的。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线mgrmhc

只看该作者 3楼 发表于: 2012-06-18
听了大侠的介绍,我查了一下freeTDS的资料,它的介绍是:
It allows many open source applications such as Perl and PHP (or any C or C++ program) to connect to Sybase ASE or Microsoft SQL Server,可以达到目的。谢谢!
离线ct1104
只看该作者 4楼 发表于: 2013-03-09
回 1楼(mgrmhc) 的帖子
我的也是产生了那个libqsqlodbc.so但是在使用的时候一直显示数据库打不开。。。我不知道为什么
快速回复
限100 字节
 
上一个 下一个