当前位置: 首页 > news >正文

南昌定制网站开发费用微信小商店官网入口

南昌定制网站开发费用,微信小商店官网入口,百度网站体检,招聘网站开发的背景关系数据库概念 例如下列departments、majors、studInfo 这 3 个数据表之间存在关系。 主键与外键 标记“**”的是主键字段#xff0c;标记“*”的是外键字段。主键字段是一个数据表中表示记录唯一性的字段#xff0c;例如 studInfo 数据表中的 studID 字段。外键字段是与其…关系数据库概念 例如下列departments、majors、studInfo 这 3 个数据表之间存在关系。 主键与外键 标记“**”的是主键字段标记“*”的是外键字段。主键字段是一个数据表中表示记录唯一性的字段例如 studInfo 数据表中的 studID 字段。外键字段是与其他数据表的主键存在关系的字段。 studInfo 数据表中的 departID 字段就是外键字段它与 departments 数据表中的 departID 字段存在关系。studInfo 数据表中的 departID 存储的是编码编码的含义需要查询departments 数据表中具有相同 departID 值的一条记录中的 department 字段才可知道。 编码与含义 studInfo 数据表中的 departID 和 majorID 字段一般称为编码字段departments 数据表和 majors 数据表一般称为编码表。编码表的一条记录有编码字段和编码含义字段例如 departments 数据表 中departID 是编码字段department 是编码含义字段。 在数据库设计中经常采用编码字段和编码表一是可以减少数据表存储的数据量例如在studInfo 数据表中不用存储每个学院的全名而只需存储学院的编码二是便于修改例如如果某个学院的名称改变了那么只需修改 departments 数据表中的一条记录。 主从关系 具有外键关联的两个数据表构成主从关系主表中的一条记录关联从表中的多条记录。例如 departments 数据表是主表studInfo 数据表是从表通过 departments 数据表中一条记录的departID值可以查询出 studInfo 数据表中的多条记录。在删除departments表中的某个学院后studInfo 表中隶属于该学院的记录也将会被删除。这种方式更新、修改删除都比较方便。 QSqlRelationalTableModel介绍 QSqlRelationalTableModel 是 QSqlTableModel 的子类它可以作为关系数据表的模型类。 创建对象和设置数据表 QSqlRelationalTableModel 只有一种构造函数其函数原型定义如下 QSqlRelationalTableModel(QObject *parent nullptr, const QSqlDatabase dbQSqlDatabase()) 在创建 QSqlRelationalTableModel 对象时如果不指定参数 db 的值就使用应用程序默认的 数据库连接。 创建数据库连接后用函数 setTable()设置数据表 tabModel new QSqlRelationalTableModel(this); tabModel-setTable(studInfo); //设置数据表 设置外键关系 关键函数是 setRelation()该函数原型定义如下 void QSqlRelationalTableModel::setRelation(int column, const QSqlRelation relation) 其中参数 column 是外键字段的字段序号例如 studInfo 数据表中 departID 字段的序号是 3参 数 relation 是一个 QSqlRelation 类型的变量用于表示外键字段关联的编码表、编码字段、编含义字段等信息。 QSqlRelation 类的构造函数原型定义如下 QSqlRelation(const QString tableName, const QString indexColumn, const QString displayColumn) 其中tableName 是编码表名称indexColumn 是外键字段名称displayColumn 是编码表中代码含义字段的名称。 当使用函数 setRelation()为一个外键字段设置关系时QSqlRelationalTableModel 内部实际上会创建一个 QSqlTableModel 对象作为编码表的数据模型。 示例程序解读 设置数据表关系 在打开数据表时创建一个QSqlRelationalTableModel并连接到DB数据库设置模型的数据表为studInfo编辑策略为OnManualSubmit需要手动调用submitAll来更新到数据库。 void MainWindow::on_actOpenDB_triggered() {QString aFileQFileDialog::getOpenFileName(this,选择文件,,SQLite数据库(*.db3));if (aFile.isEmpty())return;//打开数据库DBQSqlDatabase::addDatabase(QSQLITE); //添加SQLITE数据库驱动DB.setDatabaseName(aFile); //设置数据库名称// DB.setHostName();// DB.setUserName();// DB.setPassword();if (DB.open())openTable(); //打开数据表elseQMessageBox::warning(this, 错误, 打开数据库失败); }//打开数据表 void MainWindow::openTable() {tabModelnew QSqlRelationalTableModel(this,DB);tabModel-setTable(studInfo); //设置数据表tabModel-setEditStrategy(QSqlTableModel::OnManualSubmit); //编辑策略tabModel-setSort(tabModel-fieldIndex(studID),Qt::AscendingOrder);selModelnew QItemSelectionModel(tabModel,this); //创建选择模型connect(selModel,QItemSelectionModel::currentChanged,this, MainWindow::do_currentChanged); // connect(selModel,SIGNAL(currentChanged(QModelIndex,QModelIndex)), // this,SLOT(do_currentChanged(QModelIndex,QModelIndex)));ui-tableView-setModel(tabModel);ui-tableView-setSelectionModel(selModel);tabModel-setHeaderData(tabModel-fieldIndex(studID), Qt::Horizontal, 学号);tabModel-setHeaderData(tabModel-fieldIndex(name), Qt::Horizontal, 姓名);tabModel-setHeaderData(tabModel-fieldIndex(gender), Qt::Horizontal, 性别);tabModel-setHeaderData(tabModel-fieldIndex(departID),Qt::Horizontal, 学院);tabModel-setHeaderData(tabModel-fieldIndex(majorID), Qt::Horizontal, 专业);//设置代码字段的关系tabModel-setRelation(tabModel-fieldIndex(departID),QSqlRelation(departments,departID,department)); //学院tabModel-setRelation(tabModel-fieldIndex(majorID),QSqlRelation(majors,majorID,major)); //专业ui-tableView-setItemDelegate(new QSqlRelationalDelegate(ui-tableView)); //为关系型字段设置默认代理组件 // ui-tableView-setItemDelegateForColumn(tabModel-fieldIndex(departID), // new QSqlRelationalDelegate(ui-tableView)); //为关系型字段设置缺省代理组件// ui-tableView-setItemDelegateForColumn(tabModel-fieldIndex(majorID),// new QSqlRelationalDelegate(ui-tableView)); //为关系型字段设置缺省代理组件tabModel-select(); //查询数据表的数据ui-actOpenDB-setEnabled(false);ui-actRecAppend-setEnabled(true);ui-actRecInsert-setEnabled(true);ui-actRecDelete-setEnabled(true);ui-actFields-setEnabled(true); } 示例代码中有两个点比较关键 1、设置外键字段的关系 tabModel-setRelation(tabModel-fieldIndex(departID),QSqlRelation(departments,departID,department)); //学院tabModel-setRelation(tabModel-fieldIndex(majorID),QSqlRelation(majors,majorID,major)); //专业将studInfo数据表中departID外键字段设置为另一个编码表departments对应的字段并设置字段的含义为编码表中department字段。这样在显示studInfo表中departID时会自动映射到departments编码表中的department字段。 2、设置代理组件 ui-tableView-setItemDelegate(new QSqlRelationalDelegate(ui-tableView)); 设置后假设在 tableView 中编辑“学院”和“专业”两个字段的数据时就会出现一个下拉列表框 下拉列表内容就是编码表中编码含义字段的所有记录的数据。 添加插入删除记录 这个不用多讲可查看往期博客 void MainWindow::on_actRecAppend_triggered() {//添加记录tabModel-insertRow(tabModel-rowCount(),QModelIndex()); //在末尾添加一行QModelIndex curIndextabModel-index(tabModel-rowCount()-1,1);selModel-clearSelection(); //清空选择项selModel-setCurrentIndex(curIndex,QItemSelectionModel::Select); //设置当前行 }void MainWindow::on_actRecInsert_triggered() {//插入记录QModelIndex curIndexui-tableView-currentIndex(); //当前行的模型索引tabModel-insertRow(curIndex.row(),QModelIndex());selModel-clearSelection();selModel-setCurrentIndex(curIndex,QItemSelectionModel::Select); }void MainWindow::on_actRecDelete_triggered() {//删除当前行tabModel-removeRow(selModel-currentIndex().row());tabModel-submitAll(); //立即提交修改 } 保存和取消 在打开连接数据库后设置的OnManualSubmit因此界面的改变想要更新到数据库需要手动调用submitAll()或者revertAll()来保存或撤销。submitAll()将界面的更改更新到数据库中revertAll()将界面的更改撤销也就是重新读取之前数据库中的数据还原界面组件的显示。 void MainWindow::on_actSubmit_triggered() {//保存修改bool restabModel-submitAll();if (!res)QMessageBox::information(this, 消息, 数据保存错误,错误信息\ntabModel-lastError().text());else{ui-actSubmit-setEnabled(false);ui-actRevert-setEnabled(false);} }void MainWindow::on_actRevert_triggered() {//取消修改tabModel-revertAll();ui-actSubmit-setEnabled(false);ui-actRevert-setEnabled(false); }
http://www.w-s-a.com/news/69153/

