Seite 1 von 1

Bestimmten Eintrag in QSqlTableModel finden

Verfasst: 19. September 2007 10:12
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!

Verfasst: 19. September 2007 11:20
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?

Das geht leider nicht!

Verfasst: 19. September 2007 11:40
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!

Verfasst: 19. September 2007 12:13
von FlorianBecker
Warum machst du kein submit bei jedem Datensatz und löscht die Datensätze wieder, falls doch kein submit ausgeführt wird?

Performance!!!

Verfasst: 19. September 2007 12:19
von Xander77
Wie bereits erwähnt, ist das Performace-technisch unzumutbar! Der geplante Datenimport dauert dann mehrere Stunden!!!

Andere Lösung gefunden!

Verfasst: 19. September 2007 12:52
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!