首页| 论坛| 消息

标题:在QTableView中修改不了QSqltablemodel绑定的mysql数据库内容
作者:simomli
日期:2020-01-04 20:09
内容:

用QTableView作为视图,QSqltablemodel作为模型,模型绑定的是mysql数据库表,在QTableView视图修改模型数据,不能修改mysql数据表的内容,如果模型绑定的是Sqlite数据,可以直接修改,这是为什么?
QSqlDatabasem_db = QSqlDatabase::addDatabase("QSQLITE");
m_db.setDatabaseName("E:/2020-01-02_3340112000000282env_12.db");
if(m_db.open()){
model = new QSqlTableModel(this,m_db);
model->setEditStrategy(QSqlTableModel::OnFieldChange);
model->setTable("batLog");
model->select();
}
ui->tableView->setModel(model);
//这样可以直接在tableview修改db的数据
QSqlDatabasem_db = QSqlDatabase::addDatabase("QMYSQL");
m_db.setHostName("127.0.0.1");
m_db.setDatabaseName("btkjdb");
m_db.setPort(3306);
m_db.setUserName("root");
m_db.setPassword("123456");
model = new QSqlTableModel(this);
model->setTable("station_compartment_status_t");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
ui->tableView->setModel(model);
void MainWindow::on_pushButton_clicked(){
model->database().transaction();
if(model->submitAll()){
qDebug()


#1 [liudianwu 01-05 09:25]
你写错了,还一句没写,你没有提交数据库事务。
model->database().transaction();
if (model->submitAll()) {
model->database().commit();
} else {
model->database().rollback();
}
#2 回 liudianwu 的帖子 [simomli 01-06 11:56]
liudianwu:你写错了,还一句没写,你没有提交数据库事务。
model->database().transaction();
if (model->submitAll()) {
    model->database().commit();      
} else {
....... (2020-01-05 09:25) 
恩,之前不能修改是因为mysql表的编码有问题,现在可以修改了。
另外,请教下,在QML里面用的是gridview作为视图,Qsqltablemodel作为模型,数据库还是用mysql,当在视图上修改了数据后,怎么设置到mysql,重新实现了,rolenames及setdata函数,比如:现在需要修改其中一个roles的值,在qml中,直接给对应的roles赋值,但是没写成功,
setEditStrategy(QSqlTableModel::OnFieldChange);
QHash ftsqltablemodel::roleNames() const
{
QHash roles;
for (int i = 0; i < this->record().count(); i ++) {
roles.insert(Qt::UserRole + i + 1, record().fieldName(i).toUtf8());
qDebug()

回复 发表
主题 版块