ich würde sagen mangels Information auch keine Ideen...
hehe ...dann versuch ich mal den Informationsmangel zu beheben...hatte lediglich versucht mich kurz zu fassen... ist mir wohl misslungen
Kannst du evt. auch noch etwas mehr über deine Anwendung schreiben?
da es ein riesiges Projekt ist, versuche ich es ersteinmal ohne Code zuposten.
Im groben läuft das Programm foglendermaßen ab:
Programm startet, sqlite Datenbank wird erstellt, Projekt wird geladen(Zip-File welches entpackt wird, die innenliegenden Xml, csv und anderen dateien werden in einem normalen ordner gespeichert).
Aus einer dieser XML-Files wird eine Datenbanktabelle erstellt(wir benutzen die Datenbank nur um mit den datensätzen arbeiten zu können, da wir manchmal mehr als 10000 Einträge haben).
Also während die XML ausgelesen wird einmal ein CREATE gemacht und danach die folgen die INSERT statements. Projekt ist dann geladen.
Dann werden die Views aufgebaut.
In dem einem Fall sind es dann ein geerbtes QSqlTableModel und ein geerbtes QTableView(welches auch eigens implementierte Header hat).
Diese sitzen auf einem Widget welches Funktionen bereitstellt diese Tabelle zu manipulieren(Datensätze hinzufügen, ändern, löschen, Filter setzen, sortierung durchführen), außerdem ist es möglich Spalten hinzuzufügen, zu ändern oder zu löschen. Das alles läuft über OnManualSubmit.
Wenn der Benutzer nun seine geänderte Tabelle speichern will(submit ist erfolgt, der save button wird gedrückt), wird die datenbanktabelle zeile für zeile ausgelesen und in eine XML gespeichert(welche später in das zip-file kommt). somit kann er das programm schließen und beim nächsten mal wieder weiterarbeiten.
Soviel zum Ablauf.
Warum werden dynamisch Tabellen erstellt und gelöscht
Das besagte Problem tritt nun immer dann auf wenn der Benutzer seine mehr als 256 Datensätze hat, und die Spalten ändern möchte(einfachen Spaltennamen ändern, passiert leider viel zu oft aber der Nutzer braucht es). Eine solche Strukturänderung erzwinge ich, indem ich die neue Struktur in die XML schreibe, auf der Datenbank Tabelle einen DROP ausführe und die XML neulade(funktioniert wunderbar mit weniger als 256 Datensätzen).
Alle anderen queries funktionieren! INSERT DELETE usw
Wenn ich das Model komplett wegnehme(keine instanz oder kein setTable) funktioniert es auch mit mehr als 256 Datensätzen, habe allerdings dann keine Darstellung, diese brauche ich aber
.
Wenn ich kurz vor dem DROP die Schleife mit canFetchMore und fetchMore durchlaufen lasse klappt es nicht,
auch die Methode dem Model die Tabelle kurz vorher wegzunehmen (setTable("")) funktioniert nicht(habe diese beiden Methoden probiert weil sie in einem kleinen Beispielprogramm funktionierten).
Ich vermute mal das es am Model liegt, weiß es aber leider nicht. Welches Objekt kann die Tabelle blockieren? und wie kann man dem sagen, dass es damit aufhören soll!?
(lässt sich da am Datenbankdesign noch was ändern...)?
eigentlich ist dahinter kein großes datenbank design, sind nur 4 tabellen welche halt vieeeele datensätze haben und diese sind im ersten moment nichtmal verknüpft, zumindest erfährt die datenbank nichts darüber.
Werden die Daten nach dem Drop noch irgendwo (in einem Model) benötigt? Wenn ja, warum?
Nein, die Daten sind zu dem Zeitpunkt in der XML gespeichert.
Ich hoffe auf gute Ideeen
und danke schonmal!