QSqlQuery::exec: database not open

yangxiao_0203 2012-04-07 12:25:12
QSqlQuery conAccessDB::excuteSQL(QString sqlcmd){ 
if(!db.open()){
qDebug() << "Database Error: " << db.lastError().text();
return QSqlQuery();
}
if(!query.exec(sqlcmd)){
qDebug() << "Database Error: When excute \"" << sqlcmd << "\"";
db.close();
return QSqlQuery();
}
db.close();
return query;
}

我是在打开了数据库之后才执行的query.exec(sqlcmd),为何还会出现数据库没打开(QSqlQuery::exec: database not open)的提示?我该怎么做?
...全文
3047 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
棉花虫子 2013-06-12
  • 打赏
  • 举报
回复
我只有日你一下以表谢意了
rna2117 2013-05-16
  • 打赏
  • 举报
回复
引用 7 楼 MFC_MFC 的回复:
…… db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("dbTemp"); …… query=QSqlQuery::QSqlQuery(db);//连接数据库 就加上这句
这个更是精巧
rna2117 2013-05-16
  • 打赏
  • 举报
回复
引用 5 楼 foxyz 的回复:
楼主,其实挺简单,你这么试试看:
QSqlQuery conAccessDB::excuteSQL(QString sqlcmd){ 
if(!db.open()){ 
qDebug() << "Database Error: " << db.lastError().text(); 
return QSqlQuery(); 
} 
QSqlQuery myQuery(db);
if(!myQuery.exec(sqlcmd)){ 
qDebug() << "Database Error: When excute \"" << sqlcmd << "\""; 
db.close(); 
return QSqlQuery(); 
} 
db.close(); 
return myQuery; 
}
您说的真是太好了!
MFC_MFC 2012-07-14
  • 打赏
  • 举报
回复
……
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("dbTemp");
……
query=QSqlQuery::QSqlQuery(db);//连接数据库 就加上这句
yangxiao_0203 2012-06-06
  • 打赏
  • 举报
回复
终于正常连接了~~~不过把原来写的类删了。下次再放在类里测试下好了。谢谢各位!

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

db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=D:\\Qtprogram\\connectAccessDB-build-desktop\\safeSystem.mdb");
if(!db.open()){
qDebug() << "Error:" << db.lastError().text();
return 1;
}
QSqlQuery query(db);
if(query.exec("select * from basicInfo")){
while(query.next()){
qDebug() << query.value(0).toString() << " " << query.value(1).toString();
}
}
db.close();

return a.exec();
}
donwmufromdying 2012-05-28
  • 打赏
  • 举报
回复
楼主,其实挺简单,你这么试试看:

QSqlQuery conAccessDB::excuteSQL(QString sqlcmd){ 
if(!db.open()){
qDebug() << "Database Error: " << db.lastError().text();
return QSqlQuery();
}
QSqlQuery myQuery(db);
if(!myQuery.exec(sqlcmd)){
qDebug() << "Database Error: When excute \"" << sqlcmd << "\"";
db.close();
return QSqlQuery();
}
db.close();
return myQuery;
}
xiebin133 2012-05-28
  • 打赏
  • 举报
回复
怎么看多觉得很别扭。 能把所有代码贴出来嘛?query 和 db你是在哪里关联起来的。
岁小草 2012-05-28
  • 打赏
  • 举报
回复
楼主,问题有没有搞定啊,我也纠结到这了。
yangxiao_0203 2012-04-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

如何证明已经打开数据库了?报错很明显啊,自己在看看吧
[/Quote]
因为我在函数的开头就写了if(!db.open()){……}来判断数据库是否打开。如果没有打开的话就跳出。可是实际运行时,函数并没有跳出,而是继续执行到了if(!query.exec(sqlcmd)){……}这里。然后由QSqlQuery报错了,错误信息是QSqlQuery::exec: database not open。如果一开始数据库没有打开的话,那应该会弹出DataError driver not loaded。
所以我不知是什么情况?
chenlong12580 2012-04-07
  • 打赏
  • 举报
回复
如何证明已经打开数据库了?报错很明显啊,自己在看看吧

21,480

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