2017-06-21 3 views
0

J'ai une base de données nommée étudiant avec 4 champs (nom, nom, semestre et studentid).Essayer de supprimer de la base de données sur la table QT

J'ai une application connectée qui permet à l'utilisateur d'insérer des étudiants dans la base de données ayant une option pour les montrer sur une table après les insertions.

La table a un bouton DELETE pour chaque insertion-étudiant que j'ai connecté à la fonction séparée pour laisser l'utilisateur ayant la possibilité de supprimer individuellement des étudiants basés sur le studentid.

Problème est que je semble faire quelque chose de mal que le bouton de suppression ne fonctionne pas quand il est cliqué. Je n'ai pas d'erreur mais j'ai besoin de votre aide pour trouver le bug.

Base de données code créé:

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

Supprimer la base de données appelée à database.cpp

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

mainwindow.cpp

// Création de la table-liste des inserts

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

    } 
} 

// Fonction de connexion du bouton DELETE. // Reload table est appelée après la fonction delete pour afficher la nouvelle base de données sans l'étudiant supprimé.

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

MISE À JOUR: si je change void Database::deleteStudent(int id) requête:

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

Le tableau est supprimé très bien après que le bouton de suppression de sorte que son quelque chose de mal avec StudentID ou la requête? J'ai besoin de supprimer les insertions individuelles pas toute la table.

Répondre

1

Essayez dans votre fonction:

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

Oh mon dieu. 3 heures pour trouver ceci. Merci beaucoup Klocur !!!! – foutzos

+0

Vous êtes les bienvenus. – klocur