Skip to content
  • 0 Votes
    5 Posts
    448 Views
    Christian EhrlicherC

    The QSqlTableModel needs a real PK, yes.

  • 0 Votes
    13 Posts
    1k Views
    jsulmJ

    @Piotrek102 said in QSQLITE app no connect to database after deploy:

    But what I sent you is not the main application file. It's part of the class I wrote

    It doesn't matter. What @JonB wrote applies.

  • 0 Votes
    6 Posts
    881 Views
    Pablo J. RoginaP

    @Giggon said in SQLite database creation:

    Thread to be closed

    Please go and mark the post as solved. Thanks

  • 0 Votes
    1 Posts
    561 Views
    No one has replied
  • 0 Votes
    4 Posts
    2k Views
    SGaistS

    Either trigger the submit yourself or fill all fields in the row.

  • Dynamic SELECT statement

    Unsolved General and Desktop
    2
    0 Votes
    2 Posts
    888 Views
    SGaistS

    Hi,

    Sounds like a job for a query builder. Each time you modify one of these variable, you rebuild the query using condition based on what you need. i.e.:

    QString query = "SELECT * FROM "; if (condition) { query += "WHERE foo=\"" + parameterValue + "\""; //etc. }

    Hope it helps

  • 0 Votes
    5 Posts
    4k Views
    AlbertoA

    At the end it was a typo. I was trying to insert a value into a column called Localización by using:

    guardar_s.prepare("INSERT INTO Solicitudes_Trabajo (Localizacion)

    The problem is in the accent mark.

    So if anyone gets this error, watch out the typos.

    Thanks @clochydd !

  • 0 Votes
    3 Posts
    4k Views
    AlbertoA

    Al final guardando cada valor de las dos bases de datos en QStrings funcionaba:

    QString _Telefono = seleccionar2.value(8).toByteArray().constData(); QString _Tecnico_Asignado = seleccionar2.value(0).toByteArray().constData(); QString _Estado_Solicitud = seleccionar2.value(7).toByteArray().constData();

    Así podía usar este código sin problema:

    QSqlQuery guardar_s; guardar_s.prepare("INSERT INTO Solicitudes_Trabajo (N_Solicitud, Fecha_Emision, Unidad_Hospitalaria," "Codigo_Equipo, Equipo, Marca)" "VALUES (:N_Solicitud, :Fecha_Emision, :Unidad_Hospitalaria, :Codigo_Equipo, :Equipo," ":Marca)"); guardar_s.bindValue(":N_Solicitud", _N_Solicitud); guardar_s.bindValue(":Fecha_Emision", _Fecha_Emision); guardar_s.bindValue(":Unidad_Hospitalaria", _Unidad_Hospitalaria); guardar_s.bindValue(":Codigo_Equipo", _Codigo_Equipo); guardar_s.bindValue(":Equipo", _Equipo); guardar_s.bindValue(":Marca", _Marca);

    Insertaba los valores de las dos bases de datos en la base Empresa, pero si usaba este otro con más valores no funcionaba:

    QSqlQuery guardar_s; guardar_s.prepare("INSERT INTO Solicitudes_Trabajo (N_Solicitud, Fecha_Emision, Unidad_Hospitalaria, Codigo_Equipo," "Equipo, Marca, Modelo, N_Serie, Localizacion, Unidad_Tecnica, Peticionario, Telefono, " "Descripcion_Solicitud, Tecnico_Asignado, Tipo_Solicitud, Estado_Solicitud) " "VALUES (:N_Solicitud, :Fecha_Emision, :Unidad_Hospitalaria, :Codigo_Equipo, :Equipo, :Marca, :Modelo," ":N_Serie, :Localizacion, :Unidad_Tecnica, :Peticionario, :Telefono, :Descripcion_Solicitud," ":Tecnico_Asignado, :Tipo_Solicitud, :Estado_Solicitud)"); guardar_s.bindValue(":N_Solicitud", _N_Solicitud); guardar_s.bindValue(":Fecha_Emision", _Fecha_Emision); guardar_s.bindValue(":Unidad_Hospitalaria",_Unidad_Hospitalaria); guardar_s.bindValue(":Codigo_Equipo", _Codigo_Equipo); guardar_s.bindValue(":Equipo", _Equipo); guardar_s.bindValue(":Marca", _Marca); guardar_s.bindValue(":Modelo", _Modelo); guardar_s.bindValue(":N_Serie", _N_Serie); guardar_s.bindValue(":Localizacion", _Localizacion); guardar_s.bindValue(":Unidad_Tecnica", _Unidad_Tecnica); guardar_s.bindValue(":Peticionario", _Peticionario); guardar_s.bindValue(":Telefono", _Telefono); guardar_s.bindValue(":Descripcion_Solicitud", _Descripcion_Solicitud); guardar_s.bindValue(":Tecnico_Asignado", _Tecnico_Asignado); guardar_s.bindValue(":Tipo_Solicitud", "a"); guardar_s.bindValue(":Estado_Solicitud", _Estado_Solicitud);

    Me daba el error: 12.ERROR: QSqlError("", "Parameter count mismatch", "").

    Pensaba que quizás eran demasiados valores para Qt Creator. Pero al final, después de muchas pruebas me dí cuenta que estaba intentando insertar un valor en la columna existente Localización con un INSERT INTO Solicitudes_Trabajo (Localizacion).
    Lo explico por si a alguien más le sale ese mismo error que pruebe a revisar todos los campos y columnas en busca de algún pequeño fallo en alguna letra o alguna tilde.

  • 0 Votes
    5 Posts
    2k Views
    AlbertoA

    Solved.
    I tried a lot of things to solve the problem. Some of them included calling next before accessing the result as @SGaist said, but it continued saying:

    QSqlQuery::value: not positioned on a valid record

    At last I created a new project with a new database and it worked properly with this code:

    hospital=QSqlDatabase::addDatabase("QSQLITE"); hospital.setDatabaseName("C:/Sqlite3/Hospital.sqlite"); if(hospital.open()){ qDebug()<<"4.Se ha conectado a la base de datos Hospital"; }else{ qDebug()<<"4.ERROR. No se ha conectado a la base de datos Hospital"; } QSqlQuery mostrar; mostrar.prepare("SELECT*FROM Partes WHERE N_Parte=:ID"); mostrar.bindValue(":ID",ui->lineEditN_Parte->text()); if(mostrar.exec()) { qDebug()<<"5.Los datos del parte se han mostrado correctamente"; }else{ qDebug()<<"5.ERROR. Los datos del parte no se han mostrado correctamente"; qDebug()<<"5.ERROR:"<<mostrar.lastError(); } mostrar.next(); ui->tableWidget->setRowCount(15); QStringList Campos; Campos<<"Fecha de Emisión"<<"Unidad Hospitalaria"; ui->tableWidget->setVerticalHeaderLabels(Campos); ui->tableWidget->insertColumn(0); ui->tableWidget->setColumnCount(1); ui->tableWidget->setItem(0, 0, new QTableWidgetItem(mostrar.value(1).toByteArray().constData())); ui->tableWidget->setItem(2, 0, new QTableWidgetItem(mostrar.value(2).toByteArray().constData()));

    So I guess the problem was in the database, maybe in the columns, maybe in the rows, maybe in the values or maybe in the name of each of them.

    The important thing is that the code I post in this reply works perfectly, so if anyone has a similar problem I hope it helps.

    Thank you very much!

  • 0 Votes
    4 Posts
    5k Views
    AlbertoA

    Resuelto.
    Intenté muchas cosas para solucionar el problem, algunas incluian la utilización de next() que me faltaba en el código de mi respuesta anterior pero continuaba saliendo el error:

    QSqlQuery::value: not positioned on a valid record

    Al final creé un nuevo proyecto con una base de atos nuevas y funciona correctamente con este código:

    hospital=QSqlDatabase::addDatabase("QSQLITE"); hospital.setDatabaseName("C:/Sqlite3/Hospital.sqlite"); if(hospital.open()){ qDebug()<<"4.Se ha conectado a la base de datos Hospital"; }else{ qDebug()<<"4.ERROR. No se ha conectado a la base de datos Hospital"; } QSqlQuery mostrar; mostrar.prepare("SELECT*FROM Partes WHERE N_Parte=:ID"); mostrar.bindValue(":ID",ui->lineEditN_Parte->text()); if(mostrar.exec()) { qDebug()<<"5.Los datos del parte se han mostrado correctamente"; }else{ qDebug()<<"5.ERROR. Los datos del parte no se han mostrado correctamente"; qDebug()<<"5.ERROR:"<<mostrar.lastError(); } mostrar.next(); ui->tableWidget->setRowCount(15); QStringList Campos; Campos<<"Fecha de Emisión"<<"Unidad Hospitalaria"; ui->tableWidget->setVerticalHeaderLabels(Campos); ui->tableWidget->insertColumn(0); ui->tableWidget->setColumnCount(1); ui->tableWidget->setItem(0, 0, new QTableWidgetItem(mostrar.value(1).toByteArray().constData())); ui->tableWidget->setItem(2, 0, new QTableWidgetItem(mostrar.value(2).toByteArray().constData()));

    Así que supongo que el problema estaba en la base de datos anterior, quizás en las columnas, quizás en las filas, quizás en los valores o quizás en el nombre de cada uno de estos elementos.
    Lo importante es que el código que adjunto en esta respuesta funciona correctamente, de modo que si alguien tiene un problema parecido espero que esto le ayude.

    Muchas gracias!

  • 0 Votes
    3 Posts
    1k Views
    N

    Thank you, with the StandardPaths's its working with QSqlDatabase.
    But does anybody know how to solve the above mentioned problem?

  • 0 Votes
    19 Posts
    8k Views
    mrjjM

    @4j1th
    Ok, very strange.
    Im out of ideas why it will not load as driver.

    The .a +.exe could produce a encrypted db and the dll can be loaded as DLL but
    for some reason, it wont load as a sql driver.

    So close and yet nothing :(