2016-12-07 8 views
0

저는 프로그래밍에 익숙하지 않습니다. 라디오 버튼의 값을 SQLite 데이터베이스 에 삽입하고 싶지만 여전히 올바른 방법을 찾지 못했습니다. 프로그램은 9 개의 라디오 버튼으로 구성되어 있으며, 이는 4 개의 다른 그룹/레이아웃에서 1-3,4-5,6-7과 8-9입니다. 감사합니다.Qt를 사용하여 SQLite 데이터베이스에 라디오 버튼 값을 삽입하려면 어떻게합니까?

enter image description here ,

void lifestyle::on_pushButton_3_clicked() 
    { 
     QSqlQuery myqry; 

     myqry.prepare("CREATE TABLE IF NOT EXISTS Lifestyle (Drinking VARCHAR(15), " 
        "Exercise VARCHAR(15), Smoking VARCHAR(10), Diet VARCHAR(10)) "); 
      if(!myqry.exec()) 
      qDebug()<<myqry.lastError(); 
     else 
      qDebug()<<"Table Created!"; 

     QString drinking= ui->radioButton_1->text(); 
     QString exercise = ui->radioButton_5->text(); 
     QString smoking = ui->radioButton_7->text(); 
     QString diet = ui->radioButton_8->text(); 

     myqry.prepare("INSERT INTO Lifestyle(Drinking, Exercise, Smoking, Diet) " 
        "values('"+drinking+"','"+exercise+"','"+smoking+"','"+diet+"')"); 

     if(myqry.exec()){ 
     ui->labelstat->setText("The information has been saved"); 

     } 
     else{ 
     ui->labelstat->setText("Information failed to saved"); 

    } 
    } 
+1

문제가 정확히 무엇인지 확실하지 않지만 준비된 쿼리를 사용하여 읽어야합니다. 이 특별한 사용 사례에서는 중요하지 않을 수 있지만 문자열 연결을 통해 SQL 쿼리를 작성하는 것은 좋지 않습니다. – MrEricSir

+0

해당 필드에 대해 데이터베이스에서 사용한 데이터 유형을 알려 주어야합니다. 그러나 MrEricSir은 귀하의 준비 진술에 대해 정확합니다. –

답변

0

것은 일부 사람들은 문제가 준비된 문에 나타나는 주석 것처럼. 쿼리에서 C++ 변수를 사용하지 않기 때문에 준비된 첫 번째 문은 준비된 문일 필요는 없습니다. 이와 같이 첫 번째 쿼리를 다시 작성하고 첫 번째 myqry.prepare를 생략하십시오.

if(!myqry.exec("CREATE TABLE IF NOT EXISTS Lifestyle (Drinking VARCHAR(15), " 
       "Exercise VARCHAR(15), Smoking VARCHAR(10), Diet VARCHAR(10)) ")) 

두 번째 쿼리는 준비된 문을 사용해야합니다. Qt는 준비된 명령문에 바인딩하기위한 몇 가지 방법을 지원합니다 (http://doc.qt.io/qt-5/qsqlquery.html 참조).

myqry.prepare("INSERT INTO Lifestyle(Drinking, Exercise, Smoking, Diet) " 
       "values(:drink,:exercise,:smoke,:diet)"); 
myqry.bindValue(":drink",drinking); 
myqry.bindValue(":exercise",exercise); 
myqry.bindValue(":smoke",smoking); 
myqry.bindValue(":diet",diet); 

그럼 당신은 myqry.exec 호출 할 수 있습니다()와 프로그램을 계속 : 내가 추천하는 방법은 다음과 같다.

0

선택한 라디오 버튼 만 원하는 경우 isChecked() 메소드를 사용하십시오.

QString drinking = ""; 
QString exercise = ""; 
QString smoking = ""; 
QString diet = ""; 

if (ui->radioButton_1->isChecked()) { 
    drinking = ui->radioButton_1->text(); 
} 

if (ui->radioButton_5->isChecked()) { 
    exercise = ui->radioButton_5->text(); 
} 

if (ui->radioButton_7->isChecked()) { 
    smoking = ui->radioButton_7->text(); 
} 

if (ui->radioButton_8->isChecked()) { 
    diet = ui->radioButton_8->text(); 
} 

myqry.prepare("INSERT INTO Lifestyle(Drinking, Exercise, Smoking, Diet) " 
       "values(:drink,:exercise,:smoke,:diet)"); 
myqry.bindValue(":drink",drinking); 
myqry.bindValue(":exercise",exercise); 
myqry.bindValue(":smoke",smoking); 
myqry.bindValue(":diet",diet); 
myqry.exec(); 

나는 당신의 응용 프로그램에 대해 잘 모르겠지만, 여러 라디오 버튼을 선택할 수있는 경우, 당신이 라디오 버튼 대신 QCheckBox를 사용하는 더 적합 할 수 있습니다. 여기에 사용 된 메서드 (함수)는 라디오 버튼과 확인란에 대해 동일합니다.