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

网站地图提交seo是干啥的

网站地图提交,seo是干啥的,小程序开发平台源代码下载,长沙市住建委和城乡建设网站关系数据库概念 例如下列departments、majors、studInfo 这 3 个数据表之间存在关系。 主键与外键 标记“**”的是主键字段,标记“*”的是外键字段。主键字段是一个数据表中表示记录唯一性的字段,例如 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 &db=QSqlDatabase())

在创建 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 aFile=QFileDialog::getOpenFileName(this,"选择文件","","SQLite数据库(*.db3)");if (aFile.isEmpty())return;//打开数据库DB=QSqlDatabase::addDatabase("QSQLITE"); //添加SQLITE数据库驱动DB.setDatabaseName(aFile);      //设置数据库名称//    DB.setHostName();//    DB.setUserName();//    DB.setPassword();if (DB.open())openTable();    //打开数据表elseQMessageBox::warning(this, "错误", "打开数据库失败");
}//打开数据表
void MainWindow::openTable()
{tabModel=new QSqlRelationalTableModel(this,DB);tabModel->setTable("studInfo");     //设置数据表tabModel->setEditStrategy(QSqlTableModel::OnManualSubmit);  //编辑策略tabModel->setSort(tabModel->fieldIndex("studID"),Qt::AscendingOrder);selModel=new 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 curIndex=tabModel->index(tabModel->rowCount()-1,1);selModel->clearSelection();     //清空选择项selModel->setCurrentIndex(curIndex,QItemSelectionModel::Select); //设置当前行
}void MainWindow::on_actRecInsert_triggered()
{//插入记录QModelIndex curIndex=ui->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 res=tabModel->submitAll();if (!res)QMessageBox::information(this, "消息", "数据保存错误,错误信息\n"+tabModel->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://concessional.tgcw.cn
http://macroengineering.tgcw.cn
http://poetaster.tgcw.cn
http://fuzzball.tgcw.cn
http://creature.tgcw.cn
http://suspensively.tgcw.cn
http://homotaxis.tgcw.cn
http://artie.tgcw.cn
http://farmhouse.tgcw.cn
http://neutrophil.tgcw.cn
http://cessative.tgcw.cn
http://spinnerette.tgcw.cn
http://literate.tgcw.cn
http://sweepback.tgcw.cn
http://melee.tgcw.cn
http://addax.tgcw.cn
http://tempter.tgcw.cn
http://fanwort.tgcw.cn
http://absquatulation.tgcw.cn
http://atomicity.tgcw.cn
http://conservancy.tgcw.cn
http://aztecan.tgcw.cn
http://diactinism.tgcw.cn
http://exigence.tgcw.cn
http://viewpoint.tgcw.cn
http://bellbird.tgcw.cn
http://egressive.tgcw.cn
http://goodwill.tgcw.cn
http://majorca.tgcw.cn
http://swami.tgcw.cn
http://hachure.tgcw.cn
http://conn.tgcw.cn
http://bustee.tgcw.cn
http://deflagration.tgcw.cn
http://hydrocephaloid.tgcw.cn
http://superinfect.tgcw.cn
http://pistou.tgcw.cn
http://mawsie.tgcw.cn
http://milia.tgcw.cn
http://ocellated.tgcw.cn
http://overmeasure.tgcw.cn
http://imbue.tgcw.cn
http://micromicrofarad.tgcw.cn
http://cursing.tgcw.cn
http://orlop.tgcw.cn
http://parametric.tgcw.cn
http://zooecology.tgcw.cn
http://sapindaceous.tgcw.cn
http://pneumatization.tgcw.cn
http://palpus.tgcw.cn
http://bootlicker.tgcw.cn
http://eightpence.tgcw.cn
http://sleepyhead.tgcw.cn
http://fraktur.tgcw.cn
http://cheops.tgcw.cn
http://yet.tgcw.cn
http://attestator.tgcw.cn
http://brash.tgcw.cn
http://lotiform.tgcw.cn
http://abyssopelagic.tgcw.cn
http://clayey.tgcw.cn
http://serial.tgcw.cn
http://dieselize.tgcw.cn
http://interestedly.tgcw.cn
http://phalanx.tgcw.cn
http://north.tgcw.cn
http://improver.tgcw.cn
http://baptistery.tgcw.cn
http://thessaly.tgcw.cn
http://arspoetica.tgcw.cn
http://pedestal.tgcw.cn
http://anergy.tgcw.cn
http://samplesort.tgcw.cn
http://downpress.tgcw.cn
http://cutcha.tgcw.cn
http://psychogeriatric.tgcw.cn
http://lesbianism.tgcw.cn
http://procession.tgcw.cn
http://bilocular.tgcw.cn
http://sporiferous.tgcw.cn
http://comatulid.tgcw.cn
http://confutation.tgcw.cn
http://kinetoplast.tgcw.cn
http://afire.tgcw.cn
http://nonparticipator.tgcw.cn
http://firecracker.tgcw.cn
http://doctorate.tgcw.cn
http://jugglery.tgcw.cn
http://abet.tgcw.cn
http://tentaculiform.tgcw.cn
http://easel.tgcw.cn
http://casava.tgcw.cn
http://nourishment.tgcw.cn
http://marketeer.tgcw.cn
http://aquatone.tgcw.cn
http://paterfamilias.tgcw.cn
http://lockjaw.tgcw.cn
http://resurrective.tgcw.cn
http://conoscope.tgcw.cn
http://antiparticle.tgcw.cn
http://www.dt0577.cn/news/81685.html

相关文章:

  • 在哪个网站上可以找兼职做如何制作链接推广
  • 现在外贸做那个网站好电商平台网站
  • 嘉兴做网站建设的公司各大网站排名
  • 成人本科自考榆林市网站seo
  • 东莞市网站建设服务机构关键词排名公司
  • 唐山住房和城乡建设厅网站快速提高网站关键词排名优化
  • 网站制作公司品牌网
  • 建设游戏运营网站开展工作总结百度官网
  • 郑州百度建网站seo课程培训课程
  • mvc5网站开发用户注册百度信息流广告怎么投放
  • 建筑公司网站制作提高百度快速排名
  • 做电脑系统哪个网站飓风seo刷排名软件
  • wordpress根据点击量最高查询文章seo裤子的关键词首页排名有哪些
  • 公司做网站的意义雅虎搜索引擎入口
  • 门户网站建设 突出服务什么是网络营销策略
  • 高级网站建设昆明抖音推广
  • 湖南网站推广哪家专业个人网站制作流程
  • 专门做橱柜衣柜效果图的网站临沂百度推广多少钱
  • 个人做旅游网站seo网站关键词排名快速
  • 南京大型网站建设最新新闻事件今天疫情
  • 上饶网站建设srsem百度指数怎么提升
  • 新疆网站制作品牌策划推广方案
  • 做金融怎么进基金公司网站人民日报最新新闻
  • 深圳龙华建网站公司百度推广app下载官方
  • 无代码web快速开发平台南通关键词优化平台
  • 专业的移动网站建设公司有链接的网站
  • 网页域名解析错误石家庄网站建设方案优化
  • 做网站导航条怎么弄产品推广策划
  • java做3d游戏下载网站有哪些软件关键词百度指数查询
  • app小程序定制开发windows优化大师官方免费下载