[Ayuda] Obtener el valor de un Campo "Auto Increment" con QSqlTableModel



  • Hola a tod@s:

    No tengo mucha experiencia con Qt, y aunque voy realizando avances importantes, llevo varios días bloqueado en un punto que no logro superar. He buscado en diferentes forums y aunque hay diversa gente que plantea el mismo problema, no he conseguido averiguar la solución.

    Tengo una base de datos ODBC llamada Personas, con los siguientes campos:
    PersonID int AutoIncrement
    Nombre String
    Apellidos String

    Accedo a los datos con un QSqlTableModel, tanto para lectura como escritura. La lectura la puedo hacer sin problemas.
    Despues de buscar un poco, he encontrado una manera eficaz de insertar nuevos registros:
    @
    QSqlTableModel miTabla;
    miTabla.setTable("Personas");
    miTabla.setEditStrategy(QSqlTableModel::OnRowChange);
    miTabla.select();

        QSqlRecord miRegistro=miTabla.record(); //creo un record vacío, pero con la estructura de la tabla
    
        miRegistro.remove(0);   //elimino el primer campo del registro (PersonID) ya que sera la propia base de datos la que asigne el valor a este campo
        miRegistro.setValue("Nombre","Federico");      //rellenar estos campos es responsabiliad del programa
        miRegistro.setValue("Apellidos","García Robles");
    
        miTabla.insertRecord(-1,miRegistro);  //inserto el registro al final del QSqlTableModel
    

    @

    esto me ha funcionado bien, los valores se insertan bien en la base de datos, y el campo PersonID es asignado correctamente por la base de datos.

    Mi problema es, que una vez insertado el registro, necesito saber el valor que la base de datos ha asignado a PersonID, pues a continuación quiero que esa persona, pase a ser la persona activa en el programa.

    He intentado usar tambien
    @
    QSqlQuery::​lastInsertId()
    @

    pero al parecer no funciona con ODBC.
    He leído la documentación completa de QSqlTableModel, QSqlRecord y QSqlQuery, y ya empiezo a desesperarme. ¡¡No puede ser tan difícil !!
    ¿He pasado algo por alto?
    estaria muy agradecido si alguien me pudiera orientar un poco.

    Un Saludo


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.