QSqlTableModel: Wie leert man eine komplette Tabelle

Alles rund um die Programmierung mit Qt
Ritchie
Beiträge: 86
Registriert: 29. Januar 2007 19:41

QSqlTableModel: Wie leert man eine komplette Tabelle

Beitrag von Ritchie »

Hallo Zusammen,

weiss jemand, wie löscht man den kompletten Inhalt einer Tabelle via QSqlTableModel (Höhere Funktionen).

Für die Funktion removeRows( von, bis ) sind nur mit Integer Werten vorgesehen.
Was aber, wenn eine Datenbank-Tabelle mehr Daten als den Integer Bereich hat?

Gruss R.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Falls man mit einem QSqlTableModel überhaupt soviele Zeilen verarbeiten kann, könnte man das Model so lange löschen, bis die Anzahl der Rows=0.
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Merk dir das Tabllenlayout und nutze drop table ... als Query. Wozu willst du sowas? Oder nimm delete from tablename where 1; Aber wozu soll das gut sein?
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
Ritchie
Beiträge: 86
Registriert: 29. Januar 2007 19:41

Beitrag von Ritchie »

Hi,

nun ja, ich benötige diese Funktion für das mögliche Löschen von Log-Files.
In diesen Logfiles werden Aktionen des Programms aufgezeichnet.
Über einen längeren Zeitraum kann das schon eine Menge werden.
Hierfür denke ich mir eine Backup Funktion für die Daten zur Langzeitarchivierung,
welche auch wieder einsehbar sein soll und eine Löschfunktion für die aktuelle Tabelle.

Dropen wollte ich Sie eigentlich nicht. Eher so was wie "delete * from tabelle", nur halt generell.

Gruss R.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Du loggst in eine Datenbank? Was ist der Hintergrund? Welche speziellen Features erhoffst du dir gegenüber einem Textfile? Welche DB verwendest du? Wenn SQLite: Backup == einfach aktuelles .sqlite-Datei an eine andere Stelle kopieren, neue .sqlite erstellen, fertig. Einen dicken db-Server (mysql, postgre, ...) fände ich NUR fürs loggen absolut mit Kanonen auf Spatzen... Um das Log durchzusehen, brauchst du Zugriff auf den Server, ein eigenes Programm zum Durchsuchen (auch wenns nur z.B. phpmyadmin ist), das fänd ich kontraintuitiv und -produktiv.
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Ritchie hat geschrieben:Eher so was wie "delete * from tabelle", nur halt generell.
ich in anderem post hat geschrieben:DELETE FROM <tablename> WHERE 1;
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

http://dev.mysql.com/doc/refman/5.1/de/truncate.html

Geht auch bei Oracle. Bei den anderen weiß ichs nicht.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Postgres hat TRUNCATE.
SQLite hat es nicht.
MSSQL hat es.

Aber davon abgesehen hat TRUNCATE ein paar Nebenwirkungen, weswegen ich es nicht für den Normalbetrieb einsetzen würde.
Ritchie
Beiträge: 86
Registriert: 29. Januar 2007 19:41

Beitrag von Ritchie »

Hi,

die von mir verwendete Funktion, ist ein "User Log", für eine Art Electronic Signatur laut CFR21 Part 11, falls bekannt.

@franzf: Als Beispiel, werden hier Funktionen, wie "Tuer wurde durch Bediener geöffnet". Bediener X hat sich angemeldet/abgemeldet. Bediener hat Parameter X gespeichert." aufgezeichnet. Wird in der Pharma Industrie verwendet.

Ebenso werden Prozessmeldungen und Alarmmeldungen hierbei in einer MySQL Datenbank gesichert, welche von einer Steuerung eingeleitet werden. Diese Meldungen werden für eine Art "ProzessDokumentation" verwendet.
Kommerzielle Lösungen verwenden ähnliche Lösungen mit einer SQL Datenbank.

Verstehe in dann die "QSqlTableModel" Funktion so, das sie bei Datenmengen über "65565" (uint16) das Handtuch schmeißt.

Ich dachte eigentlich, das dieses Model generell nur die Daten lädt, welche im sichtbaren Bereich des Views sind. Der Rest wird dynamisch nachgeladen.

Was würde das Model also machen, wenn ich 2 Millionen Datensätze habe und durch diese Browse will (rein theoretisch). Ich weiss dass man hier besser einen Filter setzt. Es geht mir aber um die Leistungsgrenzen der Funktionen.

Gruss R.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

max(signed int) = 2^31 - 1 != 65535...
Aber davon abgesehen ist ein eigenes model wohl zu bevorzugen. Zumal man dann bei solch großen Datenmengen selbst alles in der Hand hat.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ritchie
Beiträge: 86
Registriert: 29. Januar 2007 19:41

Beitrag von Ritchie »

Würde das Standard-SQL Modell zuerst alle Daten laden und dann Anzeigen ?
Oder nur einen begrenzten Anzeigen Bereich ?

Gruss R.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das steht nirgends. Also Sourcen studieren.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ritchie
Beiträge: 86
Registriert: 29. Januar 2007 19:41

Beitrag von Ritchie »

Danke...
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

upsala hat geschrieben:Postgres hat TRUNCATE.
SQLite hat es nicht.
MSSQL hat es.

Aber davon abgesehen hat TRUNCATE ein paar Nebenwirkungen, weswegen ich es nicht für den Normalbetrieb einsetzen würde.
Welche Nebenwirkungen? Und bei welcher DB?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

MySQL: Nicht transaktionssicher, AUTO_INCREMENT wird zurückgesetzt
Postgres: DELETE-Trigger wird nicht ausgelöst, blockiert Tasks die gerade auf die selbe Tabelle zugreifen, und wenn ein FOREIGN-KEY vorhanden ist bricht das Kommando ab.
Antworten