Как мне вставить значения радиокнопок в базу данных SQLite с помощью Qt?

Я очень новичок в программировании.
Я хотел вставить значения моей радиокнопки в базу данных SQLite
но все еще не нашел правильный способ сделать это.
Программа состоит из 9 радиокнопок, то есть 1-3,4-5,6-7 и 8-9 в 4 разных группировках / макете.
Спасибо.

введите описание изображения здесь,

   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");

}
}

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 вместо переключателей. Используемые здесь методы (функции) одинаковы для переключателей и флажков.

0

По вопросам рекламы [email protected]