Seite 1 von 1

Begrenzte anzahl von Datensätzen QSqlTableModel/QTableView

Verfasst: 28. März 2008 23:59
von MBex
Hallo,

ich schreibe zurzeit eine Application, die auf einen Firebird Server zugreift.
OS ist Win XP SP2, Qt 4.3.1 Opensource.

Code: Alles auswählen

QSqlTableModel *model = new QSqlTableModel;
  model->setTable( "RDB$RELATIONS" );
  model->setFilter( "RDB$RELATION_NAME not starting with 'RDB$'" );
  model->setSort( 0,Qt::AscendingOrder );
  model->select();
  model->removeColumns( 0,8 );
  model->removeColumns( 1,7 );
  viewTables->setModel( model );
  viewTables->resizeColumnsToContents();
  viewTables->resizeRowsToContents();
Es funktioniert auch soweit alles wunderbar. Nur leider habe ich weit über 300 Tabellen, und somit auch die Tabelle RDB$RELATIONS genausoviele zeilen. In dem TableView werden jedoch nur 255 Datensätze angezeigt. Wodurch kommt dies zu stande? Warscheinlich ist die Lösung wieder banal nur ich komm einfach nicht drauf.

Wäre über einen schubs in die richtige Richtung schon sehr zufrieden ;-)

edit:

nach längerem herumprobieren bin ich nun noch verwirrter als zuvor.
Zum testen habe ich einen weiteren View ( QColumnView ) in das Layout eingefügt.

Code: Alles auswählen

QSqlTableModel* model = new QSqlTableModel;
  model->setTable( "RDB$RELATIONS" );
  model->setFilter( "RDB$RELATION_NAME not starting with 'RDB$'" );
  model->setSort( 0,Qt::AscendingOrder );
  model->select();
  model->removeColumns( 0,8 );
  model->removeColumns( 1,7 );
  viewTables->setModel( model );
  viewTables->setModel( model );
Wenn ich also beiden Views das Model zuweise, werden alle datensätze korrekt angezeigt.
Leider verstehe ich nicht warum das so ist.
Hoffe es kann mir jemand helfen. :(


mfg. MBex

Verfasst: 31. März 2008 11:43
von abelmi
QSqlTableModel bzw. QSqlQuerModel cached immer nur 256 Zeilen. Wenn du den Scrollbar im View ganz an das Ende ziehst, dürften die restlichen Zeilen sichtbar werden.

Alternativ kannst du durch folgendes Codefragment anfangs alle Zeilen in das Model laden:

model->select();
while (myModel->canFetchMore())
myModel->fetchMore();

MfG abelmi

Verfasst: 31. März 2008 14:48
von MBex
hi

Wenn ich die Scrollbar bis ganz ans Ende ziehe, sind leider immernoch nur 256 Zeilen sichtbar.

Code: Alles auswählen

model->select();
while (myModel->canFetchMore())
myModel->fetchMore(); 
Das hatte ich schon ausprobiert, leider auch ohne erfolg.
Danke trotzdem.
Mich wundert halt, dass bei zwei views alle daten korrekt angezeigt werden.
Hoffe mir kann am donnerstag mein Lehrer diesbezüglich weiterhelfen.

mfg. MBex