计算查询大小以查看是否存在插入

时间:2017-06-23 10:25:00

标签: c++ qt qsqlquery

我正在使用qt创建者,我有一个包含表学生,课程和注册的数据库。

Student (name, lastname, semester, studentid) 
Lesson (name,lessonid)
Enroll (idofstudent,idoflesson,grade)

我希望用户可以选择为separete课程中的每个学生添加成绩,因此我创建了一些与Qbutton相关联的QlineEdits,其插入以注册学生的ID,课程的ID和他的成绩。< / p>

问题是我想检查qlineedit中的学生ID用户是否在我的数据库中。如果没有,插入不应该完成,因为没有任何学生具有该id。

创建数据库:

#include "database.h"
#include <QVariant>
#include <QDebug>
#include <QMessageBox>

Database::Database()
{
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("students.db");
    db.open();
    QSqlQuery q(db);
    q.exec(QString("DROP TABLE student;"));
    q.exec(QString("DROP TABLE lesson;"));
    q.exec(QString("DROP TABLE enroll;"));

    q.exec(QString("create table if not exists student(")+
                        QString("id integer primary key autoincrement,")+
                        QString("name varchar(1024),lastname varchar(1024),semester integer,")+
                        QString("studentid integer)"));

    q.exec(QString("create table if not exists lesson(")+
                        QString("id integer primary key autoincrement,")+
                        QString("lname varchar(1024),")+
                        QString("lessonid integer)"));

    q.exec(QString("create table if not exists enroll(")+
                        QString("id integer primary key autoincrement,")+
                        QString("idofstudent integer, idoflesson integer,")+
                        QString("grade double)"));
}

检查学生是否存在。在某种程度上,我认为这是错误,因为我真的不知道我是否正确计算sqlrows。

int  Database::studentexists(int sid)
{
 QSqlQuery query(db);
 query.exec("SELECT name FROM student where studentid="+QString::number(sid));
 int numRows;
 numRows = query.size();
 return numRows;
}

我的插入按钮:

void    MainWindow::addSlot3()
{

    if(studentidEdit->text().isEmpty() || lessonidEdit->text().isEmpty() || gradeEdit->text().isEmpty())
    {
        QMessageBox::critical(this,"Error","Empty fields");
        return;
    }


    if(mydb->studentexists(studentidEdit->text().toInt() == 0))
    {
        QMessageBox::critical(this,"Error","Student doesnt exist");
        return;
    }


    if(gradeEdit->text().toDouble() > 10)
    {
        QMessageBox::critical(this,"Error","Check Grade");
        return;
    }

    Enroll E(studentidEdit->text().toInt(),lessonidEdit->text().toInt(),gradeEdit->text().toDouble());
    mydb->insertEnroll(E);
}

我有这个mydb-&gt; studentexists(studentidEdit-&gt; text()。toInt()== 0)因为我认为如果studentexists找到一个id用户试图添加的字段,它应该返回“1”。因此,如果它的“1”函数继续使用mydb-&gt; insertEnroll(E);否则会抛出错误。

问题是即使具有该用户添加的插入存在,它也会返回错误消息“学生不存在”。

0 个答案:

没有答案