2009-06-24 9 views
8

Después de configurar un modelo de mesa en Qt 4.4 así:Problema con QSqlTableModel - no hay actualizaciones automáticas

QSqlTableModel *sqlmodel = new QSqlTableModel(); 

    sqlmodel->setTable("Names"); 
    sqlmodel->setEditStrategy(QSqlTableModel::OnFieldChange); 
    sqlmodel->select(); 
    sqlmodel->removeColumn(0); 

    tableView->setModel(sqlmodel); 
    tableView->show(); 

el contenido se muestra correctamente, pero la edición no es posible, el error:

 QSqlQuery::value: not positioned on a valid record 
+0

¿Puedes pegar el código de la consulta que estás ejecutando también? – nmuntz

+1

no hay consulta. Se necesita consulta para QSqlQueryModel. En cambio, QSqlTableModel solo muestra una tabla (también permite editarla). "QSqlTableModel proporciona un modelo editable para mostrar una sola tabla ... La vista resultante es editable porque el modelo es editable." de "Fundamentos del desarrollo de Qt" por Johan Thelin – MadH

Respuesta

12

Puedo confirmar que el error existe exactamente como lo informa, en Qt 4.5.1, Y que la documentación, p. here, todavía muestra un ejemplo incorrecto (es decir, uno que incluye la llamada removeColumn).

Como solución temporal he tratado de escribir una ranura conectada a la señal beforeUpdate, con la idea de comprobar qué pasa con QSqlRecord que está a punto de actualizarse en el DB y posiblemente arreglarlo, pero puedo ' Para que funcione, cualquier llamada a métodos de ese parámetro de registro está bloqueando mi aplicación de juguete con BusError.

Así que he renunciado a esa idea y cambié a lo que sin duda es la manera correcta de hacerlo (la visibilidad debe ser determinada por la vista, no por el modelo, ¿verdad? -): pierde el removeColumn y en lugar de lo contrario, llame al tableView->setColumnHidden(0, true). De esta manera, los ID están ocultos y todo funciona.

Así que creo que podemos confirmar que hay un error de documentación y abrir un problema al respecto en el rastreador Qt, por lo que se puede solucionar en la próxima ronda de documentos, ¿verdad?

+0

sí, gracias! :-) – MadH

+3

gasté toda mi reputación para confirmar que :-)) – MadH

0

parece que la causa de esto fue en línea

sqlmodel->removeColumn(0); 

Tras comentar que fuera, todo funciona perfec Tly. Por lo tanto, voy a tener que encontrar otra manera de no mostrar una identificación de la tabla ;-)

EDITAR he dicho "parece", ya que en el ejemplo de "Fundamentos de desarrollo Qt" Johan Thelin también eliminó la primera columna. Por lo tanto, sería bueno si alguien más también intenta esto e informa los resultados.

0

Uso Qt 4.6.1 en PyQt y el problema todavía está aquí. La eliminación de "removeColumn (0)" resuelve el problema.

Cuestiones relacionadas