Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL UPDATE will nicht (https://www.delphipraxis.net/171853-sql-update-will-nicht.html)

EgonHugeist 4. Dez 2012 06:40

AW: SQL UPDATE will nicht
 
:?:Grad mal selber gecheckt, et voila: Oija, doch doch :P Funzt wunderbar. :o

Gugst du: :cyclops:
Zitat:

Die Komponente bietet einen Editor, um eben die drei Statments zusammenzubasteln. (Doppelclick auf jene.)
Doppelclick auf die KOMPONENTE welche sich auf dem Formular befindet. Ist ja klar, wenn du auf die TStrings-prop clickst, das da ja der standart StringListen-Editor öffnet.

Grüßle

Privateer3000 4. Dez 2012 18:29

AW: SQL UPDATE will nicht
 
Zitat:

Zitat von EgonHugeist (Beitrag 1194217)

Doppelclick auf die KOMPONENTE welche sich auf dem Formular befindet. Ist ja klar, wenn du auf die TStrings-prop clickst, das da ja der standart StringListen-Editor öffnet.

Grüßle

Krass
ich sollte mal auf alles doppelklicken was mir übern Weg hoppelt.
Danke für den Tipp!

Grüße

Laaeris 3. Okt 2013 20:30

AW: SQL UPDATE will nicht
 
Zitat:

Zitat von EgonHugeist (Beitrag 1193499)
@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

Laaeris 3. Okt 2013 20:38

AW: SQL UPDATE will nicht
 
...manchmal ist es so einfach... ich hatte da einen Doppelpunkt zuviel, und beim posten hab ich's gemerkt. :-)

Ich nutze jetzt erst mal das Folgende:

Delphi-Quellcode:
  DataModul.ZQuery_Updater.SQL.Clear;
  DataModul.ZQuery_Updater.SQL.Add('UPDATE '+Schema+Tabellenname);
  DataModul.ZQuery_Updater.SQL.Add('SET '+Schema+Tabellenname+'.'+Feldname+'= :Val1');
  DataModul.ZQuery_Updater.SQL.Add('WHERE '+Schema+Tabellenname+'.'+Indexfeld+'='+CHR(39)+inttostr(ID_Wert)+CHR(39)+';');
  DataModul.ZQuery_Updater.Params.ParamByName('Val1').AsString:=neuer_Wert;
  DataModul.ZQuery_Updater.ExecSQL;
Viele Grüße & Sorry,

David

DeddyH 4. Okt 2013 08:42

AW: SQL UPDATE will nicht
 
Wieso nutzt Du einmal SQL-Parameter und einmal nicht? Wie ist es so (ungetestet)?
Delphi-Quellcode:
const
  UPDATE_SQL = 'UPDATE %s%s SET %s%s.%s = :Val1 WHERE %s%s.%s = :Val2';
begin
  DataModul.ZQuery_Updater.SQL.Text := Format(UPDATE_SQL,
    [Schema,
     Tabellenname,
     Schema,
     Tabellenname,
     Feldname,
     Schema,
     Tabellenname,
     Indexfeld]);
  DataModul.ZQuery_Updater.Params.ParamByName('Val1').Value := neuer_Wert;
  DataModul.ZQuery_Updater.Params.ParamByName('Val2').Value := ID_Wert;
  DataModul.ZQuery_Updater.ExecSQL;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz