大家好,我最近遇到一个问题,想请教一下大家。
环境: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串是这样写的吗?
 谢谢!