Welcome
Guest
, you are in:
<root>
•
Anmelden
CP Wiki
Navigation
¶
CP Solutions
Startseite
domizil+
Startseite
Administration
Administration
Neue Seite
Alle Seiten
Kategorien
Navigations-Pfade
Datei Manager
Neuer Benutzer
Suche im wiki
»
Zurück
TRPCTable
Modified on 07/04/2010 09:21
by
CPATRD
Categorized as
Plattform
{s:KompHeader|TRPCTable} ==Zweck== Mit Hilfe der Komponenten TRPCTable können sie auf die Daten aus der Datenbank zugreifen.{BR} TRPCTable bietet einen indirekten Zugriff auf jeden Datensatz und jedes Feld der zugrundeliegenden Datenbanktabellen.{BR} Die Daten werden über die Abfrage die in der Eigenschaft SQLSelect hinterlegt ist aus der Datenbank abgerufen und stehen im Speicher am Client zur weiteren Bearbeitung zur Verfügung.{BR} Diese Daten können jetzt mittels verbundenen visuellen Elementen oder auch programmatisch bearbeitet werden, und die daraus resultierenden Änderungen können dann an die Datenabank übertragen werden.{BR} ==Beispiel== Folgendes Beispiel soll die Funktionsweise der TRPCTable verdeutlichen.{BR}{BR} <code pascal> procedure loadUser; var aTable: TRPCTable; begin aTable:= TRPCTable.create; try aTable.SystemDB := true; //Die cp_user Tabelle befindet sich in der System Datenbank with aTable.SQLSelect do begin add(' SELECT US_ID, US_LOGINNAME, US_LASTNAME, US_FIRSTNAME, US_WEBSITE '); add(' FROM CP_USER '); end; with aTable.SQLUpdate do begin add(' UPDATE CP_USER '); add(' SET US_WEBSITE = :US_WEBSITE '); add(' WHERE US_ID = :US_ID '); end; aTable.readData; //Die Daten überprüfen und ändern updateWebSiteData(aTable); finally aTable.free; end; end; </code> '''Mögliches Ergebnis der Methode loadUser:''' {| border="1" bgcolor="White" | CPAMET || Menzinger || Tabitha |- | CPARAS || Ranimirov || Sinisa |- | CPABAF || Baldemaier || Florian |} Diese Datenmenge befindet sich jetzt direkt im Speicher am Client.{BR} Nun kann man sich durch die Datenmenge bewegen mittels den Methoden first, next, prior, last.{BR} In unserem Beispiel werden wir diese in einer einfachen Form durchgehen:{BR} <code pascal> 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; </code> {BR} Jesemal wenn sie die Methode post aufrufen und zuvor einen bestehenden Datensatz bearbeitet haben, schaut die RPCTable nach welche SQLUpdate Anweisung hinterlegt worden ist.{BR} Diese wird jetzt geparst und alle Platzhalter (alle Bezeichner mit einem Doppelpunkt davor) werden ersetzt.{BR} 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.{BR} 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.{BR} Kann beides nicht gefunden werden wird eine Fehlermeldung geworfen.{BR} Analog zur SQLUpdate Anweisung funktionieren die SQLInsert und SQLDelete Anweisung.{BR} SQLInsert wird erstellt wenn mit append bzw. insert ein neuer Datensatz erzeugt wird und danach dieser mit post abgeschlossen wird.{BR} SQLDelete wird ausgeführt wenn mit delete der aktuelle Datensatz gelöscht wird.{BR} {BR} '''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.
ScrewTurn Wiki
version 3.0.1.400. Some of the icons created by
FamFamFam
.