我是使用qt的新手,我没有找到一种方法来检索我只知道字段(例如电子邮件)的某些元素的行。
我有一个模型(QSqlTableModel),我想通过电子邮件“a@gmail.com”知道表“person”中记录的哪一行。 QSqlQuery没有返回一行,我该如何实现呢?
QSqlQuery query;
query.exec(QString("SELECT * FROM person WHERE email = \"%1\";").arg("a@gmail.com"));
// the query.exec not return rows, but i need to know the row to edit some (not selectable) item, using QSqlTableModel::setRecord(int row, ...) for example.
答案 0 :(得分:0)
来自docs。
QSqlQuery一次提供对一个记录的结果集的访问。 在调用exec()之后,QSqlQuery的内部指针位于一个 在第一条记录之前的位置。我们必须调用QSqlQuery :: next()一次 前进到第一个记录,然后next()再次反复访问 其他记录,直到它返回false。这是一个典型的循环 按顺序迭代所有记录:
.leftfloat {
float: none;
}
@media screen and (min-width: 420px) {
.leftfloat {
float: left;
}
}
请注意QSqlQuery::value采用字段索引。 这些字段使用SELECT语句的文本从左到右编号。
在您的情况下,字段将按照创建它们的顺序排序,因为您使用while (query.next()) {
QString name = query.value(0).toString();
int salary = query.value(1).toInt();
qDebug() << name << salary;
}
返回行的所有元素。
答案 1 :(得分:0)
可以使用不同的方法:
扫描并测试整个表上的数据,如下所示:
None => panic!()
通过QSortFilterProxyModel过滤数据字符串:
int getRowWithEmail(QSqlTableModel& table, const QString & email)
{
int col = table.fieldIndex("email");
for(int row=0; row<table; ++row)
{
const QString & str = table.data(table.index(row,col)).toString();
if(str == email)
return row;
}
return -1;
}