Datenbank

Alles rund um die Programmierung mit Qt
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Datenbank

Beitrag von RHBaum »

aber dann wird doch trotzdem noch die ganze tabelle geladen und dann auf dem pc gefiltert oder??
Ja, die Frage war eher dahin zielend, rauszufinden warum das SQLModel so lahm ist.
Sortierung und filterung solltest du natuerlich nicht generisch(im View) oder ueber ein zwischenmodel machen in deinem Fall, weil das zerhaut dir die performance mit sicherheit.

ne andere Idee ...

Statt dem SQLTableModell nimm mal QSqlQueryModel

statt der Table gibst nen vollen Select halt an ...
Laut Doku soll das QueryModel nach bedarf fetchen ... bei der table steht was von Populate ...

Ciao ...
janmerkschien
Beiträge: 45
Registriert: 5. Juli 2011 10:08

Re: Datenbank

Beitrag von janmerkschien »

So das mit dem QueryModel klappt jetzt.
Nur leider kann ich die Daten ja jetzt nicht mehr bearbeiten :(
kann man das QSqlQueryModel nicht in ein QSqlQueryModel umwandeln???
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Datenbank

Beitrag von RHBaum »

nen Query model iss read-only

Bist sicher das direkt durch editieren in der Table die daten zurueckschreiben willst ?
bei mehreren anederungen, bzw focusverlust zwischendurch, waer das jeweils nen Update auf die DB

Weiss nicht in wiefern transaktionen ne Rolle fuer dich spielen .. damit koennte das vielleicht kollidieren.

aber du kannst dem SQL Query model schon das write beibringen ...
Dazu musst die flags() Methode überschreiben, damit teilst mit, welche Zellen editierbarsind

dann musst das setData ueberschreiben und da drinne das Update fahren ...

Dann eventuell noch paar kleinigkeiten, damit sich der Focus und die EIngabeboxen so verhalten wie du es magst ...

QSQLTableModel machts ned anders, das ding leitet ja auch von SQLQueryModel ab ....

Ciao ...
janmerkschien
Beiträge: 45
Registriert: 5. Juli 2011 10:08

Re: Datenbank

Beitrag von janmerkschien »

ich schreib mir jetzt ein eigenes model ;)
janmerkschien
Beiträge: 45
Registriert: 5. Juli 2011 10:08

Re: Datenbank

Beitrag von janmerkschien »

Ich hab jetzt eine lösung wo ich mir kein eigenes Model schreiben muss. Nur habe ich jetzt das Problem das ich die funktion
setQuery nicht verwenden kann da sie protected ist.
kannst du mir vll noch sagen wie ich eine protectete funktion aufrufen kann??
mein code:

Code: Alles auswählen

QSqlQuery query("SELECT * FROM 'adressen' limit 0,10");
       model->setQuery(query);
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Datenbank

Beitrag von RHBaum »

protected macht man eine funktion eigentlich nur aus 2 Gruenden:

1. der Ableitende soll sie nur benutzen
2. der Ableitende soll sie üeberschreiben.

also protected heisst fuer Dich, verwende mich, reimplementier mich, wenn du mich spezialisierst !

was du versuchst, isst das Qsql TableModel zu vergewaltigen oder ?
Du willst dem, statt nur DB und Tabellennamen, ne eigenes SQL-Staement unterschieben ... oder ?

Wenn du den Table Mechanismus nicht willst, solltest du auch nicht QSQLTableModel nehmen, sondern QSQLQueryModel.

Um auf die protected Dinger zu kommen, musst du eh ableiten
Testweisse kannst ja mal von QSQLTableModel ableiten und die setQuery Methode aufrufen.
Aber ich glaub ned das das sauber funktioniert, weil das TableModel die Verwendet, um seine funktionalitaet, die eiegens creierten Statements an das SQLQueryModel runterzuschiessen.

Ciao ...
janmerkschien
Beiträge: 45
Registriert: 5. Juli 2011 10:08

Re: Datenbank

Beitrag von janmerkschien »

Ja ich werde mich wohl damit abfinden müssen das ich mit QSqlQeuryModel arbeiten muss.
Ist nur doof das man dann die daten nicht mehr bearbeiten kann . . .
Das mit dem limit läuft jetzt auch :)
vielen dank für die hilfe ;)
Antworten