Bestimmten Eintrag in QSqlTableModel finden

Alles rund um die Programmierung mit Qt
Antworten
Xander77
Beiträge: 35
Registriert: 14. Dezember 2006 13:47

Bestimmten Eintrag in QSqlTableModel finden

Beitrag von Xander77 »

Ich habe ein QSqlTableModel-Objekt, das Datensätze einer Tabelle beinhaltet. Diesem Objekt möchte ich mehrere Einträge hinzufügen. Wenn aber versucht wird, einen Primärschlüssel - der natürlich aus mehreren Feldern bestehen kann - doppelt einzutragen, soll eine bestimmte Fehlerbehandlung gestartet werden.

Wie stelle ich fest, ob ein bestimmter Primärschlüssel bereits ins Model eingetragen wurde bzw. darin enthalten ist?

Ein Submit wurde zu diesem Zeitpunkt aus Performance-Gründen noch nicht durchgeführt, ich kann also nicht auf die Tabelle zurückgreifen, da Datensätze zwar bereits im Model aber noch nicht in der Tabelle stehen!

Ich möchte auch nicht alle Zeilen einzeln durchforsten, da es sehr schnell sehr viele Zeilen werden (können)! Das wird zu zeitintensiv, weil es bei jedem Datensatz geschehen muss!
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Folgende Lösungen:

Wieso prüfst du den Primärschlüssel? Lass es die Datenbank machen

Lege dir eine Liste mit allen Primärschlüsseln an.

Frage die Datenbank bei jedem insert.

Wo möchtest du denn mit deinem TableModel hin? Welche Datenbank nutzt du? Und wieviele Einträge hast du in deiner Datenbank?
Xander77
Beiträge: 35
Registriert: 14. Dezember 2006 13:47

Das geht leider nicht!

Beitrag von Xander77 »

Die Datenbank kennt doch bei den einzelnen Inserts noch garnicht alle Datensätze, da noch kein Submit durchgeführt wurde!

Es handelt sich um einen allgemeingültigen Importvorgang, der beliebige Daten aus mehreren anderen Datenbanken (Access) in eine beliebige Tabelle (SQL Server) importieren soll. Wenn ein Primärschlüssel doppelt vergeben wurde, soll der Konflikt in einer Datei vermerkt werden, wenn der Datensatz nicht exakt identisch ist, wenn sich also verschiedene Felder unterscheiden. Dabei muss er aber nicht nur mit den Datensätzen in der Tabelle vergleichen, sondern auch mit denen, die schon in das Model eingetragen wurden, aber noch nicht "abgeschickt" wurden!
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Warum machst du kein submit bei jedem Datensatz und löscht die Datensätze wieder, falls doch kein submit ausgeführt wird?
Xander77
Beiträge: 35
Registriert: 14. Dezember 2006 13:47

Performance!!!

Beitrag von Xander77 »

Wie bereits erwähnt, ist das Performace-technisch unzumutbar! Der geplante Datenimport dauert dann mehrere Stunden!!!
Xander77
Beiträge: 35
Registriert: 14. Dezember 2006 13:47

Andere Lösung gefunden!

Beitrag von Xander77 »

Ich habe den Import einfach so gestaltet, dass kein doppelten Primärschlüssel innerhalb einer Transaktion vorkommen können. Jetzt kann ich direkt in der Tabelle nachsehen! :)

Trotzdem vielen Dank für die Hilfe!
Antworten