Qt の QTableView コントロールは、単純な配置のために SQL を呼び出します

Qt の QTableView コントロールは、単純な配置のために SQL を呼び出します

1.パブリックメソッドを作成する

プライベート:    
  QSqlDatabase m_db;
1)データベースを打ちます
void SqlToolWnd::onInitDBConn()
{   
    m_db = QSqlDatabase::addDatabase("QSQLITE");
    m_db.setDatabaseName("sfclient.db");   
    if(!m_db.open())   
    {       
       qDebug() << "エラー: データベースに接続できませんでした。" << m_db.lastError(); 
    }
}

2. データベースを閉じる

void SqlToolWnd::ExitConn()
{   m_db.close(); }

3. データテーブルを作成する

void SqlToolWnd::on_createPushButton_clicked()
{     onInitDBConn();     QSqlQuery sql_query;     if(!sql_query.exec("create tablestudent(id int 主キー、名前テキスト、性別テキスト)"))     {         qDebug() << "エラー: テーブルの作成に失敗しました。"<< sql_query.lastError();     }     else     {         qDebug() << "テーブルが作成されました!";     ExitConn     (); }











4. データレコードを増やす

void SqlToolWnd::on_addPushButton_clicked()
{     onInitDBConn();     QSqlTableModel *model = 新しい QSqlTableModel(this);     model->setTable(QString::fromLocal8Bit("学生表"));     モデル->select();



    int row = モデル->rowCount();
    モデル->insertRows(row,1);
    モデル->setData(モデル->index(row,0), "1900010105003");
    モデル->setData(モデル->index( row,1),QString::fromLocal8Bit("劉備"));
    モデル->setData(モデル->index(row,2),QString::fromLocal8Bit("男性"));
    モデル->setData(モデル- >index(row,3), "1886-02-20");
    model->setData(model->index(row,4),QString::fromLocal8Bit("軍事応用部門"));
    model->setData(モデル->index(row,5),QString::fromLocal8Bit("軍事管理科学"));
    モデル->setData(モデル->index(row,6), "01");
    モデル->submitAll();

    ui->tableView->setModel(モデル);
    ExitConn();
}

5. データの削除

void SqlToolWnd::on_deletePushButton_clicked()
{     onInitDBConn();     QSqlTableModel *model = 新しい QSqlTableModel(this);     model->setTable(QString::fromLocal8Bit("学生表"));     SqlParamDlg paramDlg;     if(QDialog::Accepted == paramDlg.exec())     {         if(!paramDlg.m_param.isEmpty())         {             QString sParam = QString(QString::fromLocal8Bit("学生表.'学号'='%1' ")).arg(paramDlg.m_param);             qDebug()<<sParam;             モデル->setFilter(sParam);             モデル->select();             if(model->rowCount()==1)             {                 model->removeRows(0,1);















                モデル->submitAll();
            }
        }
        else
        {             QString sParam = QString::fromLocal8Bit("学生表.'性别'='男'");             qDebug()<<sParam;             モデル->setFilter(sParam);             モデル->select();             if(model->rowCount()>0)             {                 model->removeRows(0,model->rowCount());                 モデル->submitAll();             else         {     ExitConn     (         )     ;         戻る;     }















    ui->tableView->setModel(モデル);
    ExitConn();
}

6. データテーブルレコードを変更する

void SqlToolWnd::on_modifyPushButton_clicked()
{     onInitDBConn();     QSqlTableModel *model = 新しい QSqlTableModel(this);     model->setTable(QString::fromLocal8Bit("構成"));     SqlParamDlg paramDlg;     if(QDialog::Accepted == paramOption.exec())     {         if(!paramOption.m_param.isEmpty())         {             QString sParam = QString(QString::fromLocal8Bit("デフォルト設定。'location'='%1'; ")).arg(paramSelection. m_param);             qDebug()<<sParam;             モデル->setFilter(sParam);             モデル->select();             if(model->rowCount()==1)             {                 QSqlRecord レコード = モデル->レコード(0);















                Record.setValue(QString::fromLocal8Bit("名前"),QString::fromLocal8Bit("夏侯惇"));
                モデル->setRecord(0,record);
                モデル->submitAll();
            }
        }
    }
    else
    {         ExitConn( ) ;         戻る;     }


    ui->tableView->setModel(モデル);
    ExitConn();
}

7. データテーブルレコードのクエリ

void SqlToolWnd::on_SelectPushButton_clicked()
{    onInitDBConn();    QSqlTableModel *model = 新しい QSqlTableModel(this);    model->setTable(QString::fromLocal8Bit("学生表"));    SqlParamDlg paramDlg;    if(QDialog::Accepted == paramDlg.exec())    {        if(!paramDlg.m_param.isEmpty())        {            QString sParam = QString(QString::fromLocal8Bit("学生表.'姓名'='%1'" )).arg(paramDlg. m_param);            qDebug()<<sParam;            モデル->setFilter(sParam);        }        else        {            モデル->setFilter("");        }    }    それ以外の場合は    {



















       ExitConn();
       戻る;
   モデル-
   >select();
   ui->tableView->setModel(モデル);
   ExitConn();
}

説明: QTableView コントロールは、SQL インターフェイスへの便利なアクセスを提供します。この記事では、SQL の操作を容易にするさまざまなソリューションの 1 つを簡単に説明します。

解決策 1: QSqlQuery コンストラクターを使用してデータベースを操作する

QSqlQueryクエリ;
query.exec("給与 > 1000 の従業員から名前、給与を選択");
while (query.next())
{     QString Name = query.value(0).toString();     int 給与 = query.value(1).toInt();     qDebug() << 名前 << 給与; }



解決策 2: QSqlQuery を使用して、bindValue を準備する

QSqlQueryクエリ;
query.prepare("INSERT INTO 従業員 (id, 名前, 給与) " "VALUES (:id, :name, :salary)");
query.bindValue(":id", 10001);
query.bindValue(":name", "トム");
query.bindValue(":給与", 8500);
クエリ.exec();

解決策 3: QSqlQuery を使用して準備し、addBindValue

QSqlQueryクエリ;
query.prepare("INSERT INTO 従業員 (id, 名前, 給与) " "VALUES (:id, :name, :salary)");
query.addBindValue(10001);
query.addBindValue("トム");
query.addBindValue(8500);
クエリ.exec();

解決策 4: QSqlQueryModel と setQuery、setHeaderData 操作データ テーブル

QSqlQueryModel *model = 新しい QSqlQueryModel(ui->tableView);
model->setQuery("学生から * を選択");
model->setHeaderData(0,Qt::horizo​​ntal,QObject::tr("name"));
model->setHeaderData(1,Qt::horizo​​ntal,QObject::tr("スコア"));
ui->tableView->setModel(モデル);
 

 

おすすめ

転載: blog.csdn.net/leiyang2014/article/details/116572271