将QComboBox中的文本保存到SQL表

问题描述 投票:0回答:1

我需要能够从组合框的内容更新Sql记录。我正在使用tableview来检索现有行并填充组合框和qlinedit。 当我改变组合框并尝试将其新状态写回数据库时,它们不会被保存。我在代码中看不到任何明显的问题,但是非常感谢任何帮助。

示例代码:

// used to edit current database row

 void Financelog::on_pushButton_Edit_clicked()
 {
 MainWindow conn;

 QString BANK_MNTH, BUSN_MNGR, NEW_USED, APP_APPR;

 BANK_MNTH=ui->txt_BANK_MNTH->text();
 BUSN_MNGR=ui->txt_BUSN_MNGR->text();  
 NEW_USED=ui->comboBox_newused->currentText();
 APP_APPR=ui->comboBox_approved->currentText();

 if(!conn.connOpen()){
    qDebug()<<"Failed to open database";
    return;
}

QSqlQuery qry;

qry.prepare("update STOCK set BANK_MNTH='"+BANK_MNTH+"',BUSN_MNGR='"+BUSN_MNGR+"',NEW_USED='"+NEW_USED+"',APP_APPR='"+APP_APPR+"'");
if(qry.exec( ))
 {
 QMessageBox::critical(this,tr("Update"),tr("Record Updated"));
 QSqlQueryModel * modal=new QSqlQueryModel();
 QSqlQuery* qry2=new QSqlQuery(conn.mydb);
 qry2->prepare("select top 100 DEAL_NUMB, BUSN_MNGR, BANK_MNTH, NEW_USED, APP_APPR");  
 qry2->exec();
 modal->setQuery(*qry2);
 ui->tableView->setModel(modal);
 foreach(QLineEdit *Financelog, this->findChildren<QLineEdit*>()) {
    Financelog->clear();
 }
 }
else
{
  QMessageBox::critical(this,tr("Error"),qry.lastError().text());
}
}


// pre-fills Qlinedits when double clicking on the tableview index

void Financelog::on_tableView_activated(const QModelIndex &index)
{
QString val=ui->tableView->model()->data(index).toString();

MainWindow conn;
if(!conn.connOpen())
{

    qDebug()<<"Failed to open database";
    return;
}
QSqlQuery qry;

qry.prepare("select top 100 DEAL_NUMB, BANK_MNTH, BUSN_MNGR, NEW_USED, APP_APPR from STOCK where DEAL_NUMB ='"+val+"'");

if(qry.exec( ))
{
    while(qry.next())
    {
        ui->txt_DEAL_NUMB->setText(qry.value(0).toString());
        ui->txt_BANK_MNTH->setText(qry.value(1).toString());
        ui->txt_BUSN_MNGR->setText(qry.value(2).toString());
        ui->comboBox_approved->setCurrentText(qry.value(25).toString());
        ui->comboBox_newused->setCurrentText(qry.value(28).toString());
    }      
}
else
{
  QMessageBox::critical(this,tr("Error::"),qry.lastError().text());
}
}
c++ sql qt
1个回答
0
投票

在好的情况下,您应该为表实现“委托”,这将在表格单元格中显示编辑器。这应该是QSyledItemDelegate类的子代。您将通过QSyledItemDelegate :: setModelData()方法将数据保存到DB。

© www.soinside.com 2019 - 2024. All rights reserved.