c++ - QSqlQuery.record() 总是空的

标签 c++ sql qt

我正在以这种方式编辑数据库:

QSqlQuery query;

query.prepare("UPDATE student "
        "SET name = ? "
        "WHERE id = ?");

QString name = "t"; 
int id = 3;

query.addBindValue(name);
query.addBindValue(id);

query.exec(); // query exec returns true

QSqlRecord record = query.record(); // but the record is empty!
mTableModel->beforeInsert(record); 

检索到的记录总是空的,但是QSqlTableModel还是变了!我需要记录有效,因为我正在尝试将 sql 数据库与 std::vector 同步。

我正在像这样连接到数据库:

mDatabase = QSqlDatabase::addDatabase("QSQLITE");
mDatabase.setDatabaseName("database.db");
mDatabase.open();

我尝试调用 QSqlQuery::clear()QSqlQuery::finish() 但没有帮助。我也尝试打开和关闭数据库,但也无济于事。我能做些什么? :\

最佳答案

Qt 确实不是一种痛苦。

你所有的代码都很好。唯一错误的假设是更新请求会自动返回更新后的记录。您必须对此 id 发出新的选择请求,以获取 QSqlRecord 中的更新数据。

//[untested]
QSqlQuery select;
select.prepare("SELECT * from student where id = ?");
select.addBindValue(id);

if (select.exec() && select.next()) {
  QSqlRecord record = select.record();
}

关于c++ - QSqlQuery.record() 总是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20998117/

相关文章:

mysql - Laravel 4.2 日期范围内的多个查询

mysql - MySQL 中何时使用单引号、双引号和反引号

c++ - Qt qreal计算错误

c++ - 即使调用 InitializeGL() 也无法禁用旧的 OpenGL 灯光

c++ - 为什么 GCC 5.3.0 在绑定(bind)对 "this"指针的引用时会发出警告

c++ - 一个程序会分配多少栈内存

sql - 从 Oracle 字符串中删除特殊字符

c++ - 我们应该在 std 命名空间中使用 C 函数吗?

c++ - 在堆栈 C++ 的链表实现中跟踪堆栈大小

c++ - Qt 中的视频流