QSqlQuery A fail after QSqlQuery B exec an invalid SQL
-
Hi and thank you in advance
I'm running in a while(query.next()) and QString name = query.value("name").toString() return the current value, but if another query fail inside the while loop the query.value("name").toString() has problems.
The table is:
CREATE TABLEa(
idINT(11) NOT NULL AUTO_INCREMENT,
nameVARCHAR(50) NULL DEFAULT NULL,
descriptionVARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (id)
)with a few rows.
I'm compiling in windows with msvc2017 and also mingw, same results.
I'm using Qt 12.2.2 32 bits
I wrote this simple program to demostrate my problem.#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QVariant>int main(int argc, char *argv[])
{
// QCoreApplication a(argc, argv);QSqlDatabase db; db = QSqlDatabase::addDatabase("QMYSQL"); db.setDatabaseName("simple"); db.setHostName("127.0.0.1"); db.setPort(3306); db.setUserName("root"); db.setPassword("password"); db.open(); if(!db.isOpen()) { return 1; } QString sql, sql2; QSqlQuery query, query2; sql = "select * from a;"; if(!query.exec(sql)) { return 1; } while(query.next()) { // first time return the value, second time print unknown field name QString name = query.value("name").toString(); QString description = query.value("description").toString(); sql2 = "sql with error;"; if(!query2.exec(sql2)) { continue; } }// return a.exec();
} -
You example does not compile and where exactly happens the problem then? What SQL database do you use?
-
Hi and thank you in advance
I'm running in a while(query.next()) and QString name = query.value("name").toString() return the current value, but if another query fail inside the while loop the query.value("name").toString() has problems.
The table is:
CREATE TABLEa(
idINT(11) NOT NULL AUTO_INCREMENT,
nameVARCHAR(50) NULL DEFAULT NULL,
descriptionVARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (id)
)with a few rows.
I'm compiling in windows with msvc2017 and also mingw, same results.
I'm using Qt 12.2.2 32 bits
I wrote this simple program to demostrate my problem.#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QVariant>int main(int argc, char *argv[])
{
// QCoreApplication a(argc, argv);QSqlDatabase db; db = QSqlDatabase::addDatabase("QMYSQL"); db.setDatabaseName("simple"); db.setHostName("127.0.0.1"); db.setPort(3306); db.setUserName("root"); db.setPassword("password"); db.open(); if(!db.isOpen()) { return 1; } QString sql, sql2; QSqlQuery query, query2; sql = "select * from a;"; if(!query.exec(sql)) { return 1; } while(query.next()) { // first time return the value, second time print unknown field name QString name = query.value("name").toString(); QString description = query.value("description").toString(); sql2 = "sql with error;"; if(!query2.exec(sql2)) { continue; } }// return a.exec();
}@mmiacca
You have a "nested" secondQSqlQuery. I do not know if that is supposed to work, or maybe it depends on the driver --- I can imagine issues with this --- but https://stackoverflow.com/questions/42978239/qt-nested-qsqlquery-not-working reports the same as you. And got no solution.If you continue to have problems with this, the usual would be to let the first query exhaust all its
next()s so it is finished, save up what you need from it (name,description, whatever) into a vector/list/similar, and use that to generate the secondQSqlQuerys outside of that loop. Or, write a cleverer SQL statement (like aJOIN) to achieve whatever you are trying to get here. It's not great "form" to be trying to run a new query each time round another query.