2017-06-21 32 views
0

我有一个名为学生的数据库,有4个字段(名称,姓氏,学期和studentid)。试图从QT表上的数据库中删除

我有一个连接的应用程序,让用户插入数据库中的学生有一个选项,可以在插入后在表格上显示他们。

表中有一个DELETE按钮,用于每个插入学生,我已经连接到单独的函数让用户可以根据学生单独删除学生。

问题是,我似乎做错了,因为删除按钮不起作用,当它点击。我没有得到任何的错误,所以我需要你的帮助来发现错误。

数据库创建的代码:

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

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

从数据库中database.cpp称为

void Database::deleteStudent(int id) 
{ 
    QSqlQuery query(db); 
    query.exec("DELETE student where studentid="+QString::number(id)); 
} 

MainWindow.cpp

删除

//创建插入的表列表

void MainWindow::makeDisplayForm() 
    { 
     QWidget *tab2=new QWidget; 
     panel->addWidget(tab2); 
     tab2->setFixedSize(95*this->size().width()/100,this->size().height()/2); 
     QVBoxLayout *tab2layout=new QVBoxLayout; 
     tab2->setLayout(tab2layout); 
     table=new QTableWidget; 
     table->setRowCount(1); 
     table->setColumnCount(5); 
     QStringList header; 
     header<<"NAME"<<"LASTNAME"<<"SEMESTER"<<"ID"<<"DELETE"; 
     table->setHorizontalHeaderLabels(header); 
     tab2layout->addWidget(table); 
    } 

void MainWindow::reloadTable() 
{ 
    QVector<Student> p=mydb->students(); 
    table->clearContents(); 
    table->setRowCount(p.size()); 
    for(int i=0;i<p.size();i++) 
    { 
     Student pt=p[i]; 
     QLineEdit *tableName=new QLineEdit; 
     tableName->setText(pt.getname()); 
     table->setCellWidget(i,0,tableName); 

     QLineEdit *tableLastName=new QLineEdit; 
     tableLastName->setText(pt.getlastname()); 
     table->setCellWidget(i,1,tableLastName); 


     table->setItem(i,2,new QTableWidgetItem(QString::number(pt.getsemester()))); 
     table->setItem(i,3,new QTableWidgetItem(QString::number(pt.getstudentid()))); 

     //DELETE BUTTON CREATE 
     QPushButton *deleteButton=new QPushButton; 
     deleteButton->setText("DELETE"); 
     connect(deleteButton,SIGNAL(clicked(bool)),this,SLOT(deleteSlot())); 
     deleteButton->setProperty("STUDENTID",pt.getstudentid()); 
     table->setCellWidget(i,4,deleteButton); 

    } 
} 

//删除按钮连接功能。

void MainWindow::deleteSlot() 
{ 
    QPushButton *b=(QPushButton *)sender(); 
    int studtid=b->property("STUDENTID").toInt(); 
    mydb->deleteStudent(studtid); 
    reloadTable(); 
} 

//在删除功能后调用重新加载表以显示没有删除学生的新数据库。

Student.cpp

#include "student.h" 

Student::Student() 
{ 
    name=""; 
    lastname=""; 
    studentid=0; 
    semester=0; 
} 

Student::Student(QString n,QString l,int s,int p) 
{ 
    name=n; 
    lastname=l; 
    semester=s; 
    studentid=p; 
} 

int Student::getstudentid() 
{ 
    return studentid; 
} 

UPDATE:如果我改变void Database::deleteStudent(int id)查询:

query.exec(QString("DROP TABLE student;")); 

表是删除按钮后删除就好了这样的一些错误studentid或查询?我需要删除单个插入而不是所有的表。

回答

1

试试这个在您的功能:

DELETE FROM student WHERE studentid=.... 
+0

哦,我的上帝。 3小时找到这个。非常感谢你Klocur !!!! – foutzos

+0

不客气。 – klocur