sqlite locked by drop table [gelöst]

Alles rund um die Programmierung mit Qt
Antworten
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

sqlite locked by drop table [gelöst]

Beitrag von Troll.Soft »

Hallo,
verwende QSqlDatabase und sqlite. Der SqlBefehl "drop table" stößt auf den Fehler "database table is locked Unable to fetch row". Die Doku von sqlite sagt hierzu folgendes:
Trying to CREATE or DROP a table or index while a SELECT statement is still pending.
Sometimes people think they have finished with a SELECT statement because sqlite3_step() has returned SQLITE_DONE. But the SELECT is not really complete until sqlite3_reset() or sqlite3_finalize() have been called.
Mit "sqlite3_reset() etc" ist offensichtlich die C-API gemeint.
Wie kann ich diesen Befehl mit Qt realisieren, aufrufen ??

tschüß
Troll.Soft
Zuletzt geändert von Troll.Soft am 17. August 2010 15:34, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Speicherst du irgendwo ein QSqlQuery-Objekt mit aktivem SELECT? Wäre meine erste Anlaufstelle.
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

franzf hat geschrieben:Speicherst du irgendwo ein QSqlQuery-Objekt mit aktivem SELECT? Wäre meine erste Anlaufstelle.
Das von Dir angesprchene Problem kenne ich. Ist hier definitiv nicht der Fall. Es sind auch nur einige Table, die sich nicht droppen lassen, wobei ich den Unterschied zwischen den Tabellen, die sich löschen lassen und denen, die sich nicht löschen lassen nicht erkennen kann.
tschüß
Troll.Soft
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Hast du irgendwelche QSqlQueryModels? Die speichern sich eine Kopie des Queries. Irgendwoher muss der Lock ja kommen :P
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

In der Tat, ich verwende models. Aber so wie vorgesehen, setQuery etc.

Wenn der Drop nicht will, kann ich trotzdem ein "exec("delete from " + TableName);" mit Erfolg abschicken. Verlasse ich anschließend mein Programm und starte es wieder, läßt sich droppen.
Ist aber ein ziemlich öder Workaround :)
tschüß
Troll.Soft
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

franzf hat geschrieben:Speicherst du irgendwo ein QSqlQuery-Objekt mit aktivem SELECT? Wäre meine erste Anlaufstelle.
Seufz, Fehler entdeckt.
In den älteren Untiefen meine Projekts fanden sich nicht ordnungsgemäß vernichtete Modells. Und somit trifft obige Vermutung den Punkt.
tschüß
Troll.Soft
Antworten