• 6026阅读
  • 2回复

提交数据库时函数model->submitAll()的用法问题?(急) [复制链接]

上一主题 下一主题
离线tongxueq
 

只看楼主 倒序阅读 楼主  发表于: 2012-03-23
我的model时这样设置的
m_model = new QSqlTableModel(this, m_database);m_model->setTable("xxxxxxxx");m_model->setSort(0, Qt::AscendingOrder);m_model->setEditStrategy(QSqlTableModel::OnManualSubmit);m_model->select();
用法是这样的if(m_model->submitAll() == true){    qDebug()<<"submit ok!";} else{    qDebug()<<"submit failed";}
返回结果是 submit ok, 但是重新打开数据,发现数据并没由改变, 还是原来的, 不知道哪里出了问题
离线kisscolo
只看该作者 1楼 发表于: 2012-03-27
sql model 和 一般的 model 是不一样的。两者的区别是,一般的model在你修改后回自动更新和他相关的view, 但是sql model 在你修改(如 INSERT, UPDATE, DELETE 操作)后,你必须显式的调用submitAll()后,才能更新数据库里面的数据。
人活着就是为了争口气!
离线stdjgwyc
只看该作者 2楼 发表于: 2012-03-29
QSqlTableModel本身存在几个问题的。

但你的这个问题,我觉得你可能得先查一下你所用的驱动,是不是与所连接的数据库版本一致,不一致有可能会导致未知情况发生。
按照你代码的情况,应该是能够提交成功的。

QSqlTableModel存在的问题有:
1、transaction提交的时候,如果第一条记成功,后面出错,则第一条记录会被提交,而并未真正回滚
2、上面情况发生的情况下,revertAll()导致展示出的数据,与数据库中实际数据不一致。

代码:
       model->database().transaction();
    if (model->submitAll())
    {
        model->database().commit();
        emit Committed();
        QMessageBox::information(this, tr("Cached Table"), "提交成功!");
    } else
    {
        model->database().rollback();
        QString error = QString("The database reported an error: %1").arg(model->lastError().text());
        QMessageBox::warning(this, tr("Cached Table"), error);
    }

加入QT群2906359共同讨论
QT交流群群号:2906359,(200人大群,持续升级)
快速回复
限100 字节
 
上一个 下一个