查看完整版本: [-- 数据库断网重连问题,如何重新定义netquery啊 --]

QTCN开发网 -> Qt基础编程 -> 数据库断网重连问题,如何重新定义netquery啊 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

wfwjp 2017-04-19 12:55

数据库断网重连问题,如何重新定义netquery啊

程序连接两个数据库,定义了两个Qsqldatabase对象,netdb和localdb,两个Qsqlquery,netquery和localquery。
如果网络有很多断点,在netquery.exec()时报错,我想再重新连接一下netdb,见下面例子。在netdb重连后,如果使用QSqlQuery netquery1(netdb);是可以的,但是直接使用netquery就会报错,我需要仍然使用netquery,如果Qsqlquery netquery(netdb)重新定义就会报错,netquery如何重新定义呢?
  1. QSqlDatabase netdb=QSqlDatabase::addDatabase("QODBC","netdb");
        netdb.setDatabaseName(QString("DRIVER={SQL SERVER};"
                                   "SERVER=%1;" //服务器名称
                                   "DATABASE=%2;"//数据库名
                                   "UID=%3;"     //登录名
                                   "PWD=%4;"      //密码
                                   ).arg(netservername)
                                    .arg(netdatabase)
                                    .arg(netlogid)
                                    .arg(netlogpassword)
                           );

        if ( !netdb.open())
        {
            QMessageBox::critical(0, "无法连接网络数据库!",
                netdb.lastError().databaseText(), QMessageBox::Cancel);
            return;

        }
        QSqlQuery netquery(netdb);
        bool rtn=netquery.exec("select ttmc from tttzd");
        if(!rtn)
        {
            QMessageBox::critical(0, "检索网络库错误!",
                netdb.lastError().databaseText(), QMessageBox::Cancel);
            return;
        }
        QMessageBox::critical(0, "wait wl!",
            netdb.lastError().databaseText(), QMessageBox::Cancel);

        netdb.removeDatabase("netdb");

        netdb=QSqlDatabase::addDatabase("QODBC","netdb");
        netdb.setDatabaseName(QString("DRIVER={SQL SERVER};"
                                   "SERVER=%1;" //服务器名称
                                   "DATABASE=%2;"//数据库名
                                   "UID=%3;"     //登录名
                                   "PWD=%4;"      //密码
                                   ).arg(netservername)
                                    .arg(netdatabase)
                                    .arg(netlogid)
                                    .arg(netlogpassword)
                           );

        if ( !netdb.open())
        {
            QMessageBox::critical(0, "无法连接网络库!",
                netdb.lastError().databaseText(), QMessageBox::Cancel);
            return;
        }


        QSqlQuery netquery1(netdb);
        rtn=netquery1.exec("select ttbh from tttzd");
        if(!rtn)
        {
            QMessageBox::critical(0, "检索网络库错误!",
                netdb.lastError().databaseText(), QMessageBox::Cancel);
            return;
        }
        netquery1.next();
        QString ls_bh=netquery1.value(0).toString();
        QString ls_mc=ls_bh;





wfwjp 2017-04-19 16:44
测试了下  

netdb.removeDatabase("netdb");
netdb=QSqlDatabase::addDatabase("QODBC","netdb");
改为
netdb=QSqlDatabase::addDatabase("QODBC","netdbtest");
就可以直接使用netquery了。

  1. QSqlDatabase netdb=QSqlDatabase::addDatabase("QODBC","netdb");
        netdb.setDatabaseName(QString("DRIVER={SQL SERVER};"
                                   "SERVER=%1;" //服务器名称
                                   "DATABASE=%2;"//数据库名
                                   "UID=%3;"     //登录名
                                   "PWD=%4;"      //密码
                                   ).arg(netservername)
                                    .arg(netdatabase)
                                    .arg(netlogid)
                                    .arg(netlogpassword)
                           );


        if ( !netdb.open())
        {
            QMessageBox::critical(0, "无法连接网络数据库!",
                netdb.lastError().databaseText(), QMessageBox::Cancel);
            return;

        }
        QSqlQuery netquery(netdb);
        bool rtn=netquery.exec("select ttmc from tttzd");
        if(!rtn)
        {
            QMessageBox::critical(0, "检索网络库错误!",
                netdb.lastError().databaseText(), QMessageBox::Cancel);
            return;
        }
        QMessageBox::critical(0, "wait wl!",
            netdb.lastError().databaseText(), QMessageBox::Cancel);

        //netdb.removeDatabase("netdb");

        netdb=QSqlDatabase::addDatabase("QODBC","netdb1");
        netdb.setDatabaseName(QString("DRIVER={SQL SERVER};"
                                   "SERVER=%1;" //服务器名称
                                   "DATABASE=%2;"//数据库名
                                   "UID=%3;"     //登录名
                                   "PWD=%4;"      //密码
                                   ).arg(netservername)
                                    .arg(netdatabase)
                                    .arg(netlogid)
                                    .arg(netlogpassword)
                           );

        if ( !netdb.open())
        {
            QMessageBox::critical(0, "无法连接网络库!",
                netdb.lastError().databaseText(), QMessageBox::Cancel);
            return;
        }


        //QSqlQuery netquery1(netdb);
        rtn=netquery.exec("select ttbh from tttzd");
        if(!rtn)
        {
            QMessageBox::critical(0, "检索网络库错误!",
                netdb.lastError().databaseText(), QMessageBox::Cancel);
            return;
        }
        netquery.next();
        QString ls_bh=netquery.value(0).toString();
        QString ls_mc=ls_bh;




查看完整版本: [-- 数据库断网重连问题,如何重新定义netquery啊 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled