Einzelnen Beitrag anzeigen

Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#6

AW: Datenimport ohne Doppelte Daten mit SQL

  Alt 1. Okt 2013, 10:17
P1 bis P2.1 komm ich jetzt nicht so ganz mit.
Es soll nur der doppelte Satz mit einem Zeichen markiert werden. Lieber währe es mir ich kann den Satz gleich Löschen. Aber das ist ja warum auch immer noch langsamer.

Könntest Du mir mit P1 mal einen kleinen weiteren Tip geben?
P1:
Ich weiß nicht genau wie ZEOS das intern macht, aber ich vermute, wenn du keine Transaktion explizit angibst / erzeugst, erzeugt ZEOS eine Transaktion automatisch.
In deinem Beispiel würde ZEOS automatisch für jeden Datensatz eine eigene Transaktion erzeugen. Das ist natürlich nicht sinnvoll...
Du müsstest dir also zu Beginn der Methode eine Transaktion erzeugen, dem Query zuordnen und am ende (oder zwischendurch) ein Commit (Speichern) der Transaktion durchführen.

P2.1:
Du setzt in jedem Schleifendurchlauf (Datensatz) den Commandtext für DBF3 neu. Den solltest du aber nur einmalig vor der Schleife setzen:
Code:
UPDATE TB_IMPORT SET GEBUCHT = 1 WHERE TB_IMPORT.BEWNR = :PAR_BEWNR;
anschließend ein DBF3.Prepare; um den Befehl zur Datenbank zu schicken.
In dem Moment weiß die Datenbank genau, was sie machen soll. Ihr fehlen aber noch die entsprechenden Datensätze / Werte.
Also füllst du jetzt innerhalb der Schleife den Parameter "AR_BEWNR" mit deiner Variable vBEWNR und führst ein Execute durch.

Wenn du das so machst, hast du gleich mehrere Vorteile:
1. du verringerst den Traffic zum Datenbankserver.
2. der Server weiß bereits, was er zutun hat, muss den Befehl also nicht jedes Mal neu parsen.
3. du kannst dir so keine SQL-Injections einfangen...
  Mit Zitat antworten Zitat