qt连接sql server出错,
QSqlDatabase db=QSqlDatabase::addDatabase("QODBC","sss");
QString str = QString("DRIVER={SQL SERVER};SERVER=127.0.0.1;DATABASE=sjk");
db.setDatabaseName(str);
db.setUserName("sa");
db.setPassword("123456");
db.setPort(888);
if(db.open())
{
qDebug()<<"Error!";
}
else
{
qDebug()<<db.lastError().text();
}
错误提示是:"[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝 [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). QODBC3: Unable to connect" --------------------编程问答-------------------- 代码没有问题,检测数据库 --------------------编程问答-------------------- 数据库可以连接
--------------------编程问答-------------------- 我也出现过这种问题。原因是端口没打开,你可以对照
http://topic.csdn.net/u/20100429/10/586ed537-0a66-48ac-97d6-e662e5199339.html
找一下是哪里出了问题。
以下是我的问题的解决经过:
"[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝 [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). [Microsoft][ODBC SQL Server Driver]无效的连接字符串属性 QODBC3: Unable to connect"
我发现,如果将ip地址改为pc机的计算机名,则可连接成功。(即使ip为127.0.0.1也不能连接)
http://topic.csdn.net/u/20100429/10/586ed537-0a66-48ac-97d6-e662e5199339.html
通过楼上地址的对比,我发现我的问题是:服务器没有在1433端口侦听。
(测试方式:在dos下输入netstat -a -n 或者是netstat -an
结果:找不到tcp 127.0.0.1 1433 listening 的项)
所以现在要安装sp4补丁。
打补丁的过程中出现问题:不能打开要写入的文件C:\WINDOWS\system32\ntwdblib.dll。
重启还是不行,我就把sp4中的ntwdblib.dll直接拷贝到系统中C:\WINDOWS\system32。
然后在cmd下运行telnet 127.0.0.1 1433,这时居然可以连接啦。。。
再验证netstat -a -n,1433端口股黯然被侦听了。
然后连接成功! --------------------编程问答--------------------
--------------------编程问答-------------------- qDebug() << "Available drivers:";
#define DB_USER ("sa")
#define DB_PWD ("123456")
#define DB_SERVER (QProcessEnvironment::systemEnvironment().value("COMPUTERNAME") + "\\SQLEXPRESS")
bool Dialog::createConnection()
{
// 数据库连接
db = QSqlDatabase::addDatabase("QODBC");
QString dsn = QString("DRIVER={SQL SERVER}")
+ ";SERVER=" + DB_SERVER
+ ";UID=" + DB_USER
+ ";PWD=" + DB_PWD
+ ";DATABASE=LQFapp";
//如果已经设定DSN,可以写为QString::fromLocal8Bit("SQLSERVER_DSN")
db.setDatabaseName(dsn);
//即使dsn中已经设置了UID和PASSWD,仍然需要执行setUserName和setPassword的步骤
db.setUserName(DB_USER);
db.setPassword(DB_PWD);
//qDebug() << "db is valid: " << db.isValid();
return db.open();
}
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << "\t" << driver;
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
qDebug() << "ODBC driver valid?" << db.isValid();
在main中加入上面这段代码,看你的ODBC源是否安装好了。也就是,是否有ODBC的驱动。如果没有。到网上下一个。大概叫作qodbc4.dll的样子。
--------------------编程问答-------------------- 把驱动放在安装目录下,一个叫sqldrivers的文件夹下面。也可以建立一个文件夹,叫sqldrivers,放在debug或者release下面。 要注意区分不同的编译器的不同dll版本。mingw和ms2008,以及release和debug的版本都不同。就是有四个dll。最好都下全了。 --------------------编程问答-------------------- windows下Qt是自带的有QODBC驱动的,如果没有,也会先报错 没有QODBC驱动,而这个错误应该是配置或设置问题。
--------------------编程问答-------------------- windows下Qt是自带的有QODBC驱动的。
楼主的问题并不是找不到QODBC驱动。。。
补充:移动开发 , Qt