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::horizontal,QObject::tr("name"));
model->setHeaderData(1,Qt::horizontal,QObject::tr("スコア"));
ui->tableView->setModel(モデル);