Einzelnen Beitrag anzeigen

Laaeris

Registriert seit: 10. Dez 2011
24 Beiträge
 
#23

AW: SQL UPDATE will nicht

  Alt 3. Okt 2013, 21:30
@Privateer3000

[...SNIP...]
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
Ich habe jetzt stundenlang alles Mögliche probiert und auch im Internet gesucht, aber so richtig kriege ich es nicht hin.
Ich mag einfach eine beliebige Tabelle ändern wollen (baue gerade eine immense Applikation um und mag nicht für jede Tabelle etwas Eigenes bauen an u-i-d) und hatte die Idee, den U-Fall über eine Query zu tun.
Nutze Delphi XE2 Starter, mySQL 5.5, Zeos 7

Wie mache ich das am Schlauesten? Mein bisheriger Code funktioniert nicht, egal wie ich es anstelle.
Mein momentaner Code ist wieder möglichst einfach und orientiert an Deinem Beispiel:

Delphi-Quellcode:
  //DataModul.ZQuery_Updater.SQL.Clear;
  //DataModul.ZQuery_Updater.SQL.Add('Select * from '+Schema+Tabellenname);
  DataModul.ZUpdateSQL_Updater.ModifySQL.Clear;
  DataModul.ZUpdateSQL_Updater.ModifySQL.Add('UPDATE '+Schema+Tabellenname);
  DataModul.ZUpdateSQL_Updater.ModifySQL.Add('SET '+Schema+Tabellenname+'.'+Feldname+'= :Val1');
  DataModul.ZUpdateSQL_Updater.ModifySQL.Add('WHERE '+Schema+Tabellenname+'.'+Indexfeld+'=:'+CHR(39)+inttostr(ID_Wert)+CHR(39)+';');
  DataModul.ZQuery_Updater.UpdateObject:=DataModul.ZUpdateSQL_Updater;
  DataModul.ZQuery_Updater.Edit;
  DataModul.ZQuery_Updater.Params.ParamByName('Val1').AsString:=neuer_Wert;
  DataModul.ZQuery_Updater.Post;
a) Wenn ich nun starte, ist die Fehlermeldung sinngemäss, dass die Komponente nicht aktiv ist.
b) Aktiviere ich sie vorher mit ACTIVE oder OPEN, heisst es, der SQL-Code wäre leer.
c) Fülle ich den SQL-Code (siehe die beiden ersten Zeilen) wird es zum einen sehr langsam, zum anderen findet er den Parameter nicht,
obwohl ich den in beiden Komponenten auch mal deklariert habe.
d) Ich habe es mit EXECSQL und dem obigen Code einfach in der Query (ohne ZUpdateSQL) auch schon geschafft, dass das fehlerfrei durchläuft, aber dann wird der Wert in der DB nicht geändert - trotz Autocommit TRUE der Connection.

Was mache ich falsch oder:

Gibt es ein einfaches Beispiel, das ich nutzen kann, bei dem ich mit einer Komponente Query eine Tabelle ändern kann, bei der ich einen Indexfeldwert habe und einen Wertfeldnamen (und einen Wert)?

Viele Grüße,

David
  Mit Zitat antworten Zitat