为什么当query.isSelected()
和query.isActive()
返回true时,query.next()
返回false。列号和EventNote
索引的数据是正确的。
这是代码:
QVector<QString> DataBase::GetEventNote(int eventId)
{
QSqlQuery query;
query.prepare("SELECT * FROM Events WHERE idEvent=(?)");
query.addBindValue("eventId");
if(!query.exec()) // -> returns true
{
QMessageBox mb;
mb.setText(query.lastError().text());
mb.setWindowIcon(QIcon("icon.png"));
mb.exec();
}
QVector<QString> debug1;
bool v = query.isValid(); // -> returns false
bool s = query.isSelect(); // -> returns true
bool a = query.isActive(); // -> returns true
bool b = query.first(); // -> returns false
bool l = query.last(); // -> returns false
bool p = query.previous(); // -> returns false
QSqlRecord sr = query.record();
int brsr = sr.count(); // -> returns correct number of columns
QString str = query.lastQuery();
const QSqlResult *r =query.result();
int nameCol = sr.indexOf("EventNote"); // index of the field "EventNote" is correct (index 5)
while (query.next()) // -> returns false
{
QString debug2 = query.value(nameCol).toString(); // output all EventNote
debug1.push_back(debug2);
}
return debug1;
}
您的数据库似乎有问题。
bool QSqlQuery::isValid () const
如果查询当前位于有效记录上,则返回 true;否则返回 false。
这是由于以下事实强制执行的:
query.first()
query.last()
检索结果中的最后一条记录(如果可用),并将查询定位在检索到的记录上。{...]如果成功,则返回 true。如果不成功,查询位置将设置为无效位置,并返回 false。
因此,通过调用这些方法,您实际上是在结果中移动迭代器(无论如何,它们都不是有效记录),与 query.previous() 相同。