Einzelnen Beitrag anzeigen

EgonHugeist

Registriert seit: 17. Sep 2011
187 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#12

AW: SQL UPDATE will nicht

  Alt 28. Nov 2012, 22:23
@Privateer3000

Ich versuchs dir mal zu erklären, wie die Komponenten arbeiten.

Im Grundsatz stellt sie nichts weiter dar als einen Holder für drei verschieden Statements: Inser, Update, Delete.

Aufgabe der Compo ist es den anderen DataSet-Komonenten das erstellen eben dieser benötigten Statements abzunehmen. Deshalb solltest du z.B. die TZQuery.UpdateObject := TZUpdateSQL zuweisen. Die Komponente bietet einen Editor, um eben die drei Statments zusammenzubasteln. (Doppelclick auf jene.) Du kannst dort den Feldnamen einen Parameter zuweisen, wie es im Delphi-Treff beschrieben ist oder schau mal hier: http://sourceforge.net/projects/zeos...hots/95422.jpg manchmal sagt ein Bild mehr als tausend Worte.

Ebenfalls kannst du dort default-values und die Parameter-Typen hinterlegen. Mit Hilfe dieser Komponente legt Zeos den Erfolg der Statments in die Hände der Benutzer. Es gab in der Vergangenheit einfach zu viele Bugreport wegen NOT_NULL Felder oder Feldern mit default-values mit Queries, welch sich über mehrere Tables erstrecken. Benützt man nun queries mit joins, welche sich ins Unendliche Erstrecken können, verweigert Zeos mit den DataSet-Komenten jeglich Art der Updates. Siehe: http://www.delphipraxis.net/171396-m...-more-tha.html ! Einfach weil das Parsen solcher Queries nun nicht wirklich Aufgabe von Zeos ist, Geschwindigkeiten verlohren gehen und vielmehr die der Datenbank und Zeos für jeden Provider extra Anpassungen bräuchte und sich die Frage stellt: wo anfangen und wo aufhöhren.

Zurück zum Thema:

Also du hast die TZDataSet-Komponente mit der TZUpdateSQL-Kompo verknüpft und die drei nötigen Statements generiert.

Die Komponente ist jedoch NICHT für das ausführen der Statements oder zuweisen der Parameter-Values gedacht, kann es jedoch. Dies tun die TZDataSet-Komponenten für dich. Wie bekannt, kannst du in der TZQuery etc. Felder und auch Parameter zuweisen. Die Felder werden in der Regel von den Controls genutzt. Entspricht ein Feld einem zugewiesenem Parameter nutzt Zeos automatisch den Parameter um die geänderten Daten der Controls dem Parameter zuzuweisen. Jedoch kannst auch du die Parameter selber füllen. JEDOCH die Parameter der TZDataSet-Komponente und nicht die der TZUpdateSQL-Komponente.

Simples Beispiel:

ZUpdateSQL1.ModifySQL := 'update tabelle1 set tabelle1.Feld1 = :Feld1; //funktioniert auch! Feld1 sollte aber im selct der TZQuery entahlten sein.
ZQuery1.UpdateObject := ZUpdateSQL1;
ZQuery1.Edit;
ZQuery1.ParamByName('Feld1'').AsString := 'Test';
ZQuery1.Post;

Ich hoffe dies war etwas verständlicher.

Gruß Michael

Geändert von EgonHugeist (28. Nov 2012 um 22:57 Uhr)
  Mit Zitat antworten Zitat