Eintragshistorie: TRPCQueue
Compare Page Revisions
Eintragsversion: 30/11/2009 14:06
Zweck
Mit Hilfe der Komponenten TRPCQueue können zusammengehörige Änderungen von verschiedenen RPC Tabellen gegenüber der Datenbank ausgeführt werden.
Wird in einer RPC Tabelle ein Datensatz geändert oder ein neuer hinzugefügt, so wird das entsprechende SQL Script erstellt (Update oder Insert) und in die Queue abgestellt. Wird writeData aufgerufen, so werden alle gepufferten SQL Abfragen der Queue gegenüber der Datenbank ausgeführt. Jede RPC Tabelle hat interne eine Queue. Es kann jedoch im Dialog eine eigene Queue erstellt und mehreren Tabellen zugewiesen werden.
Mögliches Ergebnis der Methode loadUser:
CPAMET | Menzinger | Tabitha |
CPARAS | Ranimirov | Sinisa |
CPABAF | Baldemaier | Florian |
Diese Datenmenge befindet sich jetzt direkt im Speicher am Client.
Nun kann man sich durch die Datenmenge bewegen mittels den Methoden first, next, prior, last.
In unserem Beispiel werden wir diese in einer einfachen Form durchgehen:
procedure updateWebSiteData(aTable: TRPCTable);
begin
aTable.First; //zum ersten Datensatz bewegen
while not aTable.eof do //Solange wir noch nicht am Ende der Datenmenge sind
begin
if trim(aTable.FieldByName('US_WEBSITE').AsString) = '' then
begin
aTable.Edit; //Datensatz zur Bearbeitung öffnen
aTable.FieldByName('US_WEBSITE').AsString := 'www.cp-austria.at';
aTable.Post; //Die Änderungen am aktuellen Datensatz abschliessen (UPDATE SQL wird erstellt und in die Queue gelegt)
end;
aTable.Next; //Zum nächsten Datensatz bewegen
end;
aTable.writeData; //Die Änderungen in die Datenbank schreiben (SQL Queue wird ausgeführt)
end;
Jesemal wenn sie die Methode post aufrufen und zuvor einen bestehenden Datensatz bearbeitet haben, schaut die RPCTable nach welche SQLUpdate Anweisung hinterlegt worden ist.
Diese wird jetzt geparst und alle Platzhalter (alle Bezeichner mit einem Doppelpunkt davor) werden ersetzt.
Dabei wird zuerst nachgesehen ob ein Parameter mittels der Methoden setStringParam, setDateParam usw. hinterlegt worden ist den die Parameter haben die höhere Priorität.
Wurde kein Parameter gefunden, dann versucht die RPCTable ein Datenbank Feld zu finden welches den gleichen Namen wie der Bezeicher hat und sezt den Inhalt des Feldes ein.
Kann beides nicht gefunden werden wird eine Fehlermeldung geworfen.
Analog zur SQLUpdate Anweisung funktionieren die SQLInsert und SQLDelete Anweisung.
SQLInsert wird erstellt wenn mit append bzw. insert ein neuer Datensatz erzeugt wird und danach dieser mit post abgeschlossen wird.
SQLDelete wird ausgeführt wenn mit delete der aktuelle Datensatz gelöscht wird.
Tipps:
- Ändern sie mehrere Felder in einem Datensatz innerhalb eines edit-post aufrufes damit nur eine SQL Anweisung erstellt wird.
- Wenn mehrere Datensätze geändert werden rufen sie erst am Ende writeData auf da sonst bei jeder Änderung mit dem Server kommunziert wird und dies Zeit kostet.