@Sharky
Ich denke jetzt wieder
@xZise
jetzt hast Du die Chance über die Parameter Geschwindigkeit zu machen z.b. so:
Delphi-Quellcode:
q.sqltext:='INSERT INTO Personen(Name,Vorname,HauptKursID,Obsolet) VALUES (:AName, :AVorname , 0, 0);
for i:=0 to liste.count-1 do begin
q.parambyname('Aname').asstring:=liste[i].Name;
q.parambyname('Avorname').asstring:=liste[i].Vorname;
q.sqlexec;
end;
So sollte es im Prinzip ablaufen. Der Einfacheit halber ist bei mir Liste keine Stringliste, aber ich denke das Prinzip ist klar.
SQL-Code:
DELETE FROM Kurszuweisungen WHERE PersonenID = ASchuelerID AND KursID = AKursID
UPDATE Personen SET HauptKursID = AKursID WHERE PersonenID = APersonenID
INSERT INTO Kurszuweisungen (PersonenID, KursID) VALUES (ASchuelerID, AKursID)
auch hier solltest Du (wenn möglich!) erst alle DELETE-Anweisungen, dann die UPDATEs und dann die INSERTs ausführen lassen.
Natürlich unter Ausnutzung der Parameter.
was die Transaktion angeht, würde ich jede for i:=.Schleife in eine Transaktion packen, aber das ist eine reine Bauchempfehlung.
Gruß
K-H