zoukankan      html  css  js  c++  java
  • Qt5笔记之数据库(五)SQL表格模型QSqlTableModel

    教程网址:http://www.qter.org/portal.php?mod=view&aid=57

    0.打开tablemodel.pro文件,加上:
    QT += coregui sql

    注意一定得是加上!若把原来那句改了,会报错

    1.添加头文件connection.h

    2.main.cpp文件中include connection.h,调用CreateConnection()方法

    3.完成后到mainwindow.h文件中,先包含头文件:

    include

    然后添加私有对象:
    QSqlTableModel *model;

    4.在tableEdit中显示数据库tablemodel,常放在mainwindow的构造函数中:

     model = new QSqlTableModel(this);
        model->setTable("student");   //选表
        model->setEditStrategy(QSqlTableModel::OnManualSubmit);  //选编辑策略
        model->select(); //选取整个表的所有行  相当于select all
    
        //不显示name属性列,如果这时添加记录,则该属性的值添加不上
        //model->removeColumn(1);
    
        ui->tableView->setModel(model);   //显示在tableView中
    
        //使其不可编辑
        //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    

    在mainwindow.cpp中加上如下内容,方便后面的增删改查

    include "QMessageBox"

    include "QSqlError"

    6.提交:model->database().transaction(); //开始事务操作
    if (model->submitAll()) {
    model->database().commit(); //提交
    } else {
    model->database().rollback(); //回滚
    QMessageBox::warning(this, tr("tableModel"),
    tr("数据库错误: %1")
    .arg(model->lastError().text()));
    }

    6.撤销(若未提交则可撤销所有更改)
    model->revertAll();

    7.添加:改善了原教程中的主键默认值

    int rowNum = model->rowCount(); //获得表的行数
    //人工递增主键id
    QSqlQuery query;
    query.exec("select max(id) from student");
    query.first() ;
    int id = query.value(0).toInt() + 1;
    //添加
    model->insertRow(rowNum); //添加一行
    model->setData(model->index(rowNum,0),id);
    //model->submitAll(); //可以直接提交

  • 相关阅读:
    夏季适合IT程序员的养生小妙招
    夏季适合IT程序员的养生小妙招
    JS实现分钟数和时间小时 格式的转换
    Linux入门基础(1)
    Linux入门基础(1)
    Linux入门基础(1)
    常见通信协议HTTP、TCP、UDP的简单介绍
    BMP彩色转成黑色二值图
    《暗时间》笔记
    L53-Maximum-Subarray
  • 原文地址:https://www.cnblogs.com/YuQiao0303/p/9709768.html
Copyright © 2011-2022 走看看