Mapy obiektów czy lista pobierana bezpośrednio z bazy

Data: 2017-02-08, autor: Michał Misztal

Kolejny raz będę truł o tym programiku co go właśnie robię. Zastanawiam się nad kwestią techniczną. Kwestią z pogranicza porządku kodu i jego wydajności.

Otóż z początku uzupełniałem główną tablicę zleceń bezpośrednio z bazy.



QSQlQuery query(db);
query.prepare("select * from zlecenia where id = 1;");
query.exec();
while(query.next()){
  ui->tablica->item(row,col,new QTableWidgetItem(query.value(0).toString());
}

Oczywiście powyższy kod zmodyfikowałem, żeby nie wypisywać całej tabeli i nie tworzyć pętli w pętli. Tak było do tej pory. Teraz Każda komórka odpowiada za cechę danego obiektu. I tak z bazy do wektora przekazywane są identyfikatory (id) zleceń odpowiadających aktualnemu filtrowi.



QVector <int> idZlec;
query.exec("select id from zlecenie where 1;");
while(query.next()){
  idZlec.append(query.value(0).toInt());
}
QMap <int,Zlecenie *> Zlecenia;
for(QVector <int>::iterator iter=idZlec.begin();iter != idZlec.end();++iter){
  Zlecenia.insert(*iter,Zlecenie(db,*iter);
}

A do tablicy jest wysyłane tak



for(QMap <int,Zlecenie *>::iterator iter = Zlecenia.begin();iter != Zlecenia.end();++iter){
  ui->zlecenia->item(row,col,new QTableWidgetItem(iter.value->pokazWartosc));
}

I sam nie wiem czy się czasem nie zapędziłem z tym wszystkim. Z jednej strony chcę dorobić filtrowanie a'la QHash gdzie kluczem będzie wartość (np klient, model) a wartością id zlecenia. Potem na podstawie filtrowania zostanie utworzona druga tabela. Także to co do tej pory zrobiłem przyda się. Ale z drugiej strony może po prostu na żywca pobierać dane z tabeli.

W tabeli na razie jest ok 20 rekordów. Ale co będzie gdy to wzrośnie np do 200 czy 20000? QHash z taką liczbą to też zapotrzebowanie na pamięć. Sam na razie nie wiem jak to rozwiązać.

Skomentuj lub zgłoś błąd

© Michał Misztal 2018

Czytasz właśnie

Mapy obiektów czy lista pobierana bezpośrednio z bazy
Autor: Michał Misztal
Data: 2017-02-08

Podobne wpisy