I tested your code on PostgreSQL using C++ and got correct results (I used a query that returns a single record, looks like you did the same). May be there is a bug in SqlLite driver or in PyQt4?
Test program
int main(int argc, char* argv[])
{
db.setDatabaseName("pm");
bool ok = db.open();
if(! ok) {
qDebug() << db.lastError().text();
return 1;
}
if(query.exec("select * from pm.portfolio where id = 1")) {
qDebug() << "is_active" << query.isActive();
qDebug() << "is_select" << query.isSelect();
qDebug() << "is_valid" << query.isValid();
qDebug() << "";
qDebug() << "seek:" << query.seek(0);
qDebug() << "is_valid" << query.isValid();
qDebug() << "";
qDebug() << "seek:" << query.seek(0);
qDebug() << "is_valid" << query.isValid();
qDebug() << "";
qDebug() << "next" << query.next();
qDebug() << "is_valid" << query.isValid();
qDebug() << "";
qDebug() << "seek:" << query.seek(0);
qDebug() << "is_valid" << query.isValid();
}
else {
qDebug() << query.lastError();
}
}
int main(int argc, char* argv[])
{
QCoreApplication app(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setDatabaseName("pm");
bool ok = db.open();
if(! ok) {
qDebug() << db.lastError().text();
return 1;
}
QSqlQuery query;
if(query.exec("select * from pm.portfolio where id = 1")) {
qDebug() << "is_active" << query.isActive();
qDebug() << "is_select" << query.isSelect();
qDebug() << "is_valid" << query.isValid();
qDebug() << "";
qDebug() << "seek:" << query.seek(0);
qDebug() << "is_valid" << query.isValid();
qDebug() << "";
qDebug() << "seek:" << query.seek(0);
qDebug() << "is_valid" << query.isValid();
qDebug() << "";
qDebug() << "next" << query.next();
qDebug() << "is_valid" << query.isValid();
qDebug() << "";
qDebug() << "seek:" << query.seek(0);
qDebug() << "is_valid" << query.isValid();
}
else {
qDebug() << query.lastError();
}
}
To copy to clipboard, switch view to plain text mode
Result
is_active true
is_select true
is_valid false
seek: true
is_valid true
seek: true
is_valid true
next false
is_valid false
seek: true
is_valid true
Bookmarks