相关文章:

  • 深圳网站建设费用找人做的网站怎么看ftp
  • 做网站cookie传值dedecms网站后台
  • 温州网站推广网站建设要学会什么
  • c 网站开发框架品牌策划方案范文
  • 儿童摄影作品网站多元网络兰州网站建设
  • 电脑上不了建设厅网站常德网站建设费用
  • 做单页免费模板网站最新办公室装修风格效果图
  • 中国铁路建设投资公司网站熊学军想开网站建设公司
  • 优化一个网站多少钱网站开发北京
  • html教学关键词优化价格
  • 黄冈论坛网站有哪些给wordpress首页添加公告栏
  • 初中做数学题的网站做淘宝必备网站
  • 买拆车件上什么网站谁有那种手机网站
  • 一家专做有机蔬菜的网站万户网络是干嘛的
  • 十堰百度网站建设八宝山做网站公司
  • 地区电商网站系统建筑施工图纸培训班
  • 网站外包维护一年多少钱医院网站 功能
  • 电子商务市场的发展前景seo推广平台服务
  • 乐清网页设计公司哪家好seo推广任务小结
  • 360建筑网是什么pc优化工具
  • 越秀免费网站建设风景区网站建设项目建设可行性
  • 网站建站公司一站式服务学校网站开发招标
  • asp.net mvc 5 网站开发之美电商网站 流程图
  • 室内设计素材网站推荐郑州专业做淘宝网站建设
  • 新建的网站怎么做seo优化模板规格尺寸及价格
  • 平湖网站设计做电子元器件销售什么网站好
  • 可视化网站模板我想建个网站网站怎么建域名
  • 达州网站建设qinsanw南京市建设发展集团有限公司网站
  • django 网站开发实例公司排行榜
  • 韩国做美食网站阳江网站建设 公司价格