zoukankan      html  css  js  c++  java
  • QT连接多种数据库f方法及测试

     

    QT提供了对多种数据库的访问支持,对SQL Server也可以通过ODBC来进行访问。
    要想顺利访问SQL Server。 首先要保证以下几点:
    1. QT编译时已经编译了QtSql
    2. 编译了ODBC插件。可以通过 configure -plugin-sql-odbc来保证,也可以单独编译~/src/plugins/sqldrivers/odbc
    qmake -t vclib odbc.pro
    qmake
    nmake
    编译后,在~/plugins/sqldrivers/下应该有qsqlodbcd4.dll(debug)或qsqlodbc4.dll
    此时,可以用下面的程序,测试一下你的QT目前支持哪些数据库访问。
    #include <QApplication>
    #include <QSqlDatabase>
    #include <QStringList>
    #include <QDebug>

    int main(int argc, char* argv[]) {
        QApplication app(argc, argv);
        
        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();
    }

    如果输出中有
    Available drivers: 
    "QSQLITE" 
    "QODBC4" 
    "QODBC" 
    ODBC driver valid? true
    就说明已经可以成功支持ODBC了。
    3. 要连接数据库,有3种方式:
    http://hi.baidu.com/wenjiejia/blog/item/1cd8ef11cbce4ecea7ef3f4b.html(详情)

    QT连接数据库 是应用开发的常用基础操作。经过实验,我总结了一些例程。这些例程可以连接各种数据库。
    ps:这里只是我觉得好用的方法。QT另外提供了更高级的方法,如有需要请自己尝试。

    连接数据库需要的头文件:
    #include <QSqlDatabase>
    #include <QSqlQuery>

    1、连接微软的Access----------------------------------------------------------------------------------------------
    QSqlDatabase ldb = QSqlDatabase::addDatabase("QODBC");
    ldb.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=system.mdb;UID=;PWD=xiaozhuset");
    bool ok = ldb.open();
    //新定义一个查询集合,并指定 链接关键字。 如果有多个连接,可以随意指定一个你需要的。
    QSqlQuery mquery=QSqlQuery::QSqlQuery(ldb);        
    if(ok)
    {
    bool isok=mquery.exec("select * from sql_set;");
    if (!isok)
    {
    ldb.close();
    return -1;
    }       

    //这个是必须的,因为查处的结果集当前位置不在第一条记录上。
    mquery.next();

    QString sHostName=mquery.value(1).toString();
    QString sDatabaseName=mquery.value(2).toString();
    QString sUserName=mquery.value(3).toString();
    QString sPassword=mquery.value(4).toString();

    //清除结果集
    mquery.clear();
    // 如果该连接不再使用,就可以关闭。
    ldb.close();

    //这里是将从数据库读出的数据写到一个list控件里
    ui.list_out->insertItem(ui.list_out->count(),sHostName);
    ui.list_out->insertItem(ui.list_out->count(),sDatabaseName);    

    }
    else

    // 打开本地数据库失败,
    QMessageBox::critical(0, QObject::tr("读取Access数据库错误!"),db.lastError().text());
    return -1;
    }    


    2、连接mssql2000 数据库--------------------------------------------------------------------------------------------
    QString strDatabaseName = QString("DRIVER={SQL Server};Server=(%1);Database=%2").arg("local").arg(sDatabaseName);    

    db=QSqlDatabase::addDatabase("QODBC","db"); // 使用odbc数据库驱动 
    db.setHostName(sHostName);
    db.setPort(1433);
    db.setDatabaseName(strDatabaseName); // 我们之前建立的数据库连接关键字
    db.setUserName(sUserName); 
    db.setPassword(sPassword); 
    bool ok = db.open(); //尝试连接数据库
    if(ok)

    menuset_set->db=db;
    // 这里用sa已经成功连上数据库            
    return 0;
    }
    else

    // 打开数据库失败,
    QMessageBox::critical(0, QObject::tr("数据库连接错误!"),db.lastError().text());
    return -2;
    }        
    mssql2000数据库连接的使用和Access连接使用方法一样。
    QSqlQuery mquery=QSqlQuery::QSqlQuery(db);        
    bool ok1=mquery.exec("select * from CarteMenu;");
    if (ok1==false)return -1;
    QString menu_mkey=mquery.value(13).toString();
    QString strmenu_lang=mquery.value(3).toString();
    //清除结果集
    mquery.clear();

    3、连接mysql 数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql数据库驱动 
    db.setHostName("localhost");
    db.setDatabaseName("exampledb"); // 数据库名称
    db.setUserName("sa"); // 用户名
    db.setPassword("1"); // 密码
    bool ok = db.open(); // 尝试连接数据库
    if(ok)

    QSqlQuery myquery; 
    if(myquery.exec("select * from employeedb"))

    int num = 0; 
    if(db.driver()->hasFeature(QSqlDriver::QuerySize))
    {
    num = myquery.size(); // 如果支持结果影响的行数,那么直接记录下来
    }
    else
    {
    myquery.last(); //否则定位到结果最后
    num = myquery.at() + 1;
    }
    //这里添加数据库的查询结果处理操作


    else // 如果查询失败

    QSqlError error = myquery.lastError();
    }
    }
    else // 打开数据库失败
    {

    }

    QT4如何连接MS SQL SERVER


    1.网上上了很久,其实语法很简单

        QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

        db.setDatabaseName( "DRIVER={SQL Server};SERVER=127.0.0.1;UID=hello;PWD=hello;DATABASE=hello" );

    2.要看连接是否正常,若有错,什么错,可以这样写

        bool r = db.open();
    QSqlError err = db.lastError();
    QString s = err.text();

        查看S的内容,即可得到错误内容。

    3.若出错信息是驱动未加载,那么使用如下方法,可得到本地是否支持该驱动

        QApplication a(argc, argv);
    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();

    4.若是返回结果是未支持该驱动,那么就需要重新编译sqldrivers,可以在命令行下,先使用configure,再nmake,我找到一个 简便方法,由于QT4.3.1与MS VS2005支持较好,因此安装了QT在VS2005上的插件(名称例如:qt-vsintegration-1.3.1.exe)之后,可以直接在 VS2005中,使用"QT->Open Solution from .pro file",找到QT的安装目录中的“projects.pro”,导入后,可发现几百个Project,“批生成”即可。

  • 相关阅读:
    jpeg 文档格式
    gif 文件格式
    firefox前世今生
    png 文档格式
    字符'\xe5\x8c\x97\xe4\xba\xac\xe6\x96\xb0\xe5\x8d\x8e\xe7\x94\xb5\xe8\x84\x91\xe5\xad\xa6\xe6\xa0\xa1' 转为汉字
    SQL server 报错:
    encode 与 decode
    Octave 作图 无响应
    qmake建工程
    urlparse (scheme、netloc、path等)
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/5286967.html
Copyright © 2011-2022 走看看