Begrenzte anzahl von Datensätzen QSqlTableModel/QTableView

Alles rund um die Programmierung mit Qt
Antworten
MBex
Beiträge: 17
Registriert: 24. November 2007 11:36

Begrenzte anzahl von Datensätzen QSqlTableModel/QTableView

Beitrag 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
abelmi
Beiträge: 16
Registriert: 19. Februar 2007 14:56

Beitrag 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
MBex
Beiträge: 17
Registriert: 24. November 2007 11:36

Beitrag 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
Antworten