2017-12-18 9 views
0

콤보 상자의 내용에서 SQL 레코드를 업데이트 할 수 있어야합니다. 테이블 뷰를 사용하여 기존 행을 검색하고 콤보 박스 및 qlinedit을 채 웁니다.
콤보 박스를 변경하고 새 상태를 다시 데이터베이스에 쓰려고하면 저장되지 않습니다. 코드에서 명백한 문제는 볼 수 없지만 도움이된다면 크게 감사하겠습니다.QComboBox에 텍스트를 SQL 테이블에 저장

예제 코드 : 당신이 테이블에 대한 당신의 "위임"을 구현해야 좋은 경우

// 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()); 
} 
} 
+0

"qry.bindValue ("app ", APP_APPR = ui-> comboBox_approved-> currentText());" 하지만 같은 문제가 지속됩니다 ... – FrostK

+0

아주 이상한 코드입니다. UI 레이아웃을 보여줄 수 있습니까? 그 표가 어떻게 보이는지. 그리고 당신의 콤보 박스. – stanislav888

+0

죄송합니다, 내가 제공 한 코드를 예를 들어, 일부 누락 된 같은 이상한 같은 id = ' "+ id +"SQL 쿼리의 끝에 잘라 및 qry.value() 않는 순차 번호. 아직도, 콤보 박스의 내용이 QString 변수에 정확하게 저장되지 않는 이유는 무엇입니까? – FrostK

답변

0

, 테이블 셀에서 편집기를 표시합니다. 이것은 QSyledItemDelegate 클래스의 자식이어야합니다. QSyledItemDelegate :: setModelData() 메소드를 통해 DB에 데이터를 저장합니다.

+0

이 접근법은 어려울 것입니다. 그러나 그것을 한 번 이해할 때. 표 셀에 무엇이든 표시 할 수 있습니다. – stanislav888