原文地址::http://blog.sina.com.cn/s/blog_51728d1c0101d5g3.html
相关文章
1、QODBC3:Unable to connect----https://forum.qt.io/topic/66668/qodbc3-unable-to-connect
今天在阿里云搞了一个云服务器备用,给它安装了windows server 2008系统和SQL server 2008
然后把调试好的上位机程序拷贝过去,却发现在windows xp和 windows 7都能打开数据库的情况下
在2008却打不开,提示open error 和 QODBC3: Unable to connect
1、dsn配置测试依然可以用,没有报错
2、怀疑是odbc驱动没装,去qt目录下拷贝了剩余的3个dll文件过来,依然不行
3、把dsn的服务器地址改为本地的local,测试能通过就是不能打开
4、在windows xp上把dsn指向阿里云里面装的sql 数据库,发现这样是能操作数据库,程序运行也没问题
解决办法:
实在没则了,百度了一下这个问题,发现还真有人碰到这个问题的,如下
按照这个哥们的解决方法,对我这里依然没有用,还是会报错,最后尝试了一下他的另一种方法,却很神奇的连上了,也可以打开数据库了。
1、原来我是在odbc里设置了一个系统dsn,取名叫dbdsn,在这里面输入服务器地址,用户名和密码,数据库名等,然后在qt程序里直接使用这个dsn,如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(dbdsn);
db.setUserName("sa");
db.setPassword("xx");
if(!db.open())
{
qDebug() << "db open error !!! ";
qDebug()<<db.lastError();
return false;
}
return true;
这样的设置在windows xp 和windows 7 32位下运行都没有问题
可以再windows server 2008 下却open失败了
2、改成如下这样就解决问题了
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
QString dsn=QString::fromLocal8Bit("DRIVER={SQL SERVER};SERVER=192.168.1.100;DATABASE=xxx");
db.setDatabaseName(dsn);
//即使dsn中已经设置了UID和PASSWD,仍然需要执行setUserName和setPassword的步骤
db.setUserName("sa");
db.setPassword("xx");
if(!db.open())
{
qDebug() << "db open error !!! ";
qDebug()<<db.lastError();
return false;
}
return true;
我就是这样解决掉问题了,记录下来,以免遗忘
供后来者参考
对了我的qt库是4.8.4
用第二种方法就不用去设置dsn了