Qt SQLite no query or parameter count mismatch
在收到 2 个不同的错误之间进行权衡。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | void summary::on_pushButton_saveSummary_clicked() { if(db.open()) { query.exec("insert or replace into [PN:"+partNum+" CN:"+chargeNum+"](total, defects, rust) values(1, 2, 3)"); if (!query.exec()) { qDebug() << query.lastError(); qDebug() << query.exec()<<endl; } } else { qDebug() << db.lastError(); } } |
上面给出了错误:QSqlError(","Unable to fetch row","No query")
而:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | void summary::on_pushButton_saveSummary_clicked() { if(db.open()) { qDebug() <<"db open"; int a = 3; int b = 1; int c = 3; query.prepare("insert into [PN:"+partNum+" CN:"+chargeNum+"](total, defects, rust) values(:total, :defects, :rust)"); query.bindValue(":total", a); query.bindValue(":defects", b); query.bindValue(":rust", c); if (!query.exec()) { qDebug() << query.lastError(); qDebug() << query.exec()<<endl; } } else { qDebug() << db.lastError(); } } |
产量:QSqlError(","参数计数不匹配",")
构造函数有:
1 2 3 4 5 6 | db.setDatabaseName("/home/igraves/Databases/testdb"); db.open(); QString partNum ="134345"; QString chargeNum ="3452"; query.prepare("create table if not exists [PN:"+partNum+" CN:"+chargeNum+"](total int, defects int, rust int)"); query.exec(); |
正在创建表,我可以看到它。所以我猜语法?虽然它是 Qt wiki 写的......
编辑:
添加一些 .h 的东西
1 2 3 4 | QString partNum; QString chargeNum; QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); QSqlQuery query; |
答案:这是我的 QString 变量是临时的,在构造函数完成后,它们超出了范围。改变了我的 .h
1 2 | QString partNum ="124124"; QString chargeNum ="234234"; |
我至少看到以下错误:
- 您不设置数据库路径。
- 创建表时不要打开数据库。
- "134345" 和 "3452" 被分配给临时变量而不是类成员
考虑到上述情况,构造函数中必须有以下内容:
1 2 3 4 5 6 7 | partNum ="134345"; chargeNum ="3452"; db.setDatabaseName("/path/of/database.db"); if(db.open()) query.exec(QString("create table if not exists [PN:%1 CN:%2](total int, defects int, rust int)") .arg(partNum) .arg(chargeNum)); |