Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

UPDATE CON DB SQLITE..NO SALE



  • void Blind_Dialog :: on_modificar_clicked ()
    {

    QSqlQuery actualizar;
    if(db.open()){

    actualizar.prepare("UPDATE blinds SET sblind, bblind, ante, time, break WHERE Id = 5"
    "VALUES (:sblind, :bblind, :ante, :time, :break)");

    actualizar.bindValue(":sblind",ui->Sblind->text());
    actualizar.bindValue(":bblind",ui->Bblind->text());
    actualizar.bindValue(":ante",ui->Ante->text());
    actualizar.bindValue(":time",ui->Time->text());
    actualizar.bindValue(":break",ui->Break->text());
    actualizar.exec();
    if(!actualizar.exec())
    {
    qDebug() << "Can't Execute Query !";
    }
    else
    {
    qDebug() << "Query Executed Successfully !";
    }

    if(actualizar.exec()){
    qDebug()<<"El registro se ha modificado";
    }else{
    qDebug()<<"El registro NO se ha modificado";
    qDebug()<<"ERROR!"<<actualizar.lastError();
    }
    }else
    qDebug()<<"La base de datos no esta abierta";
    }
    // Mensaje del programa ERROR! QSqlError ("", "No coincide el recuento de parámetros", "")



  • @Casino said in UPDATE CON DB SQLITE..NO SALE:

    actualizar.prepare("UPDATE blinds SET sblind, bblind, ante, time, break WHERE Id = 5"
    "VALUES (:sblind, :bblind, :ante, :time, :break)");

    => WHERE Id = 5VALUES

    Should be: WHERE Id = 5 VALUES



  • @JonB
    sigue igual el mismo mensaje de error.


  • Lifetime Qt Champion

    @Casino Why do you call exec() two times (actually 3 times!)?

    actualizar.exec();
    if(!actualizar.exec())
    
    if(!actualizar.exec())
    {
        qDebug() << "Can't Execute Query !";
        qDebug() << actualizar.executedQuery(); // What does this print out?
    }
    


  • @jsulm
    los puse por que fui agregando condicionales...pero los acabo de sacar y sigo igual...



  • @Casino
    en el caso de borrar me pasa lo mismo mira
    void Blind_Dialog::on_borrar_clicked()
    {
    QSqlQuery borrar;

    borrar.prepare("DELETE FROM blinds WHERE sblind = 100 ");
    if(borrar.exec()){
       qDebug()<<"El registro se ha modificado";
    }else{
       qDebug()<<"El registro NO se ha modificado";
       qDebug()<<"ERROR!"<<borrar.lastError();
    }
    

    }

    El mensaje de error ERROR! QSqlError("", "Unable to fetch row", "No query")


  • Moderators

    Hola

    Cuando es UPDATE, no tendría que ser:

    actualizar.prepare("UPDATE blinds SET sblind = :sblind, bblind = :bblind, ante = :ante, time = :time, break = :break WHERE Id = 5");
    

    Nunca lo había visto como lo has puesto.

    En cuanto a lo del DELETE, no sé, como no le estás pasando parámetros a la query, no uses prepare, ejecútala directamente.

    Si no se soluciona con lo que digo, pon también la estructura de la tabla, a ver si damos con el error.

    Un saludo



  • Te envio la tabla
    void Blind_Dialog::CrearTablaCiegas()
    {
    QString consulta;
    consulta.append("CREATE TABLE IF NOT EXISTS Ciegas("
    "Id INTEGER NOT NULL PRIMARY KEY,"
    "sblind INTEGER,"
    "bblind INTEGER,"
    "ante INTEGER,"
    "time INTEGER,"
    "break INTEGER"
    ")");
    QSqlQuery crear;
    crear.prepare(consulta);

    if(crear.exec()){
       qDebug()<<"La tabla CIEGAS existe o se ha creado correctamente";
    }else{
       qDebug()<<"La tabla CIEGAS NO existe o NO se ha creado correctamente";
       qDebug()<<"ERROR!"<<crear.lastError();
    }
    

    }


  • Moderators

    @Casino said in UPDATE CON DB SQLITE..NO SALE:

    Hola, en los ejemplos que pusiste antes, tanto en el DELETE como en el UPDATE, lo estás tratando de hacer sobre una tabla que se llama blinds. La que nos muestras ahora tiene otro nombre: Ciegas.

    consulta.append("CREATE TABLE IF NOT EXISTS Ciegas("
    

    ¿No te habrás equivocado de tabla? ¿Probaste la modificación que te propuse para el UPDATE?

    Un saludo



  • @juanki
    Perdón, sorry, en el idioma que sea, la db se llama blinds, y la tabla Ciegas, cuando quería actualizar o borrar me remitía a la db, creyendo que ese era el camino. MUCHÍSIMAS GRACIAS.-


  • Moderators

    Hola

    Me alegro que se solucionara, las operaciones hay que hacerlas sobre las tablas.

    Por favor, si el tema se solucionó, marque como resuelto el tema.

    Un saludo



  • @juanki
    ahora bien, yo utilizo
    void Blind_Dialog::on_Ciegas_itemClicked(QTableWidgetItem *item)
    {
    f = item->row();
    ui->numero->setText(QString::number(f));
    QTableWidgetItem *Sblind = ui->Ciegas->item(f,0);
    QTableWidgetItem *Bblind = ui->Ciegas->item(f,1);
    QTableWidgetItem *Ante = ui->Ciegas->item(f,2);
    QTableWidgetItem *Time = ui->Ciegas->item(f,3);
    QTableWidgetItem *Break = ui->Ciegas->item(f,4);

    ui->Sblind->setText(Sblind->text());
    ui->Bblind->setText(Bblind->text());
    ui->Ante->setText(Ante->text());
    ui->Time->setText(Time->text());
    ui->Break->setText(Break->text());
    

    }
    para ubicar la fila que quiero modificar, uno o todos los valores, por lo que paso el valor f para actualizar la tabla, ahi se producen errores pese a que f es un int, si le paso el valor o sea 1, 10 o lo que sea la tabla se modifica ytodo bien, pero con f no, que puede ser???


  • Moderators

    Hola

    Tienes que crear un hilo o conversación nueva para esta nueva pregunta, ya que nada tiene que ver con el asunto de esta.

    Cuando crees la nueva conversación, indica por favor los errores que obtienes, eso ayuda mucho a quien quiera ayudarte.

    Un saludo


Log in to reply