These errors also vary depending on which object I'm using (QSqlQueryModel or QSqlQuery ) and with a valid database. Here's the error I got with QSqlQueryModel:
[image: eedc5564-2783-45a6-b2a1-4151d6fbc9f1.gif]
To code is:
else{
QSqlQueryModel sqlQuery;
bool gotError = false;
db.transaction();
for (int i = 0; i < statements.size(); i++) {
auto trimmed = statements[i].trimmed();
if(trimmed.startsWith("--")) continue;
sqlQuery.setQuery(trimmed);
if(sqlQuery.query().isSelect()){
emit widget->logMessage("e,SELECT isn't allowed while executing multiple statements");
gotError = true;
break;
}
else if(sqlQuery.query().lastError().type() != QSqlError::NoError){
emit widget->logMessage("e," + sqlQuery.query().lastError().text());
gotError = true;
break;
}
}
...
}
so it's correct, NewTable exists. If I replace those code with these:
else{
bool gotError = false;
db.transaction();
for (int i = 0; i < statements.size(); i++) {
auto trimmed = statements[i].trimmed();
if(trimmed.startsWith("--")) continue;
sqlQuery.clear();
sqlQuery.prepare(trimmed);
sqlQuery.exec();
if(sqlQuery.isSelect()){
emit widget->logMessage("e,SELECT isn't allowed while executing multiple statements");
gotError = true;
break;
}
else if(sqlQuery.lastError().type() != QSqlError::NoError){
emit widget->logMessage("e," + sqlQuery.lastError().text());
gotError = true;
break;
}
}
...
}
where sqlQuery is a global QSqlQuery, I get this error:
[image: bda81e3f-6bf0-4b63-a7ee-e5815fd3b278.gif]
that's a misleading error I got! Am I doing something wrong or it's an issue with SQLite?
EDIT
Looks like QSqlQuery doesn't need to be executed to get error. I've to check error immediately after sqlQuery.prepare(trimmed); and if there's no error then I should call sqlQuery.exec(). In a nutshell, Qt executes the query, and figures out the error, before I call exec.