当前位置:   article > 正文

QT执行MYSQL语句问题解决_qsqlquery::exec: database not open can't open data

qsqlquery::exec: database not open can't open database:
  1. int ServerBase::DBConnection()
  2. {
  3. m_sqldb = QSqlDatabase::addDatabase(DB_SALES_DRIVER);
  4. m_sqldb.setHostName(DB_SALES_HOST);
  5. m_sqldb.setDatabaseName(DB_SALES_DBNAME);
  6. m_sqldb.setUserName(DB_SALES_USER);
  7. m_sqldb.setPassword(DB_SALES_PASSWD);
  8. if( !m_sqldb.open())
  9. {
  10. m_dbconnected = false;
  11. qDebug()<<" [Error] "<<"Database open error";//<<m_sqlquery.lastError();
  12. return R_ERROR;
  13. }
  14. else
  15. {
  16. m_dbconnected = true;
  17. qDebug()<<" [OK] "<<"Database opened";
  18. }
  19. return R_OK;
  20. }
  21. int result = this->DBConnection();
  22. m_sqlquery = new QSqlQuery("",m_sqldb);//statement 1:connect db with sqlquery
  23. if(result == R_OK)
  24. {
  25. result = m_sqlquery->exec("INSERT INTO children(fname,age) VALUES('Ann2',13)");
  26. if(!result)
  27. qDebug()<<" [OK] "<<"EXEC successed";
  28. m_sqlquery->exec("SELECT * FROM children c LIMIT 0,1000");
  29. while(m_sqlquery->next())
  30. {
  31. qDebug()<<m_sqlquery->value(0).toString()<<m_sqlquery->value(1).toString();
  32. }
  33. }
  34. //Debug输出:
  35. [OK] Database opened
  36. "1" "Ann"
  37. "2" "Ann"
  38. "3" "Ann2"
  39. "4" "Ann2"
  40. [OK] Database closed





没有加statement 1之前的问题Debug输出:
"QSQLITE" 
"QMYSQL3" 
"QMYSQL" 
 [OK]  Database opened 
QSqlQuery::exec: database not open
 [OK]  Database closed 


 [成都]Jason(642366168)  21:39:33
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "in_mem_db");

        QSqlQuery q("", db);
        q.exec("drop table Movies");
这是一个例子
你把上面类似的db传给了QSqlQuery了吗?!
如果没有

[武汉]新手(19619972)  21:40:08
这个不是必须的
我以前试过
[成都]Jason(642366168)  21:40:21
你的QSqlQuery是查询谁呢?!

它能默认知道?!
好吧,不必须,,你说的,,你加上再试,如果没有再出现这样的情况,你就承认是必须的吧
[沈阳]小青鸟(872015123)  21:40:59
稍等我试试
[沈阳]小青鸟(872015123)  21:46:07
OK,果然是[成都]Jason说的那个问题,多谢
[成都]Jason(642366168)  21:46:16
成功了?!
你想知道原因吗?!

[沈阳]小青鸟(872015123)  21:46:21
OK
[沈阳]小青鸟(872015123)  21:46:32
你刚才 说的对
[成都]Jason(642366168)  21:46:36
当然你也可以坚持之前的认为
[沈阳]小青鸟(872015123)  21:46:36
没有关联起来
[成都]Jason(642366168)  21:46:39
原因是
createDatabaseconnection
通常是static的
[武汉]新手(19619972)  21:47:06
- -  我以前DB申明的是全部变量
[成都]Jason(642366168)  21:47:15
所以,,,程序其它地方可以不带上那个db
[武汉]新手(19619972)  21:47:17
没碰到这样的错误- -
[成都]Jason(642366168)  21:47:27
对于你的非static的...
作用域的问题了.....
你就必须了!
还有,,如果
你的query.exec和createDatabase在一个函数作用域里面...你也可以不用带上那个db
[武汉]新手(19619972)  21:48:29
嗯嗯
[沈阳]小青鸟(872015123)  21:48:37
哦 哦 ,我分开写的
有没有相关资料,我网上查了半天也没找着相关说明
[成都]Jason(642366168)  21:49:16
其实我也近一年没接触sql了....呵呵...不过问题就是这样
资料,,,我也记不信了
不住了
[武汉]新手(19619972)  21:49:48
不过我那个问题到现在还没解决
就是什么  好像最后析构的时候的问题
[武汉]新手(19619972)  21:50:20
说默认的数据库连接怎么来着的
[成都]Jason(642366168)  21:50:25
你可以试着再把exec和createDatabase放一个函数域里面试试,不带那个db的情况,,,答案是成功的

[沈阳]小青鸟(872015123)  21:51:22
像你说的,把db声明为static也是可以成功的呗
[成都]Jason(642366168)  21:51:58
我说的是把你创建db的那个函数声明成static的...

答案应该是成功
[沈阳]小青鸟(872015123)  21:52:12


[成都]Jason(642366168)  21:52:33
如果不声明成static,,但你的query.exec也在一个函数域里,,答案也是成功 

——————————————————
解决方法二:
连接成功后,立即将db与query连接起来。如下code
  1. m_sqldb = QSqlDatabase::addDatabase(DB_SALES_DRIVER);
  2. m_sqldb.setHostName(DB_SALES_HOST);
  3. m_sqldb.setDatabaseName(DB_SALES_DBNAME);
  4. m_sqldb.setUserName(DB_SALES_USER);
  5. m_sqldb.setPassword(DB_SALES_PASSWD);
  6. if( !m_sqldb.open())
  7. {
  8. m_dbconnected = DB_UNCONNECTED;
  9. qDebug()<<" [Error] "<<"Database open error";//<<m_sqlquery.lastError();
  10. return R_ERROR;
  11. }
  12. else
  13. {
  14. m_sqlquery = new QSqlQuery("",m_sqldb);
  15. m_dbconnected = DB_CONNECTED;
  16. qDebug()<<" [OK] "<<"Database opened";
  17. }



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/699847
推荐阅读
相关标签
  

闽ICP备14008679号