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