国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C/C++ Qt數據庫SqlRelationalTable關聯表詳解

C/C++ Qt數據庫SqlRelationalTable關聯表詳解

2022-03-11 13:29LyShark C/C++

這篇文章主要介紹了QT中SqlRelationalTable關聯表組件的使用,文中代碼對我們的學習和工作具有一定價值,感興趣的朋友可以了解一下

在上一篇博文中詳細介紹了SqlTableModle組件是如何使用的,本篇博文將介紹SqlRelationalTable關聯表組件,該組件其實是SqlTableModle組件的擴展類,SqlRelationalTable組件可以關聯某個主表中的外鍵,例如將主表中的某個字段與附加表中的特定字段相關聯起來,QSqlRelation(關聯表名,關聯ID,名稱)就是用來實現多表之間快速關聯的。

首先我們創建兩張表,一張Student表存儲學生名字以及學生課程號,另一張Departments存儲每個編號所對應的系所名稱,運行代碼完成創建。

void MainWindow::InitSQL()
{
  QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  db.setDatabaseName("./lyshark.db");
  if (!db.open())
         return;

  // 執行SQL創建表
  db.exec("DROP TABLE Student");
  db.exec("CREATE TABLE Student ("
                 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                 "name VARCHAR(40) NOT NULL, "
                 "departID INTEGER NOT NULL)"
          );

  // 逐條插入數據
  db.exec("INSERT INTO Student(name,departID) VALUES('zhangsan',10)");
  db.exec("INSERT INTO Student(name,departID) VALUES('lisi',20)");
  db.exec("INSERT INTO Student(name,departID) VALUES('wangwu',30)");
  db.exec("INSERT INTO Student(name,departID) VALUES('wangmazi',40)");

  db.exec("DROP TABLE Departments");
  db.exec("CREATE TABLE Departments("
          "departID INTEGER NOT NULL,"
          "department VARCHAR(40) NOT NULL)"
          );

  db.exec("INSERT INTO Departments(departID,department) VALUES (10,'數學學院')");
  db.exec("INSERT INTO Departments(departID,department) VALUES (20,'物理學院')");
  db.exec("INSERT INTO Departments(departID,department) VALUES (30,'計算機學院')");
  
  db.commit();
  db.close();
}

初始化后將得到兩張數據表,這兩張表通過departID相關聯,如下:

C/C++ Qt數據庫SqlRelationalTable關聯表詳解

創建完成后,我們在程序的構造函數直接實現綁定即可,這段代碼很簡單如下:

// https://www.cnblogs.com/lyshark
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
  ui->setupUi(this);
  InitSQL();

  // 打開數據庫
  QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  db.setDatabaseName("./lyshark.db");
  if (!db.open())
      return;

  this->setCentralWidget(ui->tableView);
  ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
  ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
  ui->tableView->setAlternatingRowColors(true);

  // 打開數據表
  tabModel=new QSqlRelationalTableModel(this,DB);
  tabModel->setTable("Student");                              // 設置數據表
  tabModel->setEditStrategy(QSqlTableModel::OnManualSubmit);  // OnManualSubmit
  tabModel->setSort(0,Qt::AscendingOrder);

  tabModel->setHeaderData(0,Qt::Horizontal,"學號");
  tabModel->setHeaderData(1,Qt::Horizontal,"姓名");
  tabModel->setHeaderData(2,Qt::Horizontal,"學院");

  // 設置代碼字段的查詢關系數據表
  // 打開Departments表,關聯ID和department
  tabModel->setRelation(2,QSqlRelation("Departments","departID","department"));
  theSelection=new QItemSelectionModel(tabModel);

  ui->tableView->setModel(tabModel);
  ui->tableView->setSelectionModel(theSelection);
  ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView)); // 為關系型字段設置缺省代理組件

  tabModel->select();                                                        // 打開數據表
}

MainWindow::~MainWindow()
{
  delete ui;
}

最終綁定效果如下圖:

C/C++ Qt數據庫SqlRelationalTable關聯表詳解

到此這篇關于C/C++ Qt數據庫SqlRelationalTable關聯表詳解的文章就介紹到這了,更多相關C++ Qt SqlRelationalTable關聯表內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/LyShark/p/15668393.html

延伸 · 閱讀

精彩推薦
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
主站蜘蛛池模板: 亚洲第1页 | 亚洲免费视频网 | 亚洲高清在线 | 国产成人一区 | 亚洲精品一区二区三区精华液 | 精品国产青草久久久久福利 | 国产午夜精品久久久久久久 | 国产精品日本一区二区不卡视频 | 色视频在线免费看 | 中文字幕在线观看一区二区三区 | a国产精品 | 在线色网 | 91精品啪aⅴ在线观看国产 | 欧美日韩国产精品 | 最近中文字幕 | 91麻豆产精品久久久久久 | 国产精品视频免费 | 久久综合区 | 国产麻豆一区二区三区 | 国产高清一级片 | 国产亚洲精品精品国产亚洲综合 | av不卡在线| 国产高清在线观看 | 日本不卡在线 | 中文字幕视频在线观看 | 亚洲综合影院 | 涩涩视频在线看 | 欧美午夜精品久久久久久浪潮 | 黄色毛片三级 | 欧美成人高清视频 | 欧美在线视频网站 | 中文字幕不卡在线观看 | 精品国产91亚洲一区二区三区www | 国产xxxx成人精品免费视频频 | 午夜av影院 | 久久久久久久久国产 | 超碰97人人干 | 成人精品在线视频 | 最近中文字幕免费观看 | 国产日韩欧美一区二区 | 亚洲人人射 |