我正在使用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);否则会抛出错误。
问题是即使具有该用户添加的插入存在,它也会返回错误消息“学生不存在”。