2012-11-17 1 views
0

필자는 제품 목록 (I.E. Make, Model, Year Search)에 동적 맞춤 또는 카테고리 옵션 목록을 구현하는 방법을 배우려고 노력하고있는 빠른 응용 프로그램을 만들었습니다. 나는 이것을하는 간단한 방법을 찾았다 고 생각했지만, 생각보다 어려웠다. 나는 fitment 옵션에 동적으로 필요한 콤보 상자를 만들었지 만, fitment 그룹의 ID를 가져와 'where 절'의 일부로 새 쿼리에서 사용하는 방법을 알아낼 수 없습니다. qt에서 mssql db에 대한 쿼리 내에서 변수를 int로 사용하는 가장 좋은 방법은 무엇입니까?qt를 사용하여 mssql db에 대한 쿼리 내에서 변수를 int로 사용하는 방법은 무엇입니까?

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

#include <QtCore> 
#include <QtGui> 
#include <QtSql> 

MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::MainWindow) 
{ 
ui->setupUi(this); 
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); 
db.setHostName("ROBERT-PC"); 
db.setDatabaseName("mydsn32"); 

if(!db.open()) 
{ 
    qDebug() << "Could Not Open"; 
} 
else 
{ 
    QVBoxLayout *vbox = new QVBoxLayout(); 

    qDebug() << "Open, and now closing"; 
    QSqlQuery qry; 

    if(qry.exec("SELECT * FROM [BOBs].[dbo].[FitmentTagGroup]")) 
    { 
     qDebug() << "Query Was Opened"; 
     while(qry.next()) 
     { 
      QString combBoxName = qry.value(1).toString() + "CombBox"; 
      int combBoxID = qry.value(0).toInt(); 
      QLabel *combBoxNameLbl = new QLabel(); 
      combBoxNameLbl->setText(combBoxName); 
      QComboBox *combBox = new QComboBox(); 
      QSqlQuery qry2; 
      if(qry2.exec("SELECT * FROM [BOBs].[dbo].[FitmentTag] WHERE FitmentTagGroupID='1'")) 
      { 
       while(qry2.next()) 
       { 
        qDebug() << qry2.value(2).toString(); 
       } 
      } 
      else 
      { 
       qDebug() << "Query Could Not Open\n\t" << qry2.lastError(); 
      } 
      vbox->addWidget(combBoxNameLbl); 
      vbox->addWidget(combBox); 
     } 
    } 
    else 
    { 
     qDebug() << "Query Could Not Open\n\t" << qry.lastError(); 
    } 

    model = new QSqlQueryModel(); 

    db.close(); 

    QFrame *mainFrame = new QFrame(); 
    mainFrame->setLayout(vbox); 
    setCentralWidget(mainFrame); 
} 

}

답변

1

당신은 당신의 문제를 해결하기 위해 준비된 문 및 바인딩 값을 사용해야합니다. 대신이 같은 것을 사용해야합니다

qry2.exec(
    "SELECT * " 
    "FROM [BOBs].[dbo].[FitmentTag] " 
    "WHERE FitmentTagGroupID = '1' " 
); 

를 사용

:

qry2.prepare(
    "SELECT * " 
    "FROM [BOBs].[dbo].[FitmentTag] " 
    "WHERE FitmentTagGroupID = :groupid " 
); 
qry2.bindValue(":groupid", groupId); 
qty2.exec(); 

here 자세히 알아보십시오.

+0

큰 도움과 감사합니다! 나는 가치를 묶어야한다고 생각했지만 실제로 그것을 이해할 수는 없었다. 어디에서 값을 삽입 문에 바인딩 된 경우에만 예제를 찾을 수 있지만 2 & 2 함께 넣어합니다; 다시 한 번 감사드립니다! – Rob

+0

나는 그것이 당신을 위해 일해서 다행이다. SQL을 올바르게 포맷하면 큰 차이가 있음에 유의하십시오. – mvp

관련 문제