Trasteando con QSqlRecord

A la hora de crear un nuevo evento para el programa MyAcolito, he reutilizado el asistente que creé para AcoLITE (para que vamos a reinventar la rueda si algo ya funciona, ¿no es verdad?). Sólo ha sido necesario trastear un poquito para ajustar las señales que envía, los iconos que utiliza y el título que muestra. Esa ha sido la parte fácil.

La parte complicada ha sido conseguir que, al añadir el nuevo evento a la base de datos de eventos (¡ojo, que todavía no se han creado las bases de datos!), se actualice el evento en condiciones. Siempre me olvido de usar el beginResetModel()…

De todas formas: ahora ya funciona correctamente. Podría haberlo hecho mediante QSqlQuery y lanzando los datos en un batch (inicialmente, es como lo implementé). Pero decidí lanzarme a la aventura y utilizar MyModeloEventos, porque para algo lo había creado… y decidí probar el QSqlRecord, el cual ya había utilizado antes, para que quedara el código más claro y legible.

La primera parte, la de insertar los datos de evento, ha sido sencilla:

    int numEventos=_modeloNombres->rowCount();

    beginInsertRows(QModelIndex(),numEventos,numEventos+1);
    QSqlRecord nuevoEvento=_modeloNombres->record();
    nuevoEvento.clearValues();

    nuevoEvento.setValue(tr("nombre"),ev->nombre());
    nuevoEvento.setValue(tr("comentario"),ev->comentario());
    nuevoEvento.setValue(tr("nombreDatabase"),ev->database());

    _modeloNombres->insertRecord(-1,nuevoEvento);
    _modeloNombres->submitAll();
    _modeloNombres->select();

Como se puede apreciar, los datos se introducen en un QSqlRecord después de llamar al beginInsertRows()… pero cuando intentabas recuperar los datos del _modeloNombres tras insertar el registro, no me ha permitido recuperar el valor de clave primaria utilizado, así que ha sido necesario utilizar un QSqlQuery para recuperar el valor de clave y luego insertarlo para la segunda tabla de _modeloFechas.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s