0

我一直在用 Qt 编写程序,最近遇到了这两个问题。问题 1:我有一个包含 1 个表和 4 个列(id、easy、medium、hard)的 sqlite 数据库。所有整数。所以我想检查 id 是否存在并想出了这个代码:

    QSqlQuery queryCheck(db);
    queryCheck.prepare("SELECT EXISTS(SELECT 1 FROM players WHERE id=':id' LIMIT 1)");
    queryCheck.bindValue(":id", c.getId());

但是当我跑步时

    if(queryCheck.exec())

我总是说实话。

问题 2:我创建并填充了数字,

QVector<QVector<int>> gridBoxUnsolved(9);
for(int outer=0; outer<gridBoxUnsolved.size(); ++outer)
    gridBoxUnsolved[outer].resize(9);

我想将一些值随机更改为 0。我想过每个“内部”QVector 将 1 个随机值更改为 0。所以我想出了这个代码:

int iRand;
qsrand(time(NULL));
for (int i=0;i<9;i++){
    iRand = (qrand()%9)+1;
    gridBoxUnsolved[i][iRand]=0;
}

但是,有时 Qt 工作正常,但大多数时候会崩溃并返回:QVector::operator[] 中的 ASSERT 失败:“索引超出范围”,文件 /opt/Qt/5.8/gcc_64/include/QtCore/qvector。 h, line 437 程序意外结束。

4

2 回答 2

0

试试这个:

QSqlQuery queryCheck(db);
queryCheck.prepare("SELECT 1 FROM players WHERE id=':id' ");
queryCheck.bindValue(":id", c.getId());

if(queryCheck.exec() && queryCheck.first()) // you found your guy

第二个问题 - 删除 +1

iRand = (qrand()%9)+1;

qrand()%9会给你一个从 0 到 8 的数字,这就是你想要的。

于 2017-03-27T10:06:37.740 回答
0

所以我找到了解决问题的方法。

QSqlQuery query(db);
query.prepare("SELECT COUNT(*) AS N FROM table WHERE id=:id ");

然后你这样做来检查:

query.exec();
query.next();
int N=query.value(0).toInt();
if(N) {
    // You found the record
}
于 2017-03-28T13:51:03.263 回答