当前位置:编程学习 > wap >>

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端口股黯然被侦听了。

然后连接成功! --------------------编程问答--------------------

#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();
}
--------------------编程问答--------------------        qDebug() << "Available drivers:";
    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驱动,而这个错误应该是配置或设置问题。
引用 5 楼  的回复:
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << "\t" << driver;

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC")……
--------------------编程问答-------------------- windows下Qt是自带的有QODBC驱动的。
楼主的问题并不是找不到QODBC驱动。。。
引用 6 楼  的回复:
把驱动放在安装目录下,一个叫sqldrivers的文件夹下面。也可以建立一个文件夹,叫sqldrivers,放在debug或者release下面。 要注意区分不同的编译器的不同dll版本。mingw和ms2008,以及release和debug的版本都不同。就是有四个dll。最好都下全了。
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,